EC2 起動時の Insufficient Instance Capacity エラーをオンデマンドキャパシティ予約で回避する

2022.08.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

概要

Insufficient Instance Capacity エラーが発生してインスタンスが起動しない!
対処方法としてオンデマンドキャパシティ予約を案内されたので詳細を知りたい!

そんな場面に遭遇した方へ、オンデマンドキャパシティ予約の概要や設定する際のポイントをお送りします。

キャパシティ予約の設定手順は、以下ブログで記載しました。

キャパシティ予約の設定時の挙動確認は、以下ブログで記載しました。

Insufficient Instance Capacity / Insufficient capacity エラーの詳細

このエラーは、EC2 インスタンスを起動した際に、利用しているインスタンスタイプのリソースが AWS 基盤でキャパシティー不足になっている場合に起こるエラーです。

エラー内容例: RunInstances オペレーションの呼び出し中に、エラー (InsufficientInstanceCapacity) が発生しました。現在、リクエストしたアベイラビリティーゾーンに十分な容量がありません。

このエラーは、以下の様な時に稀に起こることがあります。

  • 新しいインスタンスを起動した時
  • インスタンスを停止後に起動した時

インスタンス起動時に、AWS 基盤の新しいホストから起動する場合に起こる可能性があります。
※停止時にインスタンスは AWS 基盤側の新しいホストコンピュータに移動される場合があります。 詳細は下記 AWS ドキュメント参照。

インスタンスの停止と起動 (Amazon EBS-Backed インスタンスのみ) インスタンスのステータスチェックに失敗するか、インスタンスでアプリケーションが想定通りに動作しておらず、インスタンスのルートボリュームが Amazon EBS である場合、インスタンスの停止と起動を行い、問題が解決するか試してみることができます。

~略~

インスタンスを起動して pending 状態になると、インスタンスは新しいホストコンピュータに移動されます (ただし、場合によっては、インスタンスが現在のホストに残ることもあります)。

インスタンスのライフサイクル - Amazon Elastic Compute Cloud

Insufficient Instance Capacity エラーの回避方法

インスタンスを起動する際にこのエラーが発生した場合、下記のいずれかの方法で一時的にエラーを回避できます。

  • 数分間待ってから、インスタンスの開始を実行する。
  • アベイラビリティゾーンを変更して、インスタンスの開始を実行する。
  • インスタンスタイプを変更して、インスタンスの開始を実行する。
  • 一度に起動するインスタンス数を減らして、インスタンスの開始を実行する。

事前にこのエラーを回避する必要がある場合は、下記のいずれかの対応でエラーを回避できます。

  • リザーブドインスタンスのゾーン RI を購入する。
  • オンデマンドキャパシティ予約を設定する。

リザーブドインスタンスを購入した場合は、事前のキャパシティ確保とインスタンス料金の割引が適応され、
本番環境等の常時稼働をするインスタンスではメリットが大きくなります。

特定の時間帯や、小規模で導入したい場合などはオンデマンドキャパシティ予約を利用することができます。

インスタンスの起動に関する問題のトラブルシューティング - インスタンス制限の超過

EC2 インスタンスを開始または起動する際に発生する、InsufficientInstanceCapacity エラーのトラブルシューティング方法を教えてください。

インスタンスのオンデマンドキャパシティ予約

オンデマンドキャパシティ予約を設定すれば、特定 AZ のインスタンスタイプのキャパシティを予約できます。
キャパシティ予約の設定を事前に行っておくことで、対象のインスタンスは起動時にキャパシティー不足 (Insufficient Instance Capacity エラー) を回避することができます。

さっそくキャパシティ予約の詳細を見ていきましょう。

EC2 > キャパシティーの予約 > キャパシティ予約を作成

色々と設定できる項目がありますね。

キャパシティ予約は様々な条件を指定してインスタンスに関連付けることができます。
作成する際のポイントは 2 つあります。

1. キャパシティ予約を割り当てるリソースを指定する。

キャパシティ予約を割り当てたい対象のインスタンスと同じ値で、下記の設定値を指定する必要があります。

  • キャパシティーを予約するアベイラビリティーゾーン
  • キャパシティーを予約するインスタンスの数
  • インスタンスタイプ、テナンシー、プラットフォーム/OS を含む、インスタンスの属性

2. キャパシティ予約の紐づけ方を指定する。

利用用途に合わせて、下記予約の詳細を事前に決定しておく必要があります。

  • 予約の終了
    デフォルトではキャンセルしない限り常時キャパシティ予約されている状態になっています。
    予約を利用しない時間帯を設定したい場合、特定の時間予約を自動的に解除する設定を行うことができます。

  • インスタンスの適格性
    キャパシティーの予約を対象インスタンスにどの様に割り当てるか指定できます。
    割り当てる方法は、以下の2種類が選択できます。

    • オープン : 一致する詳細を持つ任意のインスタンス
      条件の合致するインスタンスが存在すれば、キャパシティーが自動で割り当てられます。
      インスタンスを停止した際は一度関連付けが解除されます。
      その後起動する際に、「条件が一致する利用可能なキャパシティー予約」があれば、再度キャパシティーが自動で割り当てられた状態で起動します。

    • 対象 : この予約を指定するインスタンスのみ
      キャパシティー予約が必ず対象インスタンスへ紐付けられるよう、対象インスタンスに個別で関連付け設定を行います。
      この設定はインスタンスの停止を伴います。
      キャパシティー予約を関連付けた後は、インスタンスを停止しても紐づけが解除されません。
      設定後はキャパシティーが割り当てられた状態で起動します。


特にインスタンスの適格性の部分は考慮点が多々あります。
以下の様な時は「targeted (指定済み)」を選ぶことを推奨します。

  • 対象のインスタンスは、キャパシティーの予約を関連付けた状態で、インスタンスを起動し続ける要件がある。
  • 他のインスタンスがキャパシティーの予約を利用し、対象のインスタンスが起動する際にキャパシティ予約の「利用可能な数量」が0になる恐れがある。(下記画像の設定値)

最後に

EC2 トラブルシューティングの概要や対策を知るために、Insufficient Capacity エラーを改めて調べました。
このブログがどなたかのお役にたてば幸いです。

参考資料

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、さまざまな背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。