LoginSignup
1
0

More than 1 year has passed since last update.

AWS-CDK pipelinesでCloudFormation templateが一定のサイズを超えるとエラーになる

Last updated at Posted at 2022-06-03

aws-cdkの以下issueで言及されている内容で、かなり前から話題になっているようです。

事象

CDKに機能追加をして、生成されるテンプレートが一定のサイズを超えると、以下のようなエラーが発生しました。

Template format error: YAML not well-formed. (line 2528, column 49) (Service: AmazonCloudFormation; Status Code: 400; Error Code: ValidationError

手元の環境では51KBまでは問題なく、それを超えるとエラーになるようでした。
エラーメッセージのlineが指しているのはファイルの末端箇所で、そこが特段変わっているような感じはありません。
以下のコメントで言われている通りです。

環境

  • 言語
    python3.8
  • aws-cdkのライブラリ
    1.158.0
  • CDK-CLI
    2.26.0
  • Node.js
    16.15.1

試したこと

追加したものが悪さをしているわけではない

元あったものを少し減らして、追加したいものを入れても51KB以内になるようにすれば、エラーは発生しない

生成されたtemplateに対してaws cloudformation validate-templateをしても、エラーは発生しない

具体的には以下の手順です。

  • 該当のCodeBuildの
    ビルドの詳細 -> アーティファクト -> アーティファクトのアップロード先
    でS3に出力されているartifactが確認できるので、ダウンロードします。
    デフォルトだと、KMS keyの権限エラーになる可能性があるので、該当S3ファイルの
    プロパティ -> サーバ側の暗号化設定 -> AWS KMS キー ARN
    からKMS キーポリシーを編集し、Principalに自分のアカウントを追加します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::xxx:root"
                ]
            },
            "Action": [
  • ダウンロードしたファイルを解凍し、中にあるjsonファイルを任意のS3上にアップロードした上で以下コマンドを実行
aws cloudformation validate-template --template-url https://xxxxxx.s3.ap-northeast-1.amazonaws.com/hoge/fuga.template.json 

生成されたtemplate自体はCFnで問題なく実行できる

上記で取得したtemplateファイルを使って、新たに別スタックで実行することはできるので、
手間ですが意図していたリソースをデプロイすることは可能です。

エラーの回避方法

issueの中にも記載がありますが、特殊文字とファイルサイズの組み合わせがエラーを引き起こしているようです。
自分の場合は、APIGatewayのDesctiptionの中に日本語の文字を使っていたので、
それを全て1バイト文字にするとエラーが発生しなくなりました。

まとめ

マルチバイトの文字を使わなければ問題は無さそうですが、修正されると良いなと思い、
自分もissueにコメントしておきました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0