ミニマムなCloudFormation運用の始めかた
はじめに
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
rain
Stack管理における強力な支援ツール:最後に、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に組み込んだりすればよいので簡単。
参考
Discussion