ゾーンのキャパシティ不足でCompute Engineインスタンスが起動できないときの対処法 (ZONE_RESOURCE_POOL_EXHAUSTED)

記事タイトルとURLをコピーする

はじめまして。6月にG-genにジョインした佐々木です。
私はこれまでにAWSのEC2やGoogle CloudのCompute Engineなど、クラウドの仮想マシンサービスに触れる機会が多くありました。
今回はその仮想マシンサービスに関する、まれに起こるからこそ困ってしまう事象について書こうと思います。

当ブログではGoogle CloudのCompute Engineを題材としますが、AWSのEC2やAzureのAzure VMでも同様の事象が起こり得ます。
原因や対処法についても大きく変わることはないでしょう。

事象

Compute Engineを利用していると、こんな経験をすることがあります。

  • 昨日の夜に止めるまではちゃんと動いていたインスタンスが、朝になって起動できなくなった!
  • 新しくインスタンスを立てようとしたけど、エラーが出て起動できない!

こういった場合、Google Cloudのコンソールには以下のような表示が出ているかもしれません。

"The zone 'projects/{プロジェクトID}/zones/{ゾーン名}' does not have enough resources available to fulfill the request. Try a different zone, or try again later."

コンソール右上の通知
コンソール下部の通知

また、Cloud Loggingにはインスタンス起動を試みた時刻に以下のようなログが残っているでしょう。(以下、Cloud Loggingから抜粋)

"message": "ZONE_RESOURCE_POOL_EXHAUSTED",

原因と対処

原因

エラー文に書いてある通りなのですが、Google Cloudの特定ゾーン内にインスタンスを起動するためのキャパシティがない場合にこのエラーが発生します。

クラウドサービスはユーザーが物理的なインフラを意識することなく利用することができますが、当然、クラウドベンダーのデータセンターにはサーバーが存在しています。
インスタンスを停止してデータセンター内のリソースを解放しているうちに、他のユーザーがそのリソースを使ってしまい、昨日まで使えていたリソースが無くなっているという、クラウドサービス特有の事象と言えるでしょう。

より単純化して説明すると、クラウドベンダーがユーザーに貸し出しているサーバーが、一時的に在庫切れを起こしてしまっている状況です。

対処① インスタンスの起動を再度試してみる。

現行の環境に対して最も影響が少なく、即座に実行することができる対処となります。
いずれは起動することができますが、いつ起動できるようになるかは全く予想できません。
ですが、まずは数回トライしてみるのがいいでしょう。運良くキャパシティができた隙に起動できるかもしれません。

対処② マシンタイプを変えて起動してみる。

異なるマシンタイプに変更することで、インスタンスを起動できることがあります。
マシンタイプの変更は即座に実施できるため、対処①と組み合わせて行うのも良いでしょう。
マシンタイプを小さくすればスペックの低下、大きくすれば料金の増加とそれぞれデメリットがあります。
また、こちらもゾーンのキャパシティ状況によってはすぐに起動できない可能性があります。

対処③ 別のゾーンにインスタンスを起動する。

キャパシティ不足はゾーン単位で起こっているため、他のゾーンにインスタンスを起動します。
マシンイメージを利用することで、インスタンスの構成やディスク内のデータを保持したまま別のゾーンに複製することができます。
外部IPアドレスを使用している場合は、インスタンスを複製した後に付け替えると良いでしょう。

また、インスタンス名はプロジェクト内で、内部IPアドレスはVPC内で重複することができません。
もしそれらを保持したまま別のゾーンで起動したいのであれば、マシンイメージを作成(忘れずに!)した後、既存のインスタンスを削除してインスタンス名や内部IPアドレスを使用できるようにしてから、別のゾーンに起動しましょう。

対処④ サポートを利用する。

おそらく対処③までやれば解決するかと思いますが、それでも解決しない or 何かしらの事情で上記の対処を行えない場合、最終手段としてGoogle Cloudのサポートに連絡することになるでしょう。

予防策

リソースの予約を用いることで、ゾーン内リソースのキャパシティを予め確保しておくことができます。
しかし、インスタンスを停止している間も課金が継続されてしまうため、日中帯のみ稼働するようなインスタンスには向かないのが実情です。
リソースの予約については弊社ブログにも解説がありますので、こちらもご一読いただければと思います。

クラウドでは、ゾーン障害の対策として複数ゾーンを用いた冗長構成が推奨されますが、こういったキャパシティ不足の状況を想定した場合でもそれは有効であるということでしょう。

参考

VM の作成と更新のトラブルシューティング(公式ドキュメント)

佐々木 駿太 (記事一覧)

G-gen最北端、北海道在住のクラウドソリューション部エンジニア

2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2024に選出。好きなGoogle CloudプロダクトはCloud Run。

趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。