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.log とcloud-init.log をチェックして、ユーザーデータの実行中にエラーが発生していないかどうかを確認する必要があります。エラーを特定したら、エラーメッセージに基づいて修正し、スタックを再作成します。
cfn-init.log が存在する場合、cfn-init は実行されましたが、障害が発生しています。cfn-init.log をチェックして何が問題なのかを確認し、エラーメッセージに基づいて修正します。
UserData プロパティーが cfn-init を実行するように構成されていることを確認するには、次の手順を実行します。
- コードエディタで、スタック用の AWS CloudFormation テンプレートを開き、UserData プロパティセクションを見つけます。
- 構文エラー、スペースの欠落、つづりの間違い、この他の誤字を含むエラーを確認してください。
- スタック、リソース、およびリージョンのプロパティの値が正しいことを確認してください。
- UserData プロパティの Fn:: Join 組み込み関数では、-v オプションを使用して cfn-init を冗長モードで実行します。JSON および YAML のサンプルテンプレートを参照してください。
関連情報
AWS CloudFormation 用に VPC エンドポイントをセットアップする
AWS:: CloudFormation:: Init
AWS CloudFormation のエラー「指定された期間内に X 個のリソースシグナルを受信できませんでした」を解決するにはどうすればよいですか?