【AWS】【トラブル】CloudFormation でのトラブル

■ はじめに

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) と ハイフン(-)のみ
始めは、半角文字。
 => 「_」は、禁止文字。

* 詳細は、以下の公式ドキュメントを参照。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-using-console-create-stack-parameters.html

対応案

* 「_」の代わりに「-」を使用
 (「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) と 
コロン(:)、ハイフン(-)のみ
 => 「_」は、禁止文字。

* 詳細は、以下の公式ドキュメントを参照。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-using-console-create-stack-parameters.html

対応案

* 「_」の代わりに「-」を使用
 (「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 CLI

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