■ はじめに
https://dk521123.hatenablog.com/entry/2022/05/25/220037
などで、CloudFormation を使った際に 発生したトラブルについて、メモしておく 今回の以外のCloudFormationに関するトラブルについては 以下の関連記事を参照のこと。
CloudFormationで変数を参照したら、エラー「Unresolved resource dependencies」が表示
https://dk521123.hatenablog.com/entry/2024/02/27/211050
目次
【1】エラー「Service: Amazon S3; Status Code: 400・・・」発生 【2】エラー「Stack name must contain only letters, numbers, dashes」が表示 【3】エラー「Template format error: Output Xxx is malformed.」が表示 【4】エラー「XXX is in UPDATE_ROLLBACK_FAILED state and can not be updated」が表示
【1】エラー「Service: Amazon S3; Status Code: 400・・・」発生
CloudFormation で、NotificationConfiguration を指定したS3バケットを 作ろうとした際に、以下「エラー内容」が表示されてしまう
テンプレートファイル (YAML形式)
NotificationConfiguration: TopicConfigurations: - Topic: 'arn:aws:sns:us-east-1:123456789012:TestTopic' Event: 's3:ObjectCreated:*'
エラー内容
Unable to validate the following destination configuration (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: XXXX; S3 Extended Request ID: xxxxx; Proxy: null)
原因
* SNS の Topic の アクセスポリシーで制限を掛けていたため。
Topic の アクセスポリシー
{ "Sid": "S3Event", "Effect": "Allow", "Principal": { "Service": "s3.amazon.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-1:123456789012:TestTopic", "Condition": { "ArnLike": { "aws:SourceArn": [ "arn:aws:s3::::xxxxxxxx", <= ここで制限を掛けていた "arn:aws:s3::::yyyyyyy", ] } } }
対応案
* SNS の Topic の アクセスポリシーのaws:SourceArnに 該当するS3のArnを追加する (例えば「arn:aws:s3:::zzzzzzzzz」を作ろうとしてたら、これを追加)
【3】エラー「Stack name must contain only letters, numbers, dashes」が表示
CloudFormation のスタック作成時に スタック名「xxx_xxxx」を指定したら、以下「エラー内容」が表示。
エラー内容
Stack name must contain only letters, numbers, dashes. Must start with a letter.
原因
エラー内容のままで スタック名は、半角文字(A-Z, a-z)、半角数字(0-9) と ハイフン(-)のみ 始めは、半角文字。 => 「_」は、禁止文字。 * 詳細は、以下の公式ドキュメントを参照。
対応案
* 「_」の代わりに「-」を使用 (「xxx-xxxx」とする)
【4】エラー「Template format error: Output Xxx is malformed.」が表示
CloudFormation で KMS 作成しようとした際に、 スタック作成したら、以下「エラー内容」が表示。
テンプレートファイル (YAML形式)
Parameters: Param: Description: Input param Type: String Outputs: Xxx: Value: !GetAtt Xxx.Arn Description: KMS key output Export: # ${Param}には「xxx_xxxx」が入力 Name: !Sub xxx-${Param}-xxx
エラー内容
Template format error: Output Xxx is malformed. The Name field of every Export member must be specified and consist only of alphanumeric characters, colons, or hyphens.
原因
エラー内容のままで スタック名は、半角英数字(A-Z, a-z, 0-9) と コロン(:)、ハイフン(-)のみ => 「_」は、禁止文字。 * 詳細は、以下の公式ドキュメントを参照。
対応案
* 「_」の代わりに「-」を使用 (「xxx-xxxx」とする)
【4】エラー「XXX is in UPDATE_ROLLBACK_FAILED state and can not be updated」が表示
AWS CloudFormation で IAMロールを更新しようと思ったら、 以下「エラー内容」が返ってきた
エラー内容
An error occurred (ValidationError) when calling the CreateChangeSet operation: Stack: arn:aws:cloudformation:<AWS_REGION>:<AWS_ACCOUNT_ID>:stack/<STACK_NAME/xxxx> is in UPDATE_ROLLBACK_FAILED state and can not be updated
原因
実行前のスタックの状態が「UPDATE_ROLLBACK_FAILED」状態になっていたため
解決案
* 以下の公式ドキュメントに書いてある
https://repost.aws/ja/knowledge-center/cloudformation-update-rollback-failed
CloudFormation コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して、 スタックを作業状態にロールバックできます。 注: AWS CLI コマンドの実行時にエラーが発生した場合は、 AWS CLI の最新バージョンを使用していることを確認してください。
CloudFormation コンソール
1. CloudFormation コンソールを開きます。 2. ナビゲーションペインで、[スタック] を選択します。 3. [Stack name (スタック名)] 列から、UPDATE_ROLLBACK_FAILED 状態で 停止しているスタックを選択します。
aws cloudformation continue-update-rollback \ --stack-name awsstackname123 \ --resources-to-skip awsfaultyresource123
関連記事
CloudFormation ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/26/224812
CloudFormation ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/12/01/170326
CloudFormationで変数を参照したら、エラー「Unresolved resource dependencies」が表示
https://dk521123.hatenablog.com/entry/2024/02/27/211050