AWS CloudFormationの構築が楽になるツール「Rain」

2022-06-07

こんにちは、0371です。

今回は、CloudFormationでIaCをしたいときに、構築の手助けをしてくれるツール、「Rain」を紹介します。
CloudFormationの煩わしい部分を解決してくれる便利なツールです。

「Rain」について

下記が公式リポジトリです。

Rain
"https://github.com/aws-cloudformation/rain"

ドキュメントもあります。

rain | A development workflow tool for working with AWS CloudFormation.
"https://aws-cloudformation.github.io/rain/"

インストール

「Rain」はAWSCLIのインストールが前提となっています。

MacOSの方は、以下のコマンドですぐに使用することができます。

brew install rain
rain --version

使い方

公式ドキュメントに書かれているコマンドの小技をまとめます。

コマンド説明
rain rm -y ~~~.ymlだいたいのコマンドで -y オプションが使用できます。
rain build -b または -barebuildコマンドのオプションで、AWSリソースの任意入力の値を省略できます。
rain build -lbuildコマンドで指定できるAWSリソースの一覧が見れます。
rain build {AWSリソースA} {B} {C}リソースを複数組み合わせて出力させることができます。

また、シェルスクリプトと組み合わせるとさらに便利です。

rain-init.sh

#!/bin/bash

if [ ! -f $PWD/rain-template/VPC.yml ]; then
  rain build \
    AWS::EC2::VPC \
    AWS::EC2::InternetGateway \
    AWS::EC2::VPCGatewayAttachment \
    AWS::EC2::Subnet \
    AWS::EC2::Subnet \
    AWS::EC2::RouteTable \
    AWS::EC2::Route \
    AWS::EC2::SubnetRouteTableAssociation \
    AWS::EC2::SubnetRouteTableAssociation \
    AWS::EC2::Subnet \
    AWS::EC2::Subnet \
    AWS::EC2::RouteTable \
    AWS::EC2::Route \
    AWS::EC2::SubnetRouteTableAssociation \
    AWS::EC2::SubnetRouteTableAssociation \
    AWS::EC2::Subnet \
    AWS::EC2::Subnet \
    AWS::EC2::RouteTable \
    AWS::EC2::Route \
    AWS::EC2::SubnetRouteTableAssociation \
    AWS::EC2::SubnetRouteTableAssociation \
  > $PWD/rain-template/VPC.yml
else
  echo "VPC.ymlは既に存在します。"
fi

だいぶ適当ですが、こんな感じにしておくと、

bash rain-init.sh

だけでVPCに必要なAWSリソースをまとめることができます。
今回はVPCだけですが、EC2やRDSなどもまとめて作成できるようにしておくと非常に便利です。
そんなに1からCFnテンプレートを作成する機会はなさそうですが・・・😇

参考URL

CloudFormationのCLI実行ツール Rain がイケてそうなので紹介したい
"https://dev.classmethod.jp/articles/aws-cloudformation-rain/"

「つらみが解決!Rainを使ってCloudFormationをもっと便利に」というテーマで話しました #devio2021
"https://dev.classmethod.jp/articles/devio2021-cloudformation-rain/"

CloudFormationのコマンドラインツールRainを使用してWordPress環境を構築してみた
"https://zenn.dev/kazu_o/articles/59a4ca2c1e2e21"

rain buildとAWSのドキュメントの差分メモ
"https://zenn.dev/sakai_nako/articles/diff-cfn-rain-and-aws-document"

今日の一言

IaC頑張るぞ!!!