Amazon EC2 インスタンスを起動しようとすると、そのインスタンスが停止または終了する問題をトラブルシューティングするにはどうすればよいですか?
Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動しようとすると、そのインスタンスが終了するか、または起動しません。
簡単な説明
Amazon EC2 インスタンスの InternalError メッセージの最も一般的な原因は次のとおりです。
- Amazon Elastic Block Store (Amazon EBS) ボリュームがインスタンスに正しくアタッチされていない。
- インスタンスにアタッチされた EBS ボリュームがエラー状態である。
- 暗号化された EBS ボリュームがインスタンスにアタッチされている。
インスタンスが起動せず、エラーコードが表示されない場合は、AWS コマンドラインインターフェイス (AWS CLI) で describe-instances コマンドを実行します。その後、インスタンス ID を指定します。コマンドが JSON レスポンスで返す StateReason メッセージを確認します。
注: AWS CLI ですべてのコマンドを入力してください。AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
解決方法
EBS ボリュームがインスタンスに正しくアタッチされていない
API でいずれが定義されているかに応じて、EBS ルートボリュームを /dev/sda1 または /dev/xvda としてインスタンスにアタッチする必要があります。デバイス名が重複または競合する 2 つ目の EBS ボリュームを持つことはできません。このルールを逸脱すると、インスタンスを停止または起動できません。ブロックデバイス名の競合は、Xen ベースのインスタンスタイプ (c4、m4、t2 など) にのみ影響します。ブロックデバイス名の競合は、Nitro ベースのインスタンス (c5、m5、t3 など) には影響しません。
1. describe-instances API を実行して、StateReason エラーメッセージとエラーコードを検証します。
$ aws ec2 describe-instances --instance-id i-xxxxxxxxxxxxxxx --region us-east-1 --query "Reservations[].Instances[].{StateReason:StateReason}" --output json
注: us-east-1 を、お客様の AWS リージョンに置き換えます。i-xxxxxxxxxxxxxxx を、お客様のインスタンス ID に置き換えてください。
デバイス名が重複している場合は、次のメッセージのような出力が表示されます。
[ [{ "StateReason": { "Code": "Server.InternalError", "Message": "Server.InternalError: Internal error on launch" } }] ]
2. Amazon EC2 コンソールを開き、開始できないインスタンスを選択します。
3. [Description] (説明) タブで、[Block] (ブロック) デバイスに一覧表示されているデバイス名を確認します。[Block] (ブロック) デバイスフィールドには、アタッチされたボリュームのデバイス名がすべて表示されます。
4. ルートデバイスが正しく添付されており、同じ名前または競合する名前のデバイスが表示されていないことを確認します。
5. デバイス名が重複または競合するデバイスがある場合は、競合するボリュームをデタッチして名前を変更します。その後、更新されたデバイス名でボリュームを再アタッチします。
添付された EBS ボリュームがエラー 状態である
1. describe-instances API を実行して、StateReason エラーメッセージとエラーコードを検証します。
$ aws ec2 describe-instances --instance-id i-xxxxxxxxxxxxxxx --region us-east-1 --query "Reservations[].Instances[].{StateReason:StateReason}" --output json
注: us-east-1 を、お客様の AWS リージョンに置き換えます。i-xxxxxxxxxxxxxxx を、お客様のインスタンス ID に置き換えてください。
エラー状態の EBS ボリュームがアタッチされている場合、次のメッセージのような出力が表示されます。
[ [{ "StateReason": { "Code": "Server.InternalError", "Message": "Server.InternalError: Internal error on launch" } }] ]
2. Amazon EC2 コンソールを開き、[Volumes] (ボリューム) を選択して、ボリュームのステータスが [error] (エラー) であることを確認します。オプションは、エラー状態のボリュームがルートボリュームであるかセカンダリボリュームであるかによって異なります。
エラー状態のボリュームがセカンダリボリュームの場合は、ボリュームをデタッチします。これで、インスタンスを起動できます。
エラー状態のボリュームがルートボリュームで、ボリュームのスナップショットがある場合は、次のステップを実行します。
元のインスタンスのデバイス名を使用して、新しいボリュームをインスタンスに添付します。インスタンスを起動します。
注: エラー状態のルートボリュームの既存のスナップショットがない場合、インスタンスを再起動することはできません。新しいインスタンスを起動し、関連するアプリケーションをインストールしてから、古いインスタンスを置き換えるように設定する必要があります。
アタッチされたボリュームが暗号化されており、AWS Identity and Access Management (IAM) の許可またはポリシーが正しくない
1. describe-instances API を実行して、StateReason エラーメッセージとエラーコードを検証します。
$ aws ec2 describe-instances --instance-id i-xxxxxxxxxxxxxxx --region us-east-1 --query "Reservations[].Instances[].{StateReason:StateReason}" --output json
注: us-east-1 を、お客様の AWS リージョンに置き換えます。i-xxxxxxxxxxxxxxx を、お客様のインスタンス ID に置き換えてください。
暗号化されたボリュームがインスタンスにアタッチされていて、許可やポリシーの問題がある場合は、クライアントエラーが表示されます。次のメッセージのような出力が表示されます。
[ [{ "StateReason": { "Code": "Client.InternalError", "Message": "Client.InternalError: Client error on launch" } }] ]
2. インスタンスを起動しようとしているユーザーが正しい IAM 許可を持っていることを確認します。EC2 Auto Scaling などの別のサービスを通じてインスタンスを間接的に起動した場合は、次の設定も確認してください。
注: ボリュームが暗号化されているかどうかを確認するには、Amazon EC2 コンソールを開き、[ボリューム] を選択します。暗号化されたボリュームは、暗号化済みと暗号化列に表示されます。
関連情報
暗号化されたボリュームがアタッチされた状態でインスタンスをスタートすると、インスタンスはすぐに「起動時のクライアントエラー」というエラーで停止します
関連するコンテンツ
- 質問済み 3年前lg...
- 質問済み 5年前lg...
- 質問済み 3ヶ月前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 3年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 3年前
- AWS公式更新しました 2年前
- AWS公式更新しました 2ヶ月前