マネージド インスタンス グループ(MIG)で VM インスタンスを正常に作成または再作成できない原因として考えられる問題はいくつかあります。
削除された MIG にログが生成される場合
次のような状況が考えられます。
接続されたオートスケーラーがまだ存在する
Compute Engine API を使用して MIG を削除し、接続されたオートスケーラーを削除する別のリクエストを発行しなかった場合、ログ エクスプローラに次のメッセージが表示されることがあります。
The resource 'projects/PROJECT/zones/ZONE/instanceGroupManagers/DELETED_INSTANCE_GROUP_NAME' was not found.
解決策:
この問題を解決するには、Compute Engine API メソッドを使用して接続されたオートスケーラーを削除します。
- ゾーン MIG のオートスケーラーの場合は、
autoscalers.delete
メソッドを使用します。 - リージョン MIG のオートスケーラーの場合は、
regionAutoscalers.delete
メソッドを使用します。
MIG がインスタンスを作成または再作成できない場合
次のような状況が考えられます。
ブートディスクがすでに存在している
デフォルトでは、インスタンスを作成すると新しいブート永続ディスクが作成されます。ブートディスクの名前は VM の名前と同じになります。VM の名前が my-instance
の場合、ディスクにも my-instance
という名前が付けられます。その名前で永続ディスクがすでに存在している場合、リクエストは失敗します。この問題を解決するには、必要に応じてスナップショットを作成してから、既存の永続ディスクを削除します。
インスタンス テンプレートが無効
インスタンス テンプレートを最近更新した場合、MIG に無効なプロパティが存在することが原因で、VM の作成に失敗することがあります。次のような一般的なエラーがないか確認してください。
- ソースイメージなど、存在しないリソースを指定した。
- リソース名にスペルミスがある。
- ブート以外の永続ディスクを読み取り / 書き込みモードでアタッチしようとしたが、グループに複数の VM が存在している。複数の VM が存在するグループの場合、グループ内のすべての VM で共有する追加ディスクは読み取り専用モードでのみアタッチできます。
リソースタイプの上限を超えている
リージョン MIG に 2,000 個を超える VM を作成しようとするか、ゾーン MIG に 1,000 個を超える VM を作成しようとすると、次のエラーが発生します。インスタンス グループのサイズ上限に達しています。
エラー メッセージ:
ERROR: (gcloud.compute.<INSTANCE_GROUP_TYPE>.<METHOD>) Could not fetch resource: - Exceeded limit 'MAX_INSTANCES_IN_INSTANCE_GROUP' on resource 'PROJECT_ID'. Limit: NUMBER
解決策:
この問題を解決するには、以下のいずれかを試します。
- ゾーン MIG を使用している場合は、代わりにリージョン MIG を使用します。
- 複数の MIG を作成し、ロード バランシング構成を調整するなどして、ワークロードをそれらの MIG に分けます。
- さらに大きなグループが必要な場合は、MIG のサイズ上限を増やすか、サポートに連絡して、リクエストしてください。
MIG またはそのインスタンスを削除できない場合
次のような状況が考えられます。
ゾーンまたはリージョンにリソースがない
リージョン MIG を削除しようとしたときに、--zone
フラグを指定する、リージョンを指定しない、または誤ったリージョンを指定すると、次のエラーが発生します。ゾーン MIG を削除して --region
フラグを指定した場合も同様のエラーが発生する可能性があります。
エラー メッセージ:
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The resource 'projects/PROJECT/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME' was not found
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The resource 'projects/PROJECT/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME' was not found
解決策:
この問題を解決するには、以下のいずれかを試します。
- 適切な
--region
フラグまたは--zone
フラグをコマンドに追加します。 - デフォルトのリージョンとゾーンを設定します。
リソースがバックエンド サービスで使用されている
ロードバランサのバックエンド サービスで使用されている場合、インスタンス グループを削除することはできません。インスタンス グループを削除する前に、バックエンド サービスからインスタンスを削除する必要があります。
エラー メッセージ:
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The instance_group_manager resource 'projects/PROJECT/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME is already being used by 'projects/PROJECT/global/backendServices/BACKEND_SERVICE
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The instance_group_manager resource 'projects/PROJECT/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME is already being used by 'projects/PROJECT/global/backendServices/BACKEND_SERVICE
解決策:
(任意)バックエンド インスタンス グループをドレインします。
プロキシ ロードバランサの場合のみ、バックエンド サービスからインスタンス グループを削除する前に、容量スケーラーを
0.0
に設定できます。容量スケーラーをゼロに設定するには、gcloud compute backend-services edit
コマンドを使用します。プロキシとパススルー ロードバランサの両方の、バックエンド サービスでコネクション ドレインを有効にすると、インスタンス グループがバックエンド サービスから削除されるときはいつでも、Google Cloud が既存の接続を保持、完了、ドレインしようとします。
リージョンまたはグローバル バックエンド サービスから MIG を削除します。
ゾーン MIG の場合は、次のコマンドを実行します。
gcloud compute backend-services remove-backend BACKEND_SERVICE \ --instance-group=INSTANCE_GROUP_NAME \ --instance-group-zone=ZONE \ [--region=REGION | --global]
リージョン MIG の場合は、次のコマンドを実行します。
gcloud compute backend-services remove-backend BACKEND_SERVICE \ --instance-group=INSTANCE_GROUP_NAME \ --instance-group-region=REGION \ [--region=REGION | --global]
MIG を削除します。
gcloud compute instance-groups managed delete INSTANCE_GROUP_NAME
MIG が繰り返しインスタンスを再作成しようとする場合
次のような状況が考えられます。
ヘルスチェック プローブがインスタンスに到達できない
自動修復ポリシーを構成したものの、ヘルスチェック プローブがアプリケーションに到達できるファイアウォール ルールを構成しなかった場合(または構成にミスがあった場合)、VM が正常な状態でない可能性があるとして、MIG は引き続き再作成を続けます。ヘルスチェックのファイアウォール ルールの構成方法については、こちらのヘルスチェックの設定例をご覧ください。