CloudFormation の template にも Linter があることを知ったので、記事にしておきます。
※ CloudFormation のベストプラクティスに Linter が記載されていました。
install
Linter(cfn-lint) は Python で実装されているため、 Python が必要となります。
pip3 install cfn-lint
cfn-lint
試しに、未使用の Parameter(ExistingVPC)があるテンプレートファイルに cfn-lint を実行してみます。
template/sample.yml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
ExistingSecurityGroups:
Type: List<AWS::EC2::SecurityGroup::Id>
ExistingVPC:
Type: AWS::EC2::VPC::Id
Description: The VPC ID that includes the security groups in the ExistingSecurityGroups parameter.
InstanceType:
Type: String
Default: t2.micro
AllowedValues:
- t2.micro
- m1.small
下記のように、5行目の ExistingVPC が未使用という指摘が出ます。
$ cfn-lint template/*.yml
W2001 Parameter ExistingVPC not used.
template/sample.yml:5:3
E1151 '!Ref ExistingVPC' is not a 'AWS::EC2::VPC.Id'
template/sample.yml:56:7
GitHub Actions
GitHub にテンプレートを push した時に、cfn-lint が実行されるように GitHub Action を設定します。
.github/workflows/test.yml
name: CloudFormation lint
on:
push:
branches:
- '**'
tags-ignore:
- '**'
jobs:
cfn-lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install cfn-lint
shell: bash
run: pip3 install cfn-lint
- name: cfn-lint
shell: bash
run: |
cfn-lint template/*.yml
Push 時に cfn-lint が実行され、テンプレートファイルに指摘がある場合は、エラーとなります。