CloudFormationをコマンドラインで操作するツール
「rain」を使ってみました
「rain」を使ってみました
表題の通り、CloudFormationをコマンドラインで操作できるツール「rain」を使ってみましたので紹介させていただきます。
「rain」を一言でいうと、CloudFormationスタックを操作したり、テンプレートの作成・管理を便利に行ったりできるコマンドラインツールです。具体的には、スタックや変更セットの作成・更新・削除、テンプレートの作成・差分比較・フォーマットなどなど、CloudFormationに関わる様々な操作をコマンドベースで多機能に行うことができます。
コマンドベースでCloudFormationを操作するならAWS CLIのCloudFormationコマンドで良いじゃんと思う方もいるかもしれませんが、rainはCloudFormationコマンドよりも短いコマンドで比較的簡単に扱えるのが嬉しいです。また、テンプレート作成の補助にも使えるのでCloudFormationを使った構築全体を楽にしてくれます。
rain公式ページCloudFormationのベストプラクティスについて調べていた際、Blackbelt資料内で紹介されていたのを見つけました。もともとTerraformに憧れがあり、CloudFormationもTerraformのようにコマンドラインで使えたらいいのにと思っていた所だったので試しに使ってみました。
GitHubのリリースページからWindows向けのzipファイルをダウンロードします。ダウンロードしたファイルを展開して任意のフォルダに配置し、rain.exeにパスを通せば使えるようになります。※前提としてAWS CLIが必要になります。
使用時の例としてVPCを含むスタックを作成→サブネットを追加してスタックを更新→スタックの削除までの流れを紹介します。
rain buildコマンドで設定値が空のテンプレートを作成します。-oオプションで指定したファイル名でテンプレートを出力できます。
以下のようなテンプレートファイルが作成されます。
testvpc.yml
Propertiesに求められる値の形式(STRING/INTEGER/BOOLEAN)が提示されていますので記載します。
rain deployコマンドで環境にvpcをデプロイします。
コマンドを実行するとデプロイされるリソースの一覧が表示され、続行してよいか聞かれます。このとき裏では変更セットが作成されているようです。
yを入力して続行すると、環境にスタックがデプロイされます。
リソース「Vpc」を含むスタック「testvpc」の作成に成功しました。rain lsコマンドでデプロイされているスタックの一覧を確認可能です。
testvpc.ymlテンプレートにサブネットを追加しました。スタック作成時と同じrain deployコマンドでスタックを更新できます。
コマンドを実行すると、rainは現在デプロイされているスリソース群とこれから更新後スタックに含まれるリソース群を比較し、増えるリソース・削除されるリソースの一覧を提示したうえで続行するか確認してくれます。
yを入力して続行すると、スタックが更新されます。
リソース「Publicaz1Subnet」が追加されました。
他にも、作成に失敗したスタックがある状態で修正したテンプレートを指定してrain deployコマンドを使うと、自動的に失敗スタックを削除して新しいスタックを作成してくれるなど、rain deployコマンドはかなり便利に使うことができます。
rain rmコマンドでスタックを削除できます。
コマンドを実行すると本当に削除してよいか確認が挟まります。
スタック「testvpc」が削除できました。
気に入った点としては以下の通りです。
せっかくIaCを導入しているのに最終的なデプロイがGUIでは再現性を高めきれず、もったいない感じがありました。かといってAWS CLIのaws cloudformationコマンドは微妙に扱いづらく・・・rainは簡単に扱えて高機能な点がとてもよいと思いました。
rainを使う以前はvscodeでテンプレートを編集した後ウィンドウを移動してブラウザ上のコンソールからデプロイする必要がありましたが、テンプレートを編集した後そのままvscodeのターミナルからデプロイできるのは些細なことながら便利でした。
rain consoleコマンドでターミナルからAWSコンソールのCloudFormation画面を開くことができます。rainは便利ではあるものの、デプロイ後のスタックやリソースの確認はGUIが優れています。コマンド一つですぐにコンソールに移動し、デプロイ後のリソースを確認できるのはとてもよかったです。
rain deployコマンドの-cオプションを使うと、デプロイするテンプレートのParametersの値を指定したファイルから参照させることができます。パラメータ用ファイルを用意して環境内の全てのリソースのパラメータをそこに集約すれば、パラメータの変更を一つのファイルで一元管理可能です。検証で繰り返しリソースをデプロイしていた際は、パラメータファイルを指定するだけでいちいちパラメータの入力や確認をしなくてもよくなるのが便利でした。また、環境ごとにパラメータファイルだけ分けて作成し、テンプレート自体は環境間で使いまわしということも可能でした。実運用を考えた場合にもパラメータのバージョン管理をできるのはよいのではないでしょうか。
逆にいまいちだった点をあげると、デプロイ時のパラメータ入力がひどく面倒でした。テンプレート内でパラメータの値を指定しないままデプロイしようとすると、1つずつ順不同に出てくるパラメータの値を全て入力していく必要があります。1つでも入力を間違えると最初からやり直しになるため、パラメータ入力時は気が抜けませんでした。テンプレート内でパラメータの値を指定しない場合は、コマンドの中に含めたりパラメータ用ファイルを参照させたりするのがよいと思います。
CloudFormationを操作するためのCLIツール、「rain」について紹介させていただきました。今回紹介したのは基本的なコマンド・オプションのみでしたが、rainには他にも多くのコマンド・オプションがあり、活用することでCloudFormationを更に便利に使うことができそうです。ぜひお試しください。