AWS Tools for PowerShell Core を学びながら CloudFormation周りの補助スクリプトを作ってみる

2019.11.22

Windows ユーザーの皆さん PowerShell使ってますか?

今回は AWS Tools for PowerShell を使ってみようと思います。 ちょうど CloudFormation(CFn)のスタック操作をマネジメントコンソールでポチポチすることが 多く そろそろCLIで実行したいな... と思っていたので、 スタックの作成・更新周りの補助スクリプト を PowerShellで作ります。

目次

  1. 環境
  2. コマンドレット
  3. スクリプト作ってみた
  4. おわりに

環境

実行環境は以下のとおり。

  • OS: macOS Mojave (10.14.6)
  • PowerShell: Core (6.2.1)
  • AWS Tools for PowerShell: AWSPowerShell.NetCore (3.3.618.0)

インストール、セットアップ周りは割愛します (AWSのガイド を参照ください)。

コマンドレット

CFn 関連のコマンドレット一覧のドキュメントは こちら。 今回 CFn スタックの作成・更新周りのコマンドレットを一通り使ってみました。 (※ それぞれのパラメータ全ては紹介しません。詳細はドキュメント、もしくは Get-Help 参照)

  1. 確認: Get-CFNStack
  2. 確認: Get-CFNStackResourceList
  3. スタック作成: Test-CFNTemplate
  4. スタック作成: New-CFNStack
  5. スタック作成: Wait-CFNStack
  6. スタック更新: New-CFNChangeSet
  7. スタック更新: Get-CFNChangeSet
  8. スタック更新: Start-CFNChangeSet/ Remove-CFNChangeSet

確認: Get-CFNStack

作成しているスタック一覧を取得します。

確認: Get-CFNStackResourceList

スタック名を指定して、リソースの一覧を取得します。

デフォルトの出力は情報量が多いので、マネコン風に表示するための関数を作成すると良い感じです。

スタック作成: Test-CFNTemplate

CFnテンプレートの検証を行います。 ローカルの場合は -TemplateBody 、 S3バケット内の場合は -TemplateURL パラメータを指定します。

-TemplateBody の内容は Get-Content ./FILEPATH/FILE.yaml -Raw のようにします。 -Raw を付けないと型の不一致でエラーになります。

スタック作成: New-CFNStack

新規スタックを作成します。 主にスタック名、テンプレートファイル、パラメータを指定して実行します。使用例はこちら。

実行するとスタックIDが返されます。

スタック作成: Wait-CFNStack

スタックが作成されるのを待ちます。スクリプト作成時に役立ちます。

デフォルトで UPDATE_ROLLBACK_COMPLETE, CREATE_COMPLETE, ROLLBACK_COMPLETE, UPDATE_COMPLETE のいずれかのステータスになるまで、 最大 60秒 待機します。

完成後は 作成したスタックの情報を返します。

ステータスとタイムアウトを指定するには -Status-Timeout パラメータを指定します。

PS C:\> Wait-CFNStack -StackName MyStack -Timeout 300 -Status CREATE_COMPLETE,ROLLBACK_COMPLETE

(引用: reference: Wait-CFNStack : Examples2)

スタック更新: New-CFNChangeSet

新規 ChangeSet(変更セット) を作成します。 以下はローカルの更新後テンプレートをパラメータに入れて変更セットを作成する例です。

スタック更新: Get-CFNChangeSet

変更セットの情報を取得します。

Changes に変更点がまとめられているので、そちらを参照しましょう。

スタック更新: Start-CFNChangeSet/ Remove-CFNChangeSet

Get-CFNChangeSet で得た変更内容を確認した後、

  • OK であれば Start-CFNChangeSet で変更セットを実行してスタックを更新します
  • NG であれば Remove-CFNChangeSet で変更セットを削除しましょう

スクリプト作ってみた

PowerShellの力(Power)を付けるのも兼ねて、検証用環境のスタックを作成・更新するための補助スクリプト作ってみました。

スタック作成

ローカルのCFnテンプレートを引数に新規スタックを作成する関数を作成してみました。 対話式に スタック名パラメータ を指定します。

▼ 利用イメージ

スタック更新

続いてはスタックの更新です。 ローカルのCFnテンプレート、スタック名を引数に渡します。

▼利用イメージ

(aws cloudformation wait change-set-create-complete に相当するコマンドレットが見つからなかったので、 その部分だけ AWS CLI使ってます…)

おわりに

AWS Tools for PowerShell Core を色々触ってみました。

今までは AWS CLI + ConvertFrom-Json などで AWSリソースにアクセスしていて、それでも十分使えていました。 ですが、SDKを使うことで JSON をパースするひと手間が省けたり、補完機能がより充実したり… と、 得られるメリットが思った以上に多かったです。

PowerShellの オブジェクトをパイプラインで受け渡す 仕様は楽しいですね。 これからも使っていこうと思います。