CloudFormation の EC2 インスタンスにメタデータを含めることに関する問題のトラブルシューティング方法を教えてください。

最終更新日: 2022 年 4 月 12 日

AWS:: CloudFormation:: Init を使用して Amazon Elastic Cloud Compute (Amazon EC2) インスタンスにメタデータを含めましたが、インスタンスに変更が表示されません。

簡単な説明

AWS CloudFormation スタックの EC2 インスタンスメタデータに関する問題は、以下の理由により発生する可能性があります。

  • cfn-init ヘルパースクリプトが CloudFormation スタックの 1 つ以上のインスタンスにインストールされていません。この問題を解決するには、cfn-init ヘルパースクリプトがインストールされていることを確認する セクションの手順を実行します。
  • インスタンスがインターネットに接続されていない。この問題を解決するには、インスタンスがインターネットに接続されていることを確認する セクションの手順を実行します。
  • CloudFormation テンプレートに構文エラーまたは不正な値が含まれています。この問題を解決するには、cloud-init または cfn-init ログでエラーを検索する セクションの手順を実行します。

重要:以下の解決を完了する前に、CloudFormation スタックの 障害時のロールバック オプションを いいえ に設定します。

注:以下の解決策は、Linux インスタンスで作成された CloudFormation スタックに固有のものです。

解決方法

cfn-init ヘルパースクリプトがインストールされていることを確認します。

CloudFormation リソースにシグナルを送信するように設定されたインスタンスに cfn-init がインストールされていることを確認するには、以下を実行します。

1.    SSH を使ってインスタンスに接続します

2.    次のコマンドのいずれかを実行して、cfn-init または aws-cfn-bootstrap パッケージがディレクトリにインストールされていることを確認します。

cfn-init:

$ sudo find / -name cfn-init
/opt/aws/bin/cfn-init
/opt/aws/apitools/cfn-init
/opt/aws/apitools/cfn-init-1.4-34.24.amzn1/bin/cfn-init
/var/lib/cfn-init

- または -

aws-cfn-bootstrapパッケージ:

$ sudo rpm -q aws-cfn-bootstrap
aws-cfn-bootstrap-1.4-34.24.amzn1.noarch

重要: 前述のコマンドは、RPM Package Manager を使用するディストリビューションでのみ機能します。

注意: デフォルトでは、CloudFormation ヘルパースクリプトは Amazon Linux Amazon Machine Image (AMI) にインストールされます。CloudFormation ヘルパースクリプトがインストールされていない場合、それらをインストールする方法については、CloudFormation ヘルパースクリプトリファレンス を参照してください。

インスタンスがインターネットに接続されていることを確認する

インスタンスが Amazon 仮想プライベートクラウド (Amazon VPC) にある場合、次の方法でインターネットに接続できます。

  • プライベートサブネット内の NAT デバイス
  • パブリックサブネット内のインターネットゲートウェイ

インスタンスのインターネット接続をテストするには、AWS などのパブリックウェブページにアクセスし、インスタンスで curl コマンドを実行します。例:

curl -I https://aws.amazon.com

注:インスタンスがインターネットに接続されている場合、このコマンドは HTTP 200 ステータスコードを返します。

インターフェイス VPC エンドポイントを使用している場合、エンドポイントはインスタンスと同じ AWS リージョンに配置されている必要があります。また、インターフェイスエンドポイントにアタッチされたセキュリティグループは、Amazon VPC のプライベートサブネットからのポート 443 での着信接続を許可する必要があります。

cloud-init または cfn-init ログでエラーを検索する

cloud-init ログまたは cfn-init ログでエラーを検索するには、次の手順を実行します。

1.    SSH を使用してインスタンスに接続します

2.    次のログでキーワード「error」または「failure」を検索して、詳細なエラーまたは失敗メッセージを探します。

  • /var/log/cloud-init-output.log
  • /var/log/cloud-init.log
  • /var/log/cfn-init.log
  • /var/log/cfn-init-cmd.log

/var/log/cfn または /var/log/cfn ファイル内の「error」または「failure」という単語のすべてのインスタンスを解析するには、次のコマンドを実行します。

grep -ni 'error\|failure' $(sudo find /var/log -name cfn-init\* -or -name cloud-init\*)

注意: 前述のコマンドは、ファイル名、行番号、およびエラーメッセージを返します。

cfn-init.log を探してください。見つからない場合、cfn-init は実行されませんでした。また、cloud-init-output.logcloud-init.log をチェックして、ユーザーデータの実行中にエラーが発生していないかどうかを確認する必要があります。エラーを特定したら、エラーメッセージに基づいて修正し、スタックを再作成します。

cfn-init.log が存在する場合、cfn-init は実行されましたが、障害が発生しています。cfn-init.log をチェックして何が問題なのかを確認し、エラーメッセージに基づいて修正します。

UserData プロパティーが cfn-init を実行するように構成されていることを確認するには、次の手順を実行します。

  1. コードエディタで、スタック用の AWS CloudFormation テンプレートを開き、UserData プロパティセクションを見つけます。
  2. 構文エラー、スペースの欠落、つづりの間違い、この他の誤字を含むエラーを確認してください。
  3. スタック、リソース、およびリージョンのプロパティの値が正しいことを確認してください。
  4. UserData プロパティの Fn:: Join 組み込み関数では、-v オプションを使用して cfn-init を冗長モードで実行します。JSON および YAML のサンプルテンプレートを参照してください。