Shogo's Blog

Dec 6, 2019 - 1 minute read - Comments - go github

CloudFormationのテンプレートのLinter actions-cfn-lint のご紹介

この記事はフラーAdvent Calendar 2019の6日目の記事です。 5日目は@shogo82148 さんで「GitHub Goveralls Action を公開しました」でした。


さて、最近 GitHub Actions を作るのにハマっているので、今日も GitHub Actions の紹介です。

Amazon CloudFormation

Infrastructure as Code の盛り上がりも一段落し、今では当たり前のように使っている人も多いと思います。 フラー共創スタジオはAWSがメインなので、CloudFormationをメインに使っています。 色々とクセは強いですが、少なくともtfstateが行方不明になったりはしないので、まあまあ仲良くやっています。

CloudFormation Linter

テンプレートを書いている上で地味にややこしいのが、プロパティーの名前や型の統一感が微妙にない、ということです。

例を挙げると、AWS::ApplicationAutoScaling::ScalableTargetMaxCapacity は整数型です。 これはまあ、納得できますね。

ところが AWS::AutoScaling::AutoScalingGroupMaxSize文字列型 なんです。説明文には「Auto Scaling グループの Amazon EC2 インスタンスの最大数」とあるのに! オートスケールという似たような機能を持っていて、どちらもスケーリンググループの最大数を表しているの、名前も違えば型が全く違う。

この手のミスは aws cli に付属している テンプレートの validation 機能では見つけられす、実際に反映してみるしかありません。 すぐに失敗してくれればいいんですが、失敗するまでにも十数分かかったりしてかなり面倒です。


そこでおすすめなのが CloudFormation Linter。 この手の名前のミスや型のミスを指摘してくれるコマンドラインツールです。 各種エディタ用の拡張もあり、VSCodeでも使える ので、ぼくはいつもこれを使っています。

CloudFormation Linter については Classmethod さんの紹介記事もどうぞ。

GitHub Action for CloudFormation Linter with reviewdog

この機能を GitHub Action にしたのが、 「GitHub Action for CloudFormation Linter with reviewdog」です。 多人数で開発していると、チーム内に cfn-lint を入れてない人も出てきてしまいます。 GitHub上でLintを実行することで誰でもすぐにLintの結果を得られるようにするための GitHub Actions です。

似たような GitHub Actionに GitHub Action for CloudFormation Linter があるのですが、 それとの違いは reviewdog と連携しているところです。 テンプレートに問題があるとプルリクエストのdiffにこんなふうにコメントを残してくれます。

reviewdogのコメント

設定もとくに難しくなくて、これを .github/workflows/reviewdog.yml に置くだけ。 簡単ですね!

name: reviewdog
on: [pull_request]
jobs:
  shellcheck:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: reviewdog/action-shellcheck@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}

※実際にはCloudFormationのテンプレートとは無関係のYAMLやjsonも解析してしまい、エラーを吐くことがあるので、調整が必要な場合もあります。

まとめ

以上、CloudFormation Linterreviewdog を組み合わせた GitHub Action GitHub Action for CloudFormation Linter with reviewdog の紹介でした。


フラーAdvent Calendar 2019 7日目の担当は すまんな、氏川氏… さんで「Androidで何か書く」です。