GCP

Google Compute Engineで「does not have enough resources available」が出てインスタンスを起動できない時の対処方法

はじめに

Google Compute Platform (以降、GCP)でCompute Engine(以降、GCE)上に構築して使用していたインスタンスを起動したところ、起動できずに以下のような内容のメッセージが表示されました。
「The zone ‘project/…’does not have enough resources available to fullfill the request.
Try a different zone, or try again later.」

この対処方法についてまとめます。なお、結果としてこのエラーそのものを解決はできなかったため、てっとり早く回避する方法をまとめています。

前提と環境

以下の状況で発生しました。

  • インスタンスのゾーンを「asia-notheast1-b(東京)」に設定していた。
  • インスタンスは1日停止した状態にしていた。
  • 何時間か置いて何度か起動を試みるも毎度同じメッセージが表示された。

原因と対処方法

原因

色々と調べてみると、Google Cloud Platform側の問題でリソース不足が原因のようです。すなわち、起動しているインスタンスが物理的な上限に達しているような状況のようです。
公式情報ではないため不明ですが、他の方も東京リージョンを指定している場合に発生しているようでした。
したがって、メッセージにある通りある程度時間を置いて再度起動してうまくいくのを待つか、新しくインスタンスを作成し直すしか無いようです。
私もまずは数時間置いて何度か待って起動を試みましたが、結局同じメッセージが出る繰り返しでした。そこで起動しなくなったインスタンスの中身をそのままに新しくインスタンスを作成し直しました。

対処方法

すでに稼働させていたインスタンスをまっさらな状態から作り直す必要はなく、現在使用している既存のインスタンスのスナップショットを作成し、そこからインスタンスを作成し直すことができます。
作業としては5〜10分程度で完了します。既存のインスタンスのスナップショットから新しいインスタンスを作成すれば、データはそのままです。
私はインスタンスへのSSHアクセスで使用するポート番号等も設定で変更していましたが、これらの設定も再度する必要はもちろんありません。
ここでは、既存のインスタンスのスナップショットを作成し、そのスナップショットから新しくインスタンスを作成する手順をまとめます。

以降の手順は、以下の公式ドキュメントを参考にしています。

ゾーン間のインスタンスの移動  |  Compute Engine ドキュメント  |  Google Cloud

このページでは、projects.moveInstance API を使用するか、または一連の手順に従って手動で VM インスタンスをゾーン間で移動する方法を説明します。ゾーンが使用不可または非推奨になった場合は、この方法を使用してインスタンスを別のゾーンに移動できます。

既存のインスタンスのスナップショットを作成する

GCPにログインしてCompute Engineの画面から以下のように「スナップショット」を開きます。

以下のように表示されるので「スナップショットを作成」をクリックします。

続いて「ソースディスク」で起動できなくなった既存のインスタンスを選択します。なお、ここで「リージョン」を再度「asis-notrheast1(東京)」に指定していますが、これだと同じ状況が発生する可能性もあるのでもしかしたら別のリージョンが良いかもしれません。私は同じ「asis-notrheast1(東京)」を指定して作成しました。選択したら「作成」をクリックします。

以下のようにスナップショットが作成されます。

後は以下のようにいつも通りインスタンスの作成していき、その中で「ブートディスク」の「変更」をクリックします。

以下のように、「スナップショット」のタブで作成したスナップショットを選択します。

以下のように選択したスナップショットが表示されているを確認できます。これで後はいつも通りインスタンスを作成して完了です。

作成したインスタンスにはこれまで使用していたSSHの秘密鍵とかもそのまま使用できます。データもそのままです。

まとめ

インスタンスを停止してしまうと再起動できないかもしれないリスクはかなりクリティカルになる場合もありそうなので、そのような状況になる前提で構築する必要があるかもしれません。
インスタンスを作り直すとなると最初は面倒くさそうと思いましたが、スナップショットから新しくインスタンスを作成する手間と時間は予想よりはるかに楽でした。
同じ状況に遭遇している方に少しでも参考になれば幸いです。

SPONSORED LINK

