はじめに
CloudFormationでテンプレートを書くとき、実際にAWS環境で実行しようとしたときにTypoとかで失敗するとがっくりします。こんなことを防ぐために、実際にAWS環境で実行する前になんらかの検証したいことがよくあります。その方法としてLocalStackの活用があると考えています。具体的な実装方法は以下を参照してください。
ただ、ちょっと大袈裟すぎる感じもするので何かいい方法がないかなと思っていたらAWS CloudFormation Linterというものを知ったので紹介します。
使い方
Python 3.8以上の環境で動きます。その後は、pip install cfn-lint
を実行してインストール。その後はcfn-lint
コマンドを実行すればOKです。
例えば、hoge.yml
というファイルがカレントディレクトリにあった場合は、以下のように実行します。
cfn-lint hoge.yml
複数のファイルをチェックしたい場合は、以下のように実行します。
cfn-lint *.yml
例えば以下のテンプレートを用意して実行してみました。
AWSTemplateFormatVersion: 2010-09-09 Description: Create Cloud9 Parameters: ProjectName: Type: String PublicSubnet1: Type: AWS::SSM::Parameter::Value<AWS::EC2::Subnet::Id> Description: Enter AWS SSM Parameter Store Key Resources: Cloud9: Type: AWS::Cloud9::EnvironmentEC2 Properties: AutomaticStopTimeMinutes: 30 ConnectionType: CONNECT_SSM Description: My Cloud9 ImageId: amazonlinux-2023-x86_64 InstanceType: t3.small Name: !Sub ${ProjectName}-Cloud9 SubnetId: !Ref PublicSubnet1
実行結果として以下のものが得られました。
E1152 'amazonlinux-2023-x86_64' is not a 'AWS::EC2::Image.Id' sample3.yml:18:7
ただ、上記のテンプレートはCloudFormation上では正常に動きますし、AWSのドキュメントでもエイリアスとして認められているのでちょっとあれ?って感じです。
考察
お手軽にCloudFormationのテンプレートをチェックできるLinter、cfn-lintを紹介しました。インストールがちょっとばかし面倒で、公式のDockerイメージが配布されていないので、ちょっとハードルは高いかもしれません。
ただ、目でチェックするよりかは確実にチェックできて、導入する価値はあるかなと思います。