WindowsでCloudFormation Rainを動くようにしてみた

2021.03.03

しばたです。

先日弊社梶原によりCloudFormationのCLI実行ツール Rain を紹介する記事が公開されました。

非常に良さそうなツールだったので私も試してみることにしました。

TL;DR

Rainはクロスプラットフォーム向けツールなのでWindowsでも使えます。
ただ、一部機能に不具合があったのでプルリクを出して修正してもらっています。

現在最新のVer.1.1.2で不具合は解消され、次のリリース(たぶんVer.1.1.3かな?)で使い勝手も向上する見込みです。

既知の不具合と次リリースの改善について

最初私がRainを試した際はVer.1.1.1を使ってみたのですが、このバージョンではスタックをデプロイするrain deployコマンドがエラーになって終了してしまう問題がありました。

Rainはソースが公開されているので問題になっている箇所を見たところ、割と簡単に直せそうだったので実際に修正しプルリクを出しそのままマージしてもらいました。

これでrain deployコマンドのエラーは解消されVer.1.1.2に取り込まれています。
ただ、上図を見てわかる通りWindows環境でのANSIエスケープシーケンスの扱いが悪く、

Preparing template 'C:\temp\sample.yaml' ˙ ·
Preparing template 'C:\temp\sample.yaml' ˙ ·
Preparing template 'C:\temp\sample.yaml' ·˙.
Preparing template 'C:\temp\sample.yaml' .·

の様に進捗状況のダイアログがアニメーションしてくません。
WindowsでもWindows 10 Annversary Update (Ver.1607)からANSIエスケープシーケンスをサポートしてるので、このあたりの判定処理を追加で修正しました。

こちらは先日マージされたのですがまだリリースされていないので次のバージョンをご期待ください。
次のバージョンでは以下の様に意図したアニメーションになる予定です。

(Ver.1.1.2ではこんな感じなのが)

(次のバージョンではこんな感じになる予定)

なお、Windows 10 Annversary Update以前のOSではOS側で対応できないためこの改善は反映されませんのでご注意ください。

ちょっと余談

余談ですが、私が最初のプルリク出す前にCX事業本部の吉田が別件でプルリクを出してました。

こちらはrain rmで表示される削除ダイアログの既定値をNoにする改善でこちらもVer.1.1.2に導入されています。
弊社社内で軽いRainブームの予感がします。

やってみた

前置きはこの程度にして早速やっていきます。

基本的なところは梶原の記事と変わりませんので、ここではできるだけWindows固有の話をしたいと思います。

検証環境

今回は私の開発機で試しました。

  • 64bit版 Windows 10 (20H2)
  • AWS CLI 2.1.28
  • Rain 1.1.2 および 最新のソースコードをビルドした独自版

となります。

前提条件

Rainは一部コマンドで内部的にAWS CLIを使用します。
このため事前にAWS CLIをインストールしておいてください。

インストール

Windows版のRainはGitHubのリリースページで公開されているWindows向けZipファイルをダウンロードして展開すればOKです。

-nocgoが付いているものと付いてないものがありますがWindowsにおいては両者は同一でしたので好きな方をダウンロードしてください。
展開したZipファイルにrain.exeがありますので、こいつを任意のフォルダに展開しPATHを通しておけば完了です。

基本コマンド

rain buildでベースとなるテンプレートを作成しrain deployでデプロイするのはWindowsだろうが特に変わりはありません。

# rain build でテンプレート作成
#  --bare オプションで必要最低限の情報のみ出力できる
PS > rain build AWS::S3::Bucket --bare > S3.yaml

# rain deploy でデプロイ。AWS CLIと同じプロファイルを使う
PS > $env:AWS_PROFILE="my_profile"
PS > rain deploy .\S3.yaml sample-s3

# 作成したスタックは rain ls で確認
PS > rain ls

# スタックを削除したいときは rain rm
PS > rain rm sample-s3

以前の記事で記載されていなかった点として、初回rain deploy時はCloudFormationで使うアーティファクトの保存用S3の作成を要求されます。
このためCloudFormationの実行だけでなくS3の作成権限のある認証情報を使うようにすると良いでしょう。

(初回作成時はrain-artifacts-<AWSアカウント番号>-<AWSリージョン>というS3を作成する)

その他のコマンドも私が動かした範囲では特に問題なさそうでしたのでガンガン使っていくと良いと思います。

おまけ : Dockerfile作りました

ここまで説明したとおりWindows環境でもRainは普通に使えますが、準備が面倒だったり環境を汚したくない場合はDockerを使う方法もあります。
AWS公式のイメージをベースにRainを追加インストールするDockerfileも作ったので以下に公開しておきます。

CloudFormation Rainをお手軽に実行するDockerコンテナイメージ

Docker Desktopをインストール済みであれば以下の様な感じで、Rain入りコンテナ(aws-cfn-rain)を作り、docker runコマンドでRainの各種コマンドを実行できます。

# Rain用Dockerイメージを作成 (カレントディレクトリにDockerfileがある前提)
PS > docker build -t aws-cfn-rain .

# docker run でよしなにRainを使う
#  -v "$HOME/.aws/:/root/.aws" で認証情報ファイルをマウントし共有
#  -v "$($pwd.Path):/aws" でコンテナ内部のカレントディレクトリ /aws とホストのカレントディレクトリを共有
#  -e AWS_PROFILE で環境変数も共有
PS > docker run --rm -it -v "$HOME/.aws/:/root/.aws" -v "$($pwd.Path):/aws" -e AWS_PROFILE aws-cfn-rain --version

# rain deploy も可能だが、 Linuxコンテナにマウントしてるので ./ 配下にあるファイルのみ指定可能
PS > $env:AWS_PROFILE="my_profile"
PS > docker run --rm -it -v "$HOME/.aws/:/root/.aws" -v "$($pwd.Path):/aws" -e AWS_PROFILE aws-cfn-rain deploy ./sample.yaml

こちらであれば環境の更新や廃棄が容易ですのでより気軽に試せるでしょう。

最後に

以上となります。

Rain、とても良いですね。気に入りました。
これからもっと使い込んで沢山フィードバックしていきたいと思います。