EC2 インスタンスを運用していると、さまざまな問題に遭遇することがあります。多くの場合は、一般的なトラブルシューティングとして、基本的な原因と対策を抑えておくことで解消することができます。一般的な対処法を覚えておくことで、何か問題が発生した際も落ち着いて短時間で対応できるので、ぜひ覚えておきましょう。

今回は、EC2 インスタンスを運用する際に、より遭遇する可能性の高い代表的な 4 点の問題に対して、トラブルシューティング例を説明していきます。

EC2 インスタンスのトラブルシューティング

(1) インスタンスがすぐに終了する
(2) インスタンス容量の不足
(3) インスタンス制限の超過
(4) インスタンスタイプを変更すると起動しない

■ (1) インスタンスがすぐに終了する

[事象]
インスタンスのステータスが “pending” から “terminated” に移行する場合があります。

[原因]

当該事象の原因として、下記のように “EBS” または “AMI” に関連する原因が考えられます。

EBS 関連
・EBS ボリュームの制限を超えた場合。
・EBS スナップショットが破損した場合。
・ルート EBS ボリュームが暗号化されていることで、復号用の KMS key にアクセスする権限が足りない場合。

AMI 関連
・AMI のブロックデバイスマッピングで指定されたスナップショットが暗号化されていていることで、復号するための KMS key へのアクセス権限がない場合。または、復元された EBS ボリュームを暗号化するための KMS key へのアクセス権限が足りない場合。
・EC2 インスタンスを起動するために使用した Instance Store-Backed AMI にて必要な部分 (image.part.xx ファイル)が存在しない場合。

[対策]

まずは EC2 インスタンスのステータスが “pending” から “terminated” に移行した理由を確認します。
確認方法は、”Amazon EC2 コンソール” , “AWS CLI (コマンドラインインターフェイス)” , “AWS CloudTrail” の 3 パターンがあります。

Amazon EC2 コンソール

  1. Amazon EC2 コンソールを開きます。
    • https://console.aws.amazon.com/ec2/
  2. ナビゲーションペインで [インスタンス] を選択し、当該事象が発生した EC2 インスタンスを選択します。

3. タブ [State transition reason (状態遷移の理由)] の横にある理由を確認します。

AWS CLI (コマンドラインインターフェイス)

  1. AWS CLI コマンド “describe-instances” を使用し、インスタンス ID を指定します。

2 下記のコマンドによって返された JSON レスポンスで、StateReason レスポンス要素の値を確認します。
aws ec2 describe-instances –instance-id instance_id
次のコードブロックの StateReason レスポンス要素を確認します。
“StateReason”: {
“Message”: “Client.VolumeLimitExceeded: Volume limit exceeded”,
“Code”: “Server.InternalError”}

AWS CloudTrail

AWS CloudTrail コンソールで過去 90 日間の、イベント履歴にて確認できます。

各種、当該事象における理由に基づき、対応していきましょう。

■ (2) インスタンス容量の不足

[事象]
新規で EC2 インスタンスを起動、または停止した EC2 インスタンスを再起動しようとすると “InstanceLimitExceeded” エラーが発生する。

[原因]
この場合、AWS リージョンで起動できるインスタンス数の制限に達していることが考えられます。AWS アカウントを作成する際には、リージョンごとに、起動できる EC2 インスタンスの数に制限があり、その制限によって “InstanceLimitExceeded” エラーが発生します。

[対策]
インスタンス制限の引き上げは、リージョンごとにリクエストが可能です。下記の手順にて「Amazon EC2 のサービスクォータ」で引き上げのリクエストを申請してください。
まずは、原因のトリガーとなる制限について確認を行います。

現在の制限を確認する

  1. Amazon EC2 コンソールを開きます。
    • https://console.aws.amazon.com/ec2/
  2. ナビゲーションバーから、リージョンを選択します。
  3. ナビゲーションペインで、[Limits] を選択します。
  4. リストでリソースを確認します。検索フィールドを使用して、”リソース名” または “リソースグループ” でリストをフィルタリングできます。[Current Limit (現在の制限)] 列に、アカウントにおけるリソースの現時点での最大値が確認できます。

現在の制限を確認後、必要なリソースに対して、上限引き上げのリクエストを申請します。

Amazon EC2 コンソールを使用して増加をリクエスト

  1. Amazon EC2 コンソールを開きます。
    • https://console.aws.amazon.com/ec2/
  2. ナビゲーションバーから、リージョンを選択します。
  3. ナビゲーションペインで、[Limits] を選択します。
  4. リストでリソースを選択し、リクエスト制限の引き上げを選択します。
  5. 制限の引き上げのフォームにある必須フィールドを入力し、[送信] を選択します。指定した連絡方法を使用して、お客様に応答が返されます。

