AWS CLIでCloudFormation StackSetsすべてが正常に完了しているエビデンスを取得するスクリプト書いた

CloudFormation StackSetsのエビデンスをAWS CLIで取得するスクリプトのメモです。
2021.10.25

こんにちは、臼田です。

みなさん、StackSetsで楽に全体管理していますか?(挨拶

今日は個人的なメモです。

CloudFormation StackSetsの結果一覧がほしい

AWSアカウントやリージョンにまたがった仕組みを一発で展開したい時、CloudFormation StackSetsは強力です。私もよく使います。

ちなみにいっしょに以下のCloudFormationでIAM Roleの準備をしたりするので紹介しておきます。

1つだけのStackSetsであればいいですが、いろいろ展開したらその結果を確認したり、状態をエビデンスとして残したいと思いますよね?

私もそう思ったのでCloudShellを起動してパッとAWS CLIで取得できるようなスクリプトを作りました。

スクリプト

こんな感じです。

aws cloudformation list-stack-sets --status ACTIVE --query "Summaries[].StackSetName" --output table
sets=$(aws cloudformation list-stack-sets --status ACTIVE --query "Summaries[].StackSetName" --output text)

for stack in ${sets[@]}
do echo "[${stack}]: count " $(aws cloudformation list-stack-instances --stack-set-name ${stack} --query "length(Summaries[])")
aws cloudformation list-stack-instances --stack-set-name ${stack} --query "Summaries[].{ID: StackSetId,Region: Region,Status: StackInstanceStatus.DetailedStatus}" --output table
done

ちょっと似た処理してますがまあ大して時間増えないので大目に見てください。職人の方がいたら是非アドバイスしてください。

以下4つの処理をしています。

  • (実行しているリージョンの)StackSets一覧(ACTIVEのみ)をテーブルで出力
  • (ループのために)StackSets一覧(ACTIVEのみ)を変数に格納
  • StackSets毎に展開したインスタンスの数をカウント
  • StackSets毎にID, Region, Statusをテーブルで出力

これでインスタンスに過不足が無いかや、すべてのインスタンスが成功しているか確認できます。

やってみた

だいたいこんな感じになります。

[cloudshell-user@ip-10-0-37-22 ~]$ aws cloudformation list-stack-sets --status ACTIVE --query "Summaries[].StackSetName" --output table
--------------------------
|      ListStackSets     |
+------------------------+
|  guardduty-events-a    |
|  guardduty-events-b    |
|  guardduty-events-c    |
|  guardduty-events-d    |
+------------------------+
[cloudshell-user@ip-10-0-37-22 ~]$ sets=$(aws cloudformation list-stack-sets --status ACTIVE --query "Summaries[].StackSetName" --output text)
[cloudshell-user@ip-10-0-37-22 ~]$ for stack in ${sets[@]}
> do echo "[${stack}]: count " $(aws cloudformation list-stack-instances --stack-set-name ${stack} --query "length(Summaries[])")
> aws cloudformation list-stack-instances --stack-set-name ${stack} --query "Summaries[].{ID: StackSetId,Region: Region,Status: StackInstanceStatus.DetailedStatus}" --output table
> done
[guardduty-events-a]: count  17
--------------------------------------------------------------------------------------------
|                                    ListStackInstances                                    |
+----------------------------------------------------------+-----------------+-------------+
|                             ID                           |     Region      |   Status    |
+----------------------------------------------------------+-----------------+-------------+
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  ap-northeast-1 |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  ap-northeast-2 |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  ap-northeast-3 |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  ap-south-1     |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  ap-southeast-1 |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  ap-southeast-2 |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  ca-central-1   |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  eu-central-1   |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  eu-north-1     |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  eu-west-1      |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  eu-west-2      |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  eu-west-3      |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  sa-east-1      |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  us-east-1      |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  us-east-2      |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  us-west-1      |  SUCCEEDED  |
|  guardduty-events-a:6a47f5e8-e7cc-43d4-9d7a-9897cf55967e |  us-west-2      |  SUCCEEDED  |
+----------------------------------------------------------+-----------------+-------------+
[guardduty-events-b]: count  17
--------------------------------------------------------------------------------------------
|                                     ListStackInstances                                   |
+----------------------------------------------------------+-----------------+-------------+
|                             ID                           |     Region      |   Status    |
+----------------------------------------------------------+-----------------+-------------+
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  ap-northeast-1 |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  ap-northeast-2 |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  ap-northeast-3 |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  ap-south-1     |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  ap-southeast-1 |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  ap-southeast-2 |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  ca-central-1   |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  eu-central-1   |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  eu-north-1     |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  eu-west-1      |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  eu-west-2      |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  eu-west-3      |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  sa-east-1      |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  us-east-1      |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  us-east-2      |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  us-west-1      |  SUCCEEDED  |
|  guardduty-events-b:dc0aa4ea-6e25-4d61-a7d6-94cc4b6eb8f4 |  us-west-2      |  SUCCEEDED  |
+----------------------------------------------------------+-----------------+-------------+
…以下省略…

まとめ

CloudFormation StackSetsのエビデンスをAWS CLIでバッと取得するスクリプトを紹介しました。

主に未来の私に宛てたものです。役に立て!