Python スクリプトを使って個々のインスタンス グループをステートフル MIG に移行する方法
Google Cloud Japan Team
※この投稿は米国時間 2022 年 6 月 27 日に、Google Cloud blog に投稿されたものの抄訳です。
GCP Compute Engine マネージド インスタンス グループ(MIG)は必要なあらゆる VM 構成をサポートしており、VM の管理を支援してくれます。たとえば、MIG 内の VM が予期せず実行を停止した場合、設定した構成に従って MIG によりその VM が再作成されます。また、アプリケーション ベースのヘルスチェックを設定して、アプリケーションが各 VM 上で期待どおりに応答していることを確認できます。
さらに、MIG によってデータベース(Cassandra、ElasticSearch)やデータ処理アプリケーション(Kafka、Flink)などの複雑なステートフル アプリケーションをデプロイできます。そのようなアプリケーションでは、個々の VM の状態(データベース シャード、アプリの構成など)の保持が重要です。
GCP を使い始めたばかりで、ステートフル アプリケーションをデプロイしたい場合、ステートフル MIG 構成の使用を強くおすすめします。ステートフル MIG によって、VM を再起動、再作成、自動修復、更新する際に各インスタンスの固有の状態(インスタンス名、アタッチされた永続ディスク、プレビュー版で提供されている IP アドレス、メタデータなど)を保持できます。ステートフル MIG についての詳細は、ドキュメントをご覧ください。
このブログ投稿の目標は、スタンドアロン(非マネージド)Compute Engine インスタンス上で既存のステートフル アプリケーションをすでに実行しており、Python スクリプトを使ってそれらのインスタンスをステートフル MIG に自動的に移行したいと考えている方々を支援することです。スクリプトのコードとそのインストールおよび使い方の詳細な手順については、こちらをご覧ください。このプロセス全体を手動で行いたい場合は、既存のワークロードをステートフル マネージド インスタンス グループに移行するためのチュートリアルをご確認ください。
スクリプトのロジックと実行の仕組みについて詳しく見てみましょう。
スクリプトの要件
スクリプトを実行する前に、既存のインスタンスが次の条件を満たしていることを確認してください。
すべての移行元インスタンスは同じインスタンス構成(マシンタイプなど)である必要があります。MIG 内のすべてのインスタンスは同じインスタンス テンプレートに従って作成されます。スクリプトによって既存のインスタンスの 1 個に基づき、テンプレートが作成されます。
ブートディスクはステートレスである必要があります。ブートディスクで状態を保持しなければならない場合は、ステートフル MIG を作成できます。ただし、ブートイメージの更新をロールアウトしてもオペレーティング システムまたはソフトウェアは更新できません。
スクリプトによって移行元 VM インスタンスが停止されます。MIG が期待どおりに動作しなかった場合に簡単に元に戻すために、ディスクはそのままの状態でスクリプトによってすべての移行元 VM が停止されます。この場合、以下の理由から追加費用が発生します。
スクリプトによって元のディスクは切断または削除されません。
スクリプトによって既存のディスクからイメージが作成されます。
VM 名には依存しません。移行元 VM 名はそのまま使用されます。MIG 内の新しい VM には新しい名前が付きます。なんらかの形で VM 名と関連付けられている場合はご注意ください。
スクリプトの手順
すべてのインスタンスを停止します。
必要に応じて、ブートディスク イメージを作成します。
選択したインスタンスのプロパティに基づいてインスタンス テンプレートを作成します。アタッチされたデータディスクは除外します。
空の MIG を作成します。
元のグループ内の各インスタンスに対して、次の手順を行います。
ブートディスク以外のすべてのインスタンス ディスクのクローンを作成します。
インスタンス テンプレートに基づいて MIG 内にインスタンスを作成し、移行元インスタンスからクローンを作成したディスクを含めます。
ステートフル MIG がニーズに合っていることを確認した後で、移行元インスタンスをクリーンアップするためのコマンドを出力します。
スクリプトを使う準備ができたら、リンクに従って、インストールと実行をします。
使用例
インスタンス構成がいくつかあるとした場合のスクリプトの進行をご紹介します。us-central1-a ゾーンに「alpha」、「beta」、「gamma」という名前の 3 つのスタンドアロン インスタンスがあり、それらを「greek」という名前で MIG に移行したいとします。
インスタンス「alpha」には、「alpha-disk-1」と「alpha-disk-2」という 2 つの追加ディスクがあります。インスタンス「beta」には、「beta-disk-1」という 1 つの追加ディスクがあります。インスタンス「gamma」に追加ディスクはありません。同時に、ブートイメージのためのディスク イメージを作成したいと考えています。
次のコマンドを実行します。
出力を段階的に見てみましょう。
最初にすべてのインスタンスが停止されます。
2. 「image_for_boot_disk」フラグを設定したため、ブートディスクのためのイメージが作成されます。
3. デフォルトでは、インスタンス テンプレートでマシン構成を指定するために alpha が選ばれます(別のインスタンスを明示的に設定することも可能です)。
4. 空の MIG「gamma」が作成されます。
5. 個々のインスタンスに対して、(移行元のインスタンスのデータが損傷しないように)すべてのディスクのコピーを作成し、MIG 内の VM にアタッチします。
新しく作成された MIG に問題がなければ、移行元のインスタンスを削除できます。次のコマンドを使用します。
なんらかの理由で初期構成に戻りたい場合は、ターミナルまたは Cloud Shell で、次のクリーンアップ コマンドを使用します。
これで、MIG が設定されました。次のステップ
- インスタンスごとの構成ではなくステートフル ポリシーを使用する
- VM を追加する
- デベロッパーリレーションズ エンジニア Fedor Isakov