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

■ はじめに

https://dk521123.hatenablog.com/entry/2022/05/25/220037

などで、CloudFormation を使った際に
発生したトラブルについて、メモしておく

目次

【1】エラー「Service: Amazon S3; Status Code: 400・・・」発生
【2】エラー「Stack name must contain only letters, numbers, dashes」が表示
【3】エラー「Template format error: Output Xxx is malformed.」が表示

【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」とする)

関連記事

CloudFormation ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/26/224812
CloudFormation ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/12/01/170326