クラウド アーキテクトや IT 管理者として、Compute Engine でのアプリケーションの実行を計画する場合、効率的にプロビジョニングを行い運用できる VM トポロジを設計する必要があります。
Compute Engine にはさまざまなデプロイの形態が用意されています。たとえば、単一のエンティティとして管理する VM のグループをデプロイすることや、複数の VM を別々のリソースとしてプロビジョニングし管理することが可能です。各方法には、それぞれメリットと制限があります。最適なデプロイ形態は、次の手順で選択します。
- まず、アプリケーションの主な要件を評価します。
- 利用可能なデプロイ形態とそれぞれのメリットを確認します。
- 要件を満たし、Compute Engine の機能を最大限に活用する形態を選択します。
ワークロードの評価
次の質問を行うことで、デプロイするワークロードの主な要件を分析します。その回答によって、各デプロイ形態の特性(次のセクションで説明)がワークロードの要件にマッピングできるようになります。
- アプリケーションの形態 - アプリケーションはステートフルですか? - ステートフル アプリケーションは、クライアントやセッション ID などの特定のデータを不要になるまで保存します。たとえば、オンライン ショッピング アプリでは、ショッピング カート サービスによりユーザーがショッピングを続けている間に追加や削除された商品の詳細が保存され、ユーザーが決済処理を始める際の最終的なカートの状態が保持されることがあります。
- ステートレス アプリケーションでは、クライアント、トランザクション、セッション データを保存する必要がありません。たとえば、クライアントがリクエストしたコンテンツを提供した後、ウェブサーバーがセッションを終了することがあります。
 - ステートフル アプリケーションとステートレス アプリケーションの詳細については、ステートフル ワークロードとステートレス ワークロードの違いをご覧ください。 
- VM の再起動時、または Compute Engine が VM を再作成(自動修復)するときに、インスタンス固有のメタデータを保持する必要はありますか? 
 
- プロビジョニング - 複数の VM に、異なるマシンタイプやイメージを混在させる必要はありますか?たとえば、一部の VM にはメモリ最適化マシンタイプを必要とする一方で、他の VM では汎用マシンタイプを使用することがありますか?
- 費用と応答時間の最適なバランスを維持できるように、負荷の変化に応じてインフラストラクチャを自動的にスケールする必要がありますか?
- すべての VM を、1 つのゾーン、1 つの VPC ネットワーク、1 つのサブネットで実行できますか?
- アプリケーションを特定の他のリソースと同じゾーンで実行する必要がありますか?たとえば、アプリケーションがデータベースと低レイテンシで接続される必要はありますか?
 
- オペレーション - 複数の VM を単一のグループとして管理しますか?たとえば、すべての VM にわたるアプリケーションの更新のロールアウトを自動化しますか?
- VM の管理にカスタムツールまたはサードパーティのツールを使用する必要はありますか?
- 障害が発生した VM の処理を制御する必要はありますか?たとえば、VM で障害が発生した場合、その根本原因を特定する間、VM を停止した状態に維持しますか?
- VM の起動、停止、一時停止、再開のシーケンスやスケジュールを制御する必要はありますか?たとえば、費用を節約するために、週末や 1 日の特定の時間帯に VM を停止する予定はありますか?
 
- レジリエンス - アプリケーションにゾーン障害に対する保護が必要ですか?つまり、1 つのゾーンがダウンした場合、リージョン内の他のゾーンにある VM からのリクエストをアプリケーションが引き続き処理するようにしますか?
- なんらかの理由で VM が停止またはクラッシュした場合、あるいはアプリケーションがリクエストに応答しない場合、Compute Engine が VM を自動的に再作成する必要がありますか?
- アプリケーションでは、ホスト VM に内部または外部の固定 IP アドレスが必要ですか?
 
以上で要件の評価が終わりました。次に、Compute Engine で用意されているデプロイ形態について説明します。
利用可能なデプロイ形態の確認
ワークロードを Compute Engine にデプロイする際に検討できる各形態の特長と、それぞれの相対的なメリットを確認して把握します。
- スタンドアロン VM
- この形態では、プロビジョニングする VM ごとにマシンタイプ、イメージ、ディスクなどの属性を個別に選択します。また、複数の VM を別々のリソースとして管理します。
- 非マネージド インスタンス グループ
- 複数のスタンドアロン VM は、プロビジョニングして 1 つのインスタンス グループに追加できます。そうすると、その非マネージド インスタンス グループをロードバランサのバックエンドとして使用できます。
- マネージド インスタンス グループ(MIG)
- MIG は、同一または類似の構成を持つインスタンスのグループです。これは、1 つのインスタンス テンプレートでプロビジョニングします。 - MIG をステートフルにすることによって、特定のディスクやメタデータを保持できます。 
- ステートレス MIG の場合、自動スケーリングを有効にして、スケーリング ポリシーを構成できます。 
- MIG の作成中に、VM は、単一のゾーン内にデプロイすることも、リージョン内の複数のゾーンに分散して高可用性を実装することもできます。 
 
次の表では、各デプロイ形態の主な特長の概要を示します。
| 能力 | スタンドアロン VM | 非マネージド インスタンス グループ | ステートフル MIG | ステートレス MIG | 
|---|---|---|---|---|
| VM グループのテンプレートに基づくプロビジョニング | ||||
| マシンタイプとイメージの混在 | ||||
| 内部または外部の固定 IP アドレス | ||||
| 障害が発生した VM の自動修復 | ||||
| VM の起動と停止、一時停止と再開オペレーションの制御 | ||||
| VM のグループをロードバランサのバックエンドとして設定 | ||||
| ステートフル ワークロードでのディスクとメタデータの保持 | ||||
| 特定の VM の更新制御 | ||||
| 全 VM の自動ローリング アップデート | ||||
| 水平方向の自動(および予測)スケーリング | 
次の図では、主な違いを把握できるように、サンプルのデプロイを並べて示します。
| スタンドアロン VM | ステートフル MIG | ステートレス MIG | 
|---|---|---|
| この例では、3 つの VM が別々に作成されています。 | この例では、インスタンス テンプレートを使用してプロビジョニングされた MIG に、類似構成の VM が 3 つあります。 | この例では、インスタンス テンプレートを使用してプロビジョニングされた MIG に、同一構成の VM が 3 つあります。 | 
|  |  |  | 
| 
 | 
 | 
 | 
以上でワークロードを評価して、Compute Engine が提供するデプロイの形態を確認し、デプロイ方法を選択する準備が整いました。
デプロイ形態の選択
ここで説明する推奨事項は、具体的なワークロードの特徴と、Compute Engine の各デプロイ形態の特性のマッピングに基づいています。
以下の意思決定フローを使用します。視覚的な解説が必要な場合は、このドキュメントで後述するディシジョン ツリーをご覧ください。
- スタンドアロン VM か、インスタンス グループのどちらかを選択します。 - 要件 - 推奨されるデプロイ形態 - ワークロードには、次の要件のうち少なくとも 1 つが必須である。 - アプリケーションは、マシンタイプやイメージが混在する複数の VM で実行される必要がある。
- アプリケーションには、ホスト VM の内部または外部の固定 IP アドレスが必要である。
- 障害が発生した VM の扱いを制御する必要がある。
- VM の起動と停止、または一時停止と再開のオペレーションを制御する必要がある。
- VM をプロビジョニングまたは削除するには、カスタム スクリプトまたはサードパーティ ツールを使用する必要があります。
 - スタンドアロン VM を選択します。 - スタンドアロンの全 VM が、1 つのゾーン、1 つの VPC ネットワーク、1 つのサブネットで実行できる場合、各 VM を非マネージド インスタンス グループに追加することを検討してください。そうすると、非マネージド インスタンス グループをロードバランサのバックエンドとして使用できます。 - この意思決定フローの残りはスキップします。 - ユースケースに、上記要件のいずれも必須ではない。 - MIG を使用して、管理が容易で、可用性が高く、スケーラブルな Compute Engine トポロジを設定します。 - 次の手順に進みます。 
- ステートフル MIG か、ステートレス MIG のどちらかを選択します。 - 要件 - 推奨される MIG の種類 - アプリケーションでディスクとメタデータを保持する必要がある。つまり、アプリケーションがステートフルである。 - ステートフル MIG を選択して、VM の再作成、自動修復、更新などの中断を伴うイベントの発生時に Compute Engine が保持する必要があるディスクを構成します。 - 次の手順に進みます。 - アプリケーションがステートフルではない。 - ステートレス MIG を選択して、自動スケーリング機能を活用します。中断を伴うオペレーションでは、Compute Engine により、インスタンス テンプレートに従ってディスクが再作成されます。 - 次の手順に進みます。 
- ゾーン MIG か、リージョン MIG のどちらかを選択します。 - 要件 - 推奨される MIG の種類 - アプリケーションを単一のゾーンで実行する必要があるか、ゾーン障害に対する保護が必須ではない。 - ゾーン MIG を選択します。 - ゾーン障害が発生しても、アプリケーションの実行を継続する必要がある。 - リージョン MIG を選択します。 
ディシジョン ツリー
次の図では、Compute Engine のデプロイ形態を決定する際に考慮する要素を示します。
次のステップ
- インスタンス テンプレートの詳細を確認する。
- ステートフル MIG の仕組みを確認する。
- リージョン MIG の詳細を確認する。
- MIG を作成する。
- インスタンスのグループを自動スケーリングする。
- 既存のワークロードをステートフル MIG に移行する。