AWS CloudFormation では、AWS:: CloudFormation:: Init を使用して Amazon Elastic Cloud Compute (Amazon EC2) インスタンスにメタデータを含めたのですが、インスタンスに変更が表示されません。
解決策
前提条件CloudFormation スタックの [失敗時のロールバック] オプションを [いいえ] に設定します。
[失敗時のロールバック] を [いいえ] に設定しても EC2 インスタンスにメタデータを含めることができない場合は、次の手順を実行してください。
**注:**以下の解決手順は、Linux インスタンスを使用して作成した CloudFormation スタック用です。
cfn-init ヘルパースクリプトがインストールされていることを確認する
CloudFormation リソースにシグナルを送信するように設定されているインスタンスに cfn-init がインストールされていることを確認するには、次の手順を実行します。
- SSH を使用してインスタンスに接続します。
- 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-bootstrapaws-cfn-bootstrap-1.4-34.24.amzn1.noarch
**注:**上記のコマンドは、RPM パッケージマネージャーを使用するディストリビューションでのみ機能します。
CloudFormation ヘルパースクリプトは、デフォルトで Amazon Linux Amazon マシンイメージ (AMI) にインストールされます。
インスタンスがインターネットに接続されていることを確認する
インスタンスが 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 ログの構文エラーまたは誤った値を検索するには、次の手順を実行します。
- SSH を使用してインスタンスに接続します。
- 詳細なエラーメッセージを見つけるには、次のログで 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/cloud-initファイル内の error または failure という単語のすべてのインスタンスを見つけます。
grep -ni 'error\|failure' $(sudo find /var/log -name cfn-init\* -or -name cloud-init\*)
**注:**上記のコマンドは、ファイル名、行番号、およびエラーメッセージを返します。
- 詳細なエラーメッセージを使用してエラーを修正し、スタックを更新します。
cfn-init.log が存在しない場合は、CloudFormation テンプレートが cfn-initを実行していなかったことになります。
UserData プロパティが cfn-init を実行するように設定したことを確認するには、次の手順を実行します。
- コードエディターで、スタックの CloudFormation テンプレートを開きます。
- UserDataで、構文エラー、スペースの欠落、スペルミス、その他のタイプミスなどのエラーを確認します。
- スタック、リソース、リージョンのプロパティの値が正しいことを確認します。
- UserData プロパティの Fn::Join 組み込み関数では、詳細モードで -v を使用して cfn-init を実行します。出力例については、「例」を参照してください。
関連情報
CloudFormation VPC エンドポイントに関する考慮事項
AWS::CloudFormation::Init
AWS CloudFormation の「Failed to receive X resource signal(s) within the specified duration」エラーを解決するにはどうすればよいですか?