はじめに
AWS環境のインフラ構築においては、CloudFormationを利用し Infrastructure as Code(IaC) による運用をしている例も多いと思います。
CloudFormation運用を支援するCLIツール 「rain」 がシンプルで便利なので使っているのですが、ローカル環境に手を入れたくなかったので、この記事ではAWSのCloudShell上でサクッと使える状態にする方法をまとめます。
CloudShellを使うとローカル環境を汚さずに済むという点と、デプロイ操作に十分な権限を持つIAMユーザーでコンソールにサインインしていれば、その権限が自動的に引き継がれるため、AWS CLIの認証設定などを意識せずにすぐ操作できるのもメリットですね。
rainとは
rain は、CloudFormationテンプレートの管理・デプロイを補助するオープンソースのCLIツールで、コミュニティを中心に広く利用されています。
主な機能として、以下が挙げられます。
- テンプレートの整形・検証(
fmt,validate) - 差分確認(
diff) - デプロイの実行(
deploy) - スタック情報の確認・管理(
ls,statusなど)
インストール方法
CloudShellでのセットアップ例
AWSコンソールにサインインし、CloudShellを起動します。
エディタを起動し、「rain_inst_cloudshell.sh」というファイル名で以下のスクリプトを保存します。
(あらかじめローカルで作成したファイルをCloudShellにアップロードしても問題ありません。私はいつもそのやり方です)
バージョンは適宜ご自身で変更してください。
#! /bin/sh
# Version
VER="v1.23.0"
# Install
curl -OL https://github.com/aws-cloudformation/rain/releases/download/${VER}/rain-${VER}_linux-amd64.zip
unzip rain-${VER}_linux-amd64.zip
sudo mv rain-${VER}_linux-amd64/rain /usr/local/bin/
rm -rf rain-${VER}_linux-amd64*
上記で保存したスクリプトを以下コマンドにて実行します。作成直後だと実行権限がないので、付与します。
~ $ chmod 755 rain_inst_cloudshell.sh
~ $ ./rain_inst_cloudshell.sh
正常に実行されると、以下のような表示になります。(細かい数字等は環境によって異なります)
~ $ chmod 755 rain_inst_cloudshell.sh
~ $ ./rain_inst_cloudshell.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 9643k 100 9643k 0 0 64.1M 0 --:--:-- --:--:-- --:--:-- 64.1M
Archive: rain-v1.23.0_linux-amd64.zip
creating: rain-v1.23.0_linux-amd64/
inflating: rain-v1.23.0_linux-amd64/LICENSE
inflating: rain-v1.23.0_linux-amd64/README.md
inflating: rain-v1.23.0_linux-amd64/rain
インストール後、CloudShell上で以下コマンドを実行し、バージョンが表示されればOKです👇
~ $ rain --version
Rain v1.23.0 linux/amd64
ここまでで、CloudShell上でrainが使用できる状態になりました。
rainの基本的な使い方
rain自体の使い方も少しだけ紹介しておきます。
スタックのデプロイ
CloudFormationテンプレートを指定してデプロイを実行します。
rain deploy <CFnスタック名> <CFnテンプレートファイル名>
テンプレートの整形と検証
テンプレートを整形 (fmt) し、構文エラーを事前にチェック (validate) します。
rain fmt <CFnテンプレートファイル名>
rain validate <CFnテンプレートファイル名>
整形結果は直接上書きされ、YAML/JSONいずれにも対応しています。
差分の確認
既存スタックとテンプレートの差分を出力できます。
更新予定のリソースを確認してからデプロイするのに便利です。
rain diff <CFnスタック名> <CFnテンプレートファイル名>
「rain」をCloudShell上でサクッと利用する方法は以上です。