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

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

Clock Icon2019.11.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.