2020年8月22日土曜日

AppMeshを試す(7)


前回


これまでの関連記事は、下記のとおり


環境構築時には、
CloudFormationのテンプレートをcfn-python-lintでテストしました。
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 と併用したほうがいい。