Amazon Elastic Compute Cloud (EC2) Linux インスタンスが自動的に終了する理由をトラブルシューティングしたいと考えています。
解決策
Amazon EC2 Linux インスタンスは、暗号化された Amazon ブロックストア (Amazon EBS) ボリュームのため、または監査デーモン設定のディスク容量が少ないために終了します。
暗号化された EBS ボリュームが原因でインスタンスが終了する
ボリュームが暗号化されているかどうかを確認するには、Amazon EC2 コンソールを開き、[ボリューム] を選択します。AWS Key Management Service (AWS KMS) キーで暗号化されたボリュームには、暗号化列に「暗号化済み」というラベルが表示されます。
システムログを確認して、インスタンスがオペレーティングシステム (OS) の起動を開始したかどうかを確認します。インスタンスが OS を起動せず、ボリュームが暗号化されている場合、AWS Identity and Access Management (IAM) ロールには AWS KMS キーアクセス権限がありません。
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、使用している AWS CLI が最新バージョンであることを確認してください。
IAM アクセス許可を確認するには、次の手順を実行します。
-
StateReason のエラーメッセージとエラーコードを確認するには、以下のように describe-instances コマンドを実行します。
$ aws ec2 describe-instances --instance-id i-example-id --region example-region --query "Reservations[].Instances[].{StateReason:StateReason}" --output json
**注:**i-example-ID を実際のインスタンス ID に置き換えてください。example-region は、お使いの AWS リージョンに置き換えてください。
暗号化されたボリュームがインスタンスにアタッチされていて、アクセス許可またはポリシーに問題がある場合、クライアントエラーが表示されます。次のメッセージのような出力が表示されます。
[
[
{
"StateReason": {
"Code": "Client.InternalError",
"Message": "Client.InternalError: Client error on launch"
}
}
]
]
-
IAM ロールに正しい IAM アクセス許可があることを確認します。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"kms:CreateGrant",
"kms:Decrypt",
"kms:DescribeKey",
"kms:GenerateDataKeyWithoutPlainText",
"kms:ReEncrypt"
],
"Resource": [
"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
"arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"
]
}
}
Amazon EC2 Auto Scaling などの別のサービスを介してインスタンスを間接的に起動した場合は、正しいアクセス許可を使用してキーポリシーを設定します。
ディスクがいっぱいになったため、監査デーモン設定によりインスタンスが終了する
インスタンスが起動を開始したら、インスタンスのスクリーンショットまたはシステムログのブートログにアクセスします。次のメッセージのような出力が表示されます。
Aug 19 04:11:02 ip-10-0-202-230 auditd[4300]: Audit daemon is low on disk space for logging
Aug 19 04:11:02 ip-10-0-202-230 auditd[4300]: The audit daemon is now halting the system
Aug 19 04:11:02 ip-10-0-202-230 systemd: Stopping Session 29 of user splunk.
Aug 19 04:11:02 ip-10-0-202-230 systemd: Stopped target Timers.
ディスクがいっぱいのエラーを解決するには、次の手順を実行します。
-
Amazon EC2 コンソールを開きます。
-
ナビゲーションペインで [インスタンス] を選択し、インスタンスを選択します。
-
インスタンスを停止し、EBS ルートボリューム (Linux の場合は /dev/xvda) をインスタンスからデタッチします。
-
アベイラビリティーゾーンにある Linux インスタンスを使用します。または、新しいインスタンスを起動してレスキューインスタンスとして使用します。
-
EBS ルートボリュームを /dev/xvdf などのセカンダリデバイスとしてレスキューインスタンスにアタッチします。
-
SSH を使用してレスキューインスタンスに接続します。
-
レスキューインスタンスにアタッチした、新しいボリュームのマウントポイントディレクトリを作成します。次の sudo コマンドは Linux 環境にのみ適用されます。
sudo mkdir /mnt/rescue
sudo mount /dev/xvdf /mnt/rescue
注:****/dev/xvdf をセカンダリデバイス名に、/mnt/rescue をマウントポイントディレクトリの名前に置き換えます。
-
ルートボリュームサイズを増やし、パーティションを拡張します。
-
umount コマンドを実行して、ボリュームをアンマウントします。
sudo umount /mnt/rescue
-
レスキューインスタンスからボリュームをデタッチし、デバイス名の付いた元のインスタンス (Linux の場合は /dev/xvda など) にボリュームをアタッチします。次に、インスタンスを起動して、正常に起動することを確認します。
-
監査サービスの設定を見直して、スペースが不足した場合にマシンを停止するオプションがないことを確認します。Amazon Linux、Amazon Linux 2 および Amazon Linux 2023 では、/etc/audit/auditd.conf の監査サービスの設定に以下のオプションが含まれていることを確認してください。
max_log_file_action = ROTATE
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
関連情報
Amazon EC2 インスタンスの起動に関する問題のトラブルシューティング
EC2 インスタンスを起動または作成できないのはなぜですか?