■ (3) インスタンス容量の不足

[事象]
具体的なアベイラビリティーゾーンを指定し、新しい EC2 インスタンスを起動するか、停止した EC2 インスタンスを再起動しようとすると “InsufficientInstanceCapacity” エラーが発生する。

[原因]
EC2 インスタンスを起動したり、停止した EC2 インスタンスを再起動したりする際にこのエラーが発生する場合、そのアクションを実行したタイミングにて AWS にはリクエストに対応するために必要とされる十分なオンデマンドキャパシティーがない場合に発生します。

[対策]
この問題を解決するには、以下の手順を実行します。

“InsufficientInstanceCapacity” エラーの対処方法

  1. 数分間待ってからリクエストを再度送信します。リトライ状況によって、容量は頻繁に変化します。
  2. インスタンス数を減らして新しいリクエストを送信します。たとえば、20 インスタンスを起動する 1 つのリクエストを行っている場合、代わりに 5 つのインスタンスに対する 4 つのリクエストを作成するか、1 つのインスタンスに対する 20 のリクエストを作成することを検討ください。
  3. インスタンスを起動する場合は、アベイラビリティーゾーンを指定しないで新しいリクエストを送信します。
  4. インスタンスを起動する場合は、別のインスタンスタイプを使用して新しいリクエストを送信します (後でインスタンスタイプを変更できます)。
  5. クラスタープレイスメントグループでインスタンスを起動すると、容量不足エラーが発生する場合があります。

トラフィックなどの高負荷に対して、EC2 インスタンスのスケールアウトで負荷分散をお考えの場合は、可能な限りあらかじめサーバー台数を確保することで、未然に “InsufficientInstanceCapacity” エラーを回避することが期待できます。または、新しく起動したいインスタンスタイプが決まっている場合は、事前にリザーブドインスタンスで予約しておくことで、当該エラーを回避することも可能です。

■ (4) インスタンスタイプを変更すると起動しない

[事象]

EC2 インスタンスにおける “インスタンスタイプ” を変更すると、状況によっては、EC2 インスタンスが起動しない問題が発生します。

[原因]

原因の多くは、下記の 3 点が考えられます。

1) アーキテクチャーが適切ではない
2) 拡張ネットワーク (ENA) が適切ではない
3) NVMe ドライバーが適切ではない

1 件ずつ確認していきましょう。

1) アーキテクチャーが適切ではない

・変更前と違うアーキテクチャのインスタンスタイプを選択した場合。たとえば x86_64 (AMD64) のアーキテクチャと ARM64 アーキテクチャベースのプロセッサであるインスタンスタイプ (C6g および MG6g など)は、それぞれ異なる命令セットを使用するため、双方にとって互換性がありません。

・32 ビット AMI として互換性が合わない場合。32 ビット AMI をサポートするのは、t2.nano、t2.micro、t2.small、t2.medium、c3.large、t1.micro、m1.small、m1.medium、および c1.medium のみとなります。

2) 拡張ネットワーク (ENA) が適切ではない

・ENA の要件である、現行世代のインスタンスタイプ (m4.16xlarge よりも小さい C4、D2、M4 の各インスタンスや、T2 は除く)を使用していない。
・ENA の enaSupport 属性がインスタンスに対して無効になっている。

・ENA モジュールがインスタンスにインストールされていない。

3) NVMe ドライバーが適切ではない

・NVMe モジュールがインスタンスにインストールされていない

・NVMe モジュールがインスタンスにインストールされていても、NVMe モジュールがインスタンスの initramfs イメージにロードされていない。

[対策]

1) インスタンスタイプ変更前のアーキテクチャを事前にご確認いただき、インスタンスタイプ変更の際は、同じアーキテクチャのインスタンスタイプをご利用ください。
2) 拡張ネットワーキングを使用するには、必要な ENA モジュールをインストールし、ENA のサポートを有効にする必要があります。
3) NVMe をサポートしないインスタンスタイプから NVMe をサポートするインスタンスタイプにインスタンスをサイズ変更する場合、まずインスタンスに NVMe ドライバーをインストールする必要があります。

■ まとめ

いかがでしたでしょうか。
日々の EC2 インスタンスの運用で、トラブルが発生しても、これら一般的なトラブルシューティング例を覚えておくと、いざというときに非常に便利です。ぜひとも、覚えておいて 日々の EC2 インスタンスの運用に活かしましょう。

SunnyCloudでは、AWSの様々なソリューションをご提供しています。AWSリセール(請求代行)サービスを活用いただくと、AWSを5%お安く利用できます。

▼「無料相談」受付中です。
https://www.sunnycloud.jp/contact-us/