6 thoughts on “Google Compute Engineで「does not have enough resources available」が出てインスタンスを起動できない時の対処方法

  1. 同じ状態に陥っていたので、参考にさせて頂きました!
    まとめてくださり、誠にありがとうございます!

    ただ、インスタンスを作成した後にどのように操作をすれば良いかわからず困っています。
    Development anagerを見ると、インスタンスは過去のままなので、ここを新しく作ったものに変更すれば良いと思うのですが、ググったり、以下のサイトを見ても理解できませんでした。
    https://cloud.google.com/compute/docs/instances/moving-instance-across-zones?hl=ja#gcloud

    お手数をおかけしますが、ご指南いただけると幸いに存じます。
    参考記事の共有のみでも大変嬉しいのでよろしくお願いします。

    1. 温かいコメントを頂きまして誠にありがとうございます。
      すでに解決済かもしれませんが回答させて頂きます。
      スナップショットを使って別に新しくインスタンスを作成した後につきましては、Google Cloud Platformにログイン後の「Compute Engine」→「VMインスタンス」内に新規作成したインスタンスが表示されているかと思いますのでそこからインスタンスの起動や設定等が可能かと思います。なお、過去に作ったインスタンスは「VMインスタンス」ページのインスタンス一覧にそのまま表示されたままになり、そこにスナップショットから新しく作成したインスタンスが追加表示されるかと思います。
      ちょっとご質問を私が勘違いしてしまっており回答になっていないかもしれませんが、不明点や追加で欲しい情報等ありましたらお気軽にコメント頂けますと幸いです。
      よろしくお願いいたします。

      1. 早速、丁寧にご回答くださり、ありがとうございます。
        大変嬉しいです!

        >「VMインスタンス」ページのインスタンス一覧にそのまま表示されたままになり、そこにスナップショットから新しく作成したインスタンスが追加表示されるかと思います。

        こちらは確認できました!

        ただ、ワードプレスに設定しているインスタンスが古いもののままなので、サイトを表示できておりません。。

        ご好意に甘えてしまい恐縮ですが、こちらはどのように対処すればよろしいでしょうか。

        お手数をおかけしますが、ご確認いただければ幸いに存じます。

        1. お返事ありがとうございます。また、スクリーンショットのご共有もありがとうございます。
          大変わかりやすく問題理解いたしました。
          私の記事に問題がありました。クリックデプロイによってWordPress環境を構築したインスタンスのスナップショットを作成し、
          そのスナップショットから新しくインスタンスを作成した場合、WordPressの設定内容については古いインスタンスの情報が保持されたままのようです。
          そのため、新しく作成したインスタンス内のWordPressのサイトURLが古いインスタンスのIPアドレスのままになっております。
          したがって、このIPアドレスを新しく作成したインスタンスのIPアドレスに書き換える必要がございます。
          これを実現する一番簡単な方法は、phpmyadminを使っての書き換えかと思います。
          例えば、新しく作成したインスタンスのIPアドレスを 「34.80.10.1」 とした場合、以下の手順で書き換えできるかと思います。

          1. ブラウザから「http://34.80.10.1/phpmyadmin」にアクセスします。
          2. 古いインスタンス作成時に設定したphpmyadmin のアカウント情報(Deployment managerにて確認できます。画像1参考。)
          で phpmyadminにログインします。
          3. データベース「wordpress」内のテーブル「wp-options」内の「siteurl」、「home」のIPアドレスを両方とも「http://34.80.10.1」に書き換え
           (画像2参考)

          上記手順にて、新しいインスタンスのWordPressにアクセス可能かと思います。
          もしクリックデプロイの際にphpmyadminをインストールしていない場合は、インスタンスにSSHなどでログインし、さらにMySQLにログインしてそこから上記の変更をする必要がありそうです。
          もしかすると他の箇所でもIPアドレスの書き換え必要かもしれませんが、こちらでひとまずアクセスできれば嬉しいです。
          よろしくお願い致します。

          1. 大変丁寧に解説してくださいまして誠にありがとうございます。

            ここまでしていただいて恐縮なのですが、以下二つの操作をしたのですが「このサイトにアクセスできません」という表示が出てしまいました。
            1. ブラウザから「http://34.80.10.1/phpmyadmin」にアクセスします。
            2. 古いインスタンス作成時に設定したphpmyadmin のアカウント情報(Deployment managerにて確認できます。画像1参考。)
            で phpmyadminにログインします。

            古いインスタンスに関しては起動していないのでやはり厳しいかと思うのですが、新しいインスタンスは起動中ということで原因がよくわかりませんでした。。

            慣れていないですが、後ほどsshからmysqlへの接続を試してみたいと思います!

          2. すみません、逆にわかりにくかったかと思いますが、「34.80.10.1」というIPアドレスの値はユウタ様のほうで新しく作成したインスタンスのIPアドレスの値と置き換えて頂く必要がございます。ここでは例として「34.80.10.1」という値を使用しました。
            新しく作成したインスタンスのIPアドレスは、GCPの「VMインスタンス」のページ内でインスタンス一覧が表示されている中に、「外部IP」という項目がありその値になります。ただ、「外部IP」 はインスタンスを起動していないと「なし」となっているかもしれません。その場合は起動すると割当られます。
            ただし、「なし」となっている場合は、そのインスタンスの外部IPが「エフェメラル」という短期的な値のため、停止、起動する度に別のものに変わってしまう可能性があります。もしこれを固定したい場合は、インスタンスに静的IPアドレスを割り当てする必要がございます。(ただしこの場合は料金かかる場合があります。)

            参考:https://cloud.google.com/compute/docs/ip-addresses?hl=ja

            このようなエラーはストレス多いかと思いますが、なんとかうまくいくことを祈っております。
            私にとっても勉強となりますので、また何かございましたらご遠慮無くご連絡頂けますと幸いです。
            よろしくお願い致します。

コメントを残す

メールアドレスが公開されることはありません。