ユーザーデータの呼び出しをログに記録し、Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスのコンソールログに転送したいと考えています。
簡単な説明
SSH 経由でインスタンスにアクセスすることなく EC2 インスタンスのブートストラップの問題をトラブルシューティングするには、/var/log/user-data.log と /dev/consoleの両方にすべての出力をリダイレクトするコードをユーザーデータ bash スクリプトに追加します。コードが実行されると、コンソールでユーザーデータ呼び出しログを確認できます。
注: この解決策は、Amazon Linux 1、Amazon Linux 2、および Amazon Linux 2023 の場合にのみ適用されます。RHEL 7 または RHEL 8 を実行しているインスタンスの詳細については、「RHEL 7 または RHEL 8 を実行している EC2 インスタンスのコンソールログにユーザーデータ出力を送信する方法を教えてください。」を参照してください。
解決策
以下のコマンドを入力して、ユーザーデータ出力コンソールをリダイレクトします。
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
yum -y update
echo "Hello from user-data!"
ユーザーデータ出力をリダイレクトする行は次の通りです。
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
デフォルトでは、ユーザーデータスクリプトと cloud-init ディレクティブは、インスタンスが起動される最初の起動時にのみ実行されます。詳細については、「Amazon EC2 Linux インスタンス再起動のたびに、ユーザーデータを利用してスクリプトを自動的に実行する方法を教えてください。」を参照してください。
コンソール出力の例を以下に示します。
<13>Nov 13 13:49:59 user-data: amazon-ssm-agent.x86_64 0:2.3.228.0-1.amzn2
<13>Nov 13 13:49:59 user-data: irqbalance.x86_64 2:1.5.0-2.amzn2.0.1
<13>Nov 13 13:49:59 user-data: kernel-tools.x86_64 0:4.14.77-80.57.amzn2
<13>Nov 13 13:49:59 user-data: kmod.x86_64 0:25-3.amzn2.0.2
<13>Nov 13 13:49:59 user-data: kmod-libs.x86_64 0:25-3.amzn2.0.2
<13>Nov 13 13:49:59 user-data: lz4.x86_64 0:1.7.5-2.amzn2.0.1
<13>Nov 13 13:49:59 user-data: nss.x86_64 0:3.36.0-7.amzn2
<13>Nov 13 13:49:59 user-data: nss-sysinit.x86_64 0:3.36.0-7.amzn2
<13>Nov 13 13:49:59 user-data: nss-tools.x86_64 0:3.36.0-7.amzn2
<13>Nov 13 13:49:59 user-data: openssl.x86_64 1:1.0.2k-16.amzn2.0.1
<13>Nov 13 13:49:59 user-data: openssl-libs.x86_64 1:1.0.2k-16.amzn2.0.1
<13>Nov 13 13:49:59 user-data:
<13>Nov 13 13:49:59 user-data: Complete!
<13>Nov 13 13:49:59 user-data: + echo 'Hello from user-data!
注: リダイレクトされたシステム (コンソール) ログ出力は、継続的には更新されません。Nitro システム上に構築されたインスタンスが、最新のシリアルコンソール出力の取得をサポートします。詳細については、「インスタンスコンソール出力」を参照してください。
関連情報
起動時に Linux インスタンスでコマンドを実行する