AWS Toolkit for VSCodeを入れていたものの、よく見たらちゃんと動いてなかった。
なぜ補完もせずゴリゴリ書いていたのか…
なのでちゃんと設定した記録。
インストールが必要なもの
VSCode本体、node.js、AWS CLI、AWS CDK、AWS SAM CLI、Docker、あたりは省略。
-
YAMLエクステンション
AWS ToolkitのSAM対応や、CloudFormation用のエクステンションが依存している。 -
aws-cloudformation-template-schema
CloudFormationテンプレートの補完と検証を行える。
VSCodeであれば、下記のCloudFormation Linterを入れればよい。
GitHub Actionsもあるの、いいじゃないと思った。push した後にチェックしても手遅れ感あるので、ローカルでチェックする前提で最後の防波堤として導入してもいいのかもしれない。 -
CloudFormation Linter
E3012エラーはチェックから外してもよさそう。
外す場合は、VSCode の設定でcfnLint.path
にcfn-lint --ignore-checks E3012
と設定する。
手元の設定では E3012 は外さず、東京リージョンを指定して/opt/homebrew/bin/cfn-lint -r ap-northeast-1
と設定した(M1 Macの場合)。 -
cfn-lint
CloudFormation Linterが依存している。
Macならbrew install cfn-lint
でインストール。
@aws-amplify/cli
がcfn-lint
に依存しているので、Amplify CLIをインストールしていると brew install 中にリンクに失敗する。
JavaScript 製のcfn-lint
は deprecated らしく、本人もcfn-python-lint
使えって言っているので、素直に/opt/homebrew/bin/cfn-lint
のリンク(M1 Macの場合)を削除してbrew link cfn-lint
、か--overwrite
を付けて上書きし、Python 版にリンクを貼る。 -
pydot
CloudFormation Linterが依存している。
CloudFormation Linterのスタック可視化機能を使いたいならこちらもインストールする。
規約など
-
CloudFormationテンプレート名
公式ドキュメントには、テンプレート名がtemplate.yaml
でないと認識しないと書いてある。
実際はtemplate.yml
でも認識する場合がある。
ソースコードを見た感じtemplate.yaml
にしておいたほうが全機能で認識してくれそう。 -
ECSタスク定義ファイル名
サフィックスがecs-task-def.json
でないと認識しない。
my-ecs-task-def.json
など。
その他の設定
色々な記事を見ていると yaml.customTags
を自分で設定しているものが多い。
CloudFormation Linterのソースコードを見ると、内部で自動的に設定をしている箇所があるので、読み間違えてなければ今どきは何もやらなくていいんじゃないかと思う。