ユーザーデータの呼び出しをログに記録し、Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスのコンソールログに送信したいです。
簡単な説明
EC2 インスタンスにおける問題をトラブルシューティングするには、ユーザーデータの bash スクリプトを、すべての出力をコンソールにリダイレクトするよう変更します。出力を /var/log/user-data.log と /dev/console の 2 箇所にリダイレクトします。スクリプトを実行すると、ユーザーデータの呼び出しログをコンソールで直接確認できます。
注: この解決策は、Amazon Linux 1、Amazon Linux 2、Amazon Linux 2023 にのみ適用されます。RHEL 7 または RHEL 8 を実行するインスタンスについては、「RHEL 7 または RHEL 8 を実行している EC2 インスタンスのコンソールログにユーザーデータ出力を送信する方法を教えてください」を参照してください。
解決策
次の手順を実行します。
-
インスタンスを停止します。
-
[アクション]、[インスタンス設定] を選択してから、[ユーザーデータの編集] を選択します。
-
次のスクリプトを追加してから、[保存] を選択します。
Content-Type: multipart/mixed; boundary="//
"MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
cat /etc/os-release | grep PRETTY_NAME
echo "Hello from user-data!"
--//--
注: ユーザーデータ出力をリダイレクトするスクリプトの最初の行は、#!/bin/bash -xe です。上記のスクリプトは、インスタンスが起動するたびにシェルスクリプトを実行する cloud-init 設定データです。詳細については、「Amazon EC2 Linux インスタンスが再起動するたびに、ユーザーデータを使用してスクリプトを自動的に実行する方法を教えてください。」を参照してください。 上記のコマンドでは、次の行がユーザーデータ出力をリダイレクトします。
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
Amazon Linux 2023 インスタンスからのコンソール出力例を次に示します。
<13>Aug 13 18:43:39 user-data: + cat /etc/os-release
<13>Aug 13 18:43:39 user-data: + grep PRETTY_NAME
<13>Aug 13 18:43:39 user-data: PRETTY_NAME="Amazon Linux 2023.5.20240805"
<13>Aug 13 18:43:39 user-data: + echo 'Hello from user-data!'
<13>Aug 13 18:43:39 user-data: Hello from user-data!
注: 出力されたシステム (コンソール) ログ出力は、継続的には更新されません。Nitro システム上に構築されたインスタンスが、最新のシリアルコンソール出力の取得をサポートします。詳細については、「インスタンスコンソール出力」を参照してください。
関連情報
EC2 インスタンスの起動時に、ユーザーデータ入力を使用してコマンドを実行する