前回
これまでの関連記事は、下記のとおり
今回
Makefileにコマンドを記載して使用したので、使用方法をメモとして残します。
binディレクトリで下記コマンドを実行し、GitHUBからcfn-python-lintをダウンロードします。
$ make cfnlint-clone
binディレクトリで下記コマンドを実行し、cfn-python-lint のDockerイメージをビルドします。
このコマンドは、git pull してからビルドします。
最新へのアップデートにも使用できます。
$ make cfnlint-update
cfnディレクトリで下記コマンドを実行し、cfn-python-lint でテンプレートをテストします。
$ make lint docker run --rm -v `pwd`:/data cfn-python-lint /data/cfn_*.yml E3012 Property Resources/EcsTaskDefinition/Properties/ContainerDefinitions/1/Environment/5/Value should be of type String /data/cfn_ecs_service_api01.yml:349:11 E3001 Invalid or unsupported Type AWS::ApiGatewayV2::VpcLink for resource VpcLink in us-east-1 /data/cfn_ecs_service_bff.yml:148:5 E3012 Property Resources/EcsTaskDefinition/Properties/ContainerDefinitions/0/Environment/5/Value should be of type String /data/cfn_ecs_service_bff.yml:366:11 make: *** [Makefile:25: lint] Error 2
エラーの場所を、行数とカラムで教えてくれるので、デバッグしやすいです。
上記の例だと
cfn_ecs_service_bff.ymlの "Invalid or unsupported"は、cfn-python-lint が、まだ、対応していないようなので無視します。
cfn_ecs_service_api01.yml と cfn_ecs_service_bff.yml は、下図のように文字列型の値を設定すべき場所に、文字列以外の値を設定しているのでエラーになっています。
なので、"true"のように修正するとエラーが解消します。
ちなみに、このエラーの場合は、Cloudforamtion で create-stack しても成功します。
aws-cli の validate-template で同じテンプレートをテストしてみます。
cfnディレクトリで下記コマンドを実行します。
$ make validate ../bin/cfn_validate.sh blue21 . -- validate: /home/ubuntu/blue21_public/aws-sample-appmesh/cfn/./cfn_cognito.yml OK. -- validate: /home/ubuntu/blue21_public/aws-sample-appmesh/cfn/./cfn_cloudmap.yml OK. -- validate: /home/ubuntu/blue21_public/aws-sample-appmesh/cfn/./cfn_ecs_service_api01.yml OK. -- validate: /home/ubuntu/blue21_public/aws-sample-appmesh/cfn/./cfn_vpc.yml OK. -- validate: /home/ubuntu/blue21_public/aws-sample-appmesh/cfn/./cfn_ec2_nat.yml OK. -- validate: /home/ubuntu/blue21_public/aws-sample-appmesh/cfn/./cfn_ecr.yml OK. -- validate: /home/ubuntu/blue21_public/aws-sample-appmesh/cfn/./cfn_agw_api02.yml OK. -- validate: /home/ubuntu/blue21_public/aws-sample-appmesh/cfn/./cfn_ecs_cluster.yml OK. -- validate: /home/ubuntu/blue21_public/aws-sample-appmesh/cfn/./cfn_ecs_service_bff.yml OK.
[MEMO]
- cfn-python-lintは、チェックが厳しいので、cfn-python-lint でエラーでも、aws-cli の validate-template だとエラーにならない場合があります。
- cfn-python-lintは、Cloudformationの最新機能が反映されていない場合があるので、aws-cli の validate-template と併用したほうがいい。