[小ネタ]Cloudformationのvalidate-template(文法チェック)におけるファイルサイズエラーの対処法

私は、構築作業をする際に、CloudFormationを利用しています。 必ず、テンプレートファイル作成後に以下のaws cliを利用したスクリプトで文法チェック(validate)をしています。 ファイルサイズエラーが発生し、対処法がわかったのでご紹介します。
2019.05.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コカコーラ大好きカジです。

私は、構築作業をする際に、CloudFormationを利用しています。 必ず、テンプレートファイル作成後に以下のaws cliを利用したスクリプトで文法チェック(validate)をしています。 詳細は使い方は、こちらの【CloudFormation入門2】テンプレート作成を効率化するバリデーション機能と自動実行シェルの紹介を参照してください。 その際に、以下のファイルサイズエラーが発生し、対処法がわかったのでご紹介します。

エラー内容

aws cloudformation validate-template コマンドでチェックしたところ、以下のエラーメッセージが発生しました。

'templateBody' failed to satisfy constraint: Member must have length less than or equal to 51200

実際のファイルは以下です。

$ ls -ltr 02-SecurityGroup*
-rw-r--r--@ 1 kajihiroyuki staff 42196 5 15 14:58 02-SecurityGroup-201905xx.yaml
-rw-r--r--@ 1 kajihiroyuki staff 61163 5 25 18:42 02-SecurityGroup.yaml

規模が大きかったため、セキュリティグループだけのテンプレート(yamlファイル)で2000行超え程度です。 追加修正前のバックアップファイル時はエラーは発生せず、チェックできてました。 ファイルを分割すれば良いのでは?とお思いの方もいると思いますが、セキュリティグループIDで通信許可する関係で、ファイル分割したくなかったのです。

私の既存文法チェック方法

./check.sh <テンプレートファイル名>

スクリプトの中身はこんな感じです。

$ cat check.sh
#!/bin/sh
FILE=$1
cat $FILE | xargs -0 aws cloudformation validate-template --template-body

対処方法

一度S3にファイルをアップロードし、そのファイルをaws cliでチェックする様にすればチェックできます。 「 --template-url」オプションでチェックする様にします。アップロードはマネージメントコンソール経由でも、OKです。

対処した後の実行結果

スクリプト例

$ cat check-sg.sh
#!/bin/sh
FILE=$1
aws s3 cp ./$FILE s3:///
aws cloudformation validate-template --template-url https://s3-ap-northeast-1.amazonaws.com//$FILE

S3アップロードと、文法チェックを行えました。

$ ./check-sg.sh 02-SecurityGroup.yaml
upload: ./02-it2-di-SecurityGroup.yaml to s3:///02-SecurityGroup.yaml
{
"Parameters": [
{
"ParameterKey": "VpcId",
"NoEcho": false,
"Description": "VPC ID"
}
],
"Description": "Create Security Groups."
}

まとめ

aws cloudformation validate-template コマンドで、「'templateBody' failed to satisfy constraint:Member must have length less than or equal to 51200」のエラーが出た際は、S3バケットにアップロードして文法チェックを行いましょう。 どなたかのお役に立てれば光栄です。

参考元

cluster.yml : member must have length less than or equal to 51200