GoogleCloud PCA資格の学習記録 - Compute編

## はじめに

Google CloudのPCA(Professional Cloud Architect)認定資格取得に向けて学習した内容を自分なりに整理します。Google Cloudのサービスに限らず、それを扱う上での関連知識についても触れています。
本記事はCompute編ということで、下記の要素を扱います。

* コンピュートサービス
    * Compute Engine
    * Google Kubernetes Engine(GKE)
    * App Engine
    * Cloud Run
    * Cloud Functions
* その他ツールなど
    * Firebase Test Lab
    * Firebase Hosting


:::note
この記事における「現在」や「最近」などの表現は、特に断らない限り2025年6月時点を指します
:::

## コンピュートサービス

### Compute Engine

フルコントロール可能な仮想マシン（VM）を提供するIaaS型サービス

* カスタマイズ性の高さが最大の特徴
    * OSの選定、CPU・メモリの構成、永続ディスクやGPUの追加など
* 高パフォーマンス・低レイテンシ
* そのため以下のシーンに適している
    * リフト＆シフト: オンプレミスのVM環境をそのままクラウドに移行する
    * 独自のカーネル設定やセキュリティパッチ、特殊なライブラリなど、細かいシステム要件がある

#### マネージドインスタンスグループ（MIG）

マネージドインスタンスグループ（MIG）を利用すれば、同じ構成のVMインスタンスを複数まとめて管理できる

* オートスケーリング
    * CPU使用率やネットワーク負荷などに応じてインスタンス数を自動で増減
    * スケーリング条件はカスタマイズできる
* ローリングアップデート（段階的更新）
    * 新しい構成のテンプレートを適用した際、順番にVMを更新
* 自動修復
    * VMが非正常状態になると自動で再作成
    * ヘルスチェック（健全性チェック）を使って稼働状況を継続監視
* 負荷分散との統合
    * Cloud Load Balancing と組み合わせて、インスタンスグループにトラフィックを分散
    * ゾーン間・リージョン間の高可用性構成を実現

マネージドインスタンスグループを使用する際には、インスタンステンプレートの利用が推奨される。
これは既存のディスクから作成したカスタムイメージをベースイメージとする方法。

```
既存のディスク -> カスタムイメージ -> インスタンステンプレート
```


#### OS Patch Management

* Compute Engine VMに対してOSパッチ適用の自動化を可能にするサービス
* 定期的なパッチジョブのスケジューリングや、コンプライアンスレポートによる状態確認なども行える


### Google Kubernetes Engine(GKE)

Google がフルマネージドで提供する Kubernetes クラスタ環境

* コンテナ化されたアプリケーションを統合的に管理できる点が最大の特徴
* マイクロサービスアーキテクチャやCI/CD、自動スケーリング、監視との統合にも優れる
* Autopilot モードを使えばインフラの運用管理も最小限に抑えることができる
    * Autopilotモードは、完全マネージドでGKEを運用するモード
    * Cloud RunやApp Engineのように、サーバー運用に関する部分をGoogle Cloudに委ねる状態

#### 前提知識: Kubernetesの構成要素

* クラスタ
    * Kubernetesの全体のシステムのこと
    * クラスタは「マスターノード」と「ワーカーノード」で構成される
* ノード
    * クラスタを構成する個々のマシン（サーバー）
    * 物理サーバーでも仮想マシンでも構わない
    * マスターノード（コントロールプレーン）
        * クラスタ全体を管理・制御する司令塔
    * ワーカーノード
        * 実際にアプリケーションが動作するマシン
* ポッド
    * Kubernetesでアプリケーションを動かす最小単位
    * 通常は1つのコンテナが入るが、密接に連携する複数のコンテナを含むこともある
    * Podは一時的な存在で、必要に応じて作られたり削除されたりする

```
クラスタ（全体のシステム）
├── マスターノード（管理役）
└── ワーカーノード（実働部隊）
    └── Pod（アプリケーションの実行単位）
        └── コンテナ（実際のアプリケーション）
```


#### コマンド

* `gcloud`
    * Google Cloud全体を管理するコマンド
    * GKEでは、クラスタの作成や更新で使用する
* `kubectl`
    * Kubernetesクラスタを管理するための標準ツール
    * GKEでは、PodやServiceの管理で使用する
* `kubemci`
    * 複数クラスタにまたがるIngressを作成する（≒ HTTP(S)ロードバランサーを作成する）専用CLI



#### Anthos

ハイブリッド／マルチクラウド対応のKubernetes管理・運用プラットフォーム

* 複数のKubernetesクラスタを総合的に管理する
    * ここでいう「複数のKuberentesクラスタ」は、オンプレミスやAWSなど他クラウド環境も対象
    * それらに対して、統一されたポリシー、セキュリティ、サービスメッシュ管理を提供する
        * サービスメッシュ: マイクロサービス間の通信をアプリケーションの外側で統一的に制御する仕組み
            * 「どこに通信するのか」「どのように通信するのか」「失敗時のリトライはどうするのか」などをアプリケーションコードの中で制御するのではなく、切り出された専用の仕組みに任せるもの


##### Cloud Run for Anthos

Cloud Run のサーバーレスな開発体験を保ちつつ、GKEクラスタでコンテナを実行できる環境


#### Istio

Kubernetes上で動作するサービスメッシュの代表的な実装
アプリケーションのコードを変更せずに、トラフィック制御・セキュリティ・可観測性・リトライ・タイムアウト・サーキットブレーカーなどの機能を提供


##### フォールトインジェクション

* 意図的にHTTPエラーを返したり、レスポンスに遅延を発生させたりして、マイクロサービスの障害挙動をシミュレートできる機能
* 本番に近いトラフィック条件下での耐障害性テスト（カオスエンジニアリング）が可能


#### Ingress

外部トラフィックをKubernetesクラスタ内のサービスにルーティングする
レイヤー7（アプリケーション層: HTTP(S)）でのルーティング制御を行う


### App Engine

#### App Engine Standard Environment

インフラ管理不要（サーバーレス）でアプリケーションコードをデプロイするだけで動作するPaaS

* インスタンスの起動・停止やスケーリングは完全に自動で行われ、トラフィック量に応じたリソース割当が行われる
* バージョン管理やトラフィック分割など、アプリの運用面も機能が提供されている
* そのため、主に以下のシーンに適している
    * トラフィックに大きな波があり、インフラのスケーリングを自動で任せたい
    * バージョンごとに動作を検証したり、一部のトラフィックだけを新バージョンに流すなどの運用が必要
* memcacheが組み込まれている
    * memcacheのサービスレベル
        * 共有（shared）
            * 無料で使えるが他アプリとキャッシュが共有される
            * 開発環境や、ごく軽い用途で使用する
        * 専用（dedicated）
            * 特定のアプリ専用にメモリを確保し、確実にキャッシュを保持する
            * 基本的に本番環境ではこちらをしｙ

#### App Engine Flexible Environment

* Docker コンテナベースの環境で、Standardに比べて、より高い自由度がある
* 任意のライブラリ・ランタイムを使用可能
* VMベースなので、Cloud Logging, Monitoring, SSH接続など Compute Engine の機能が利用可能
* アプリは Compute Engine VM 上で実行される（数秒～数十秒の起動時間）



### Cloud Run

コンテナイメージをリクエスト駆動で実行できるサーバーレスなプラットフォーム

* コンテナを扱うためCloud Functionsよりも自由度が高く、好きな言語やランタイム、バイナリを含むアプリケーションをデプロイ可能
* リクエストに応じて自動スケールし、同時実行やリクエストごとのインスタンス分離設定も可能


### Cloud Functions

関数単位でデプロイできる、イベント駆動型のサーバーレスなFaaS（Function as a Service）

* 特定のイベント（Pub/Sub、Cloud Storage、Firebase など）をトリガにして自動的にコードを実行できる
* リクエストごとに必要なだけインスタンスがスケールする
* 関数は短時間で実行される軽量なユースケース向き



## その他ツールなど

### Firebase Test Lab

* モバイルアプリ（Android/iOS）の自動テストを実行できるテストツール
* ビルド済みのアプリをアップロードし、そのアプリに対するテストを実機やエミュレータ上で実行し、結果をレポートとして提供する
* 様々なOSバージョン、画面サイズ、設定の端末上でテストを実行できる

### Firebase Hosting

* 静的コンテンツ（HTML, CSS, JSなど）を高速に配信できるホスティングサービス
* GoogleのグローバルCDNを活用して、エッジロケーション（なるべくユーザーに近い拠点）から配信される