🌦️

ミニマムなCloudFormation運用の始めかた

2023/03/02に公開

はじめに

AWS CDKを活用したいが、実際はCloudFormationで運用しているチームはある。

もちろん意欲があれば積極的にCDKを勧めたいが、そうならない場合もある。(是非は触れない)
そういったチームを一気にモダンな開発手法に移行させるのは難しいため、まずはある程度機能する環境を作り、ボトムアップ的に進めていくことが重要だと思うので、最低限で機能するツールを導入することが多い。

以下はそのサンプルである。

環境

  • 今回はAWS CloudShellとする。

リポジトリの資源管理:git-remote-codecommit

リポジトリがAWS CodeCommitで管理されている場合は、git-remote-codecommitを使用して簡単にクローンできる。AWS IAMだけで、SSHの設定を行わずに利用することができる点で、CloudShellとの相性が良い。

# Install
pip3 install git-remote-codecommit

# Usage
git clone codecommit::<region>://<repositoryName>

テンプレートのLinter:cfn-lint

CloudFormationテンプレートの作成中、適切な記述がなされているか、何度もデプロイして確認するのは時間の浪費だ。cfn-lintを使用すれば、リントチェックができる。

# Install
pip3 install cfn-lint

# Usage
cfn-lint --template *.yaml --ignore-checks W

テンプレートの静的解析:checkov

デプロイ前のテンプレートについて、セキュリティ等の課題がないかを確認しておきたい。cfn-nagでも良いのだが、対象サービスが多くアクティブに開発が行われているCheckovを最近は利用している。

# Install
pip3 install checkov

# Usage
checkov -d . --framework cloudformation

Stack管理における強力な支援ツール:rain

最後に、CUIでデプロイするためにrainを使用する。GUIの操作はパラメータ投入が煩雑でミスを生むので極力避けたい。だがCLIだとpoorな面が多く実用に耐えない。という厳しい点をrainはかなり吸収してくれる。

注意点としてCloudShellにhomebrewを導入するのはdisk的な意味で若干ハマるので、直接コマンドをダウンロードした方が使いやすい。

# Install
curl -OL https://github.com/aws-cloudformation/rain/releases/download/v1.3.2/rain-v1.3.2_linux-amd64.zip 
unzip rain-v1.3.2_linux-amd64.zip
sudo mv rain-v1.3.2_linux-amd64/rain  /usr/local/bin/
rain
rm -rf rain-v1.3.2_linux-amd64*
  • rain deploy: stackをcreate/updateする
  • rain ls: stackをリストする
  • rain logs : stack のログを追える

の使い方をとりあえず把握するだけで、かなり扱いやすくなる。おすすめ。

まとめ

AWS CloudShellを使用して、既存のCloudFormationテンプレートをリポジトリに管理し、Linter、静的解析、テスト、そしてCUIでのデプロイを実施する方法を紹介した。
あとは必要に応じてCI/CDに組み込んだりすればよいので簡単。

参考

https://dev.classmethod.jp/articles/git-remote-codecommit-setting/

https://aws.amazon.com/jp/blogs/news/git-pre-commit-validation-of-aws-cloudformation-templates-with-cfn-lint/

https://dev.classmethod.jp/articles/aws-cloudformation-rain/

Discussion