![[アップデート] CloudFormation StackSets が解約予定AWSアカウントをスキップできるようになった](https://devio2023-media.developers.io/wp-content/uploads/2022/08/aws-cloudformation.png)
[アップデート] CloudFormation StackSets が解約予定AWSアカウントをスキップできるようになった
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
どうも、ちゃだいん(@chazuke4649)です。
かなり地味アプデですが
AWS CloudFormation StackSets が解約予定の一時停止中(Suspendedな)AWSアカウントをスキップできるようになりました。
AWS CloudFormation StackSets skips suspended accounts for faster deployments
どういうこと?
具体的な変更点でいうと、CloudFormation StackSetsの各スタックインスタンスのステータスに、SKIPPED_SUSPENDED_ACCOUNT というステータスコードが新しく追加になりました。
| Stack instance status | Description |
|---|---|
| SKIPPED_SUSPENDED_ACCOUNT | 指定されたアカウントとリージョンでの操作は、操作時にアカウントが停止していたため、スキップされました。 |
引用元)StackSets concepts - AWS CloudFormation
実際にマネコンではこのように表示されます。

何が嬉しい?
一言でいうと、「解約予定のAWSアカウントのステータスが FAILED になるせいで、StackSetsの更新などが中断される問題が、ちゃんとより適したステータスコードによりスキップされるようになりました」(長い...)
本来無視してほしい解約予定アカウントによるStackSetsの失敗が回避されることにより、StackSets全体のデプロイメントが健全な状態を保ちやすくなりました。
StackSetsのオプションには「耐障害性」という設定で「何パーセントのスタックインスタンスが失敗したら、全体を中断するか」を指定することができます。要は解約予定のAWSアカウントがこの値に影響を与えることがなくなったといえそうです。
障害耐性
この設定は、ワークフローの作成、更新、削除で利用でき、各リージョンで発生する場合があるスタックオペレーションの失敗の最大数や割合を指定できます。この値を超えると、オペレーションは CloudFormation によって自動的に停止されます。
引用元)StackSets の概念 - AWS CloudFormation
ちなみに、今までの回避策としては、「当該AWSアカウントをそもそもStackSetsのスタックインスタンスから削除する方法」や、「StackSets対象外のOU(例:Suspended OU)に隔離する方法」などがあったかと思われます。それが今回より柔軟に(特に追加のアクション不要で)StackSets側が、いい感じにSuspendedなAWSアカウントを認識して勝手にスキップしてくれるようになった、というわけです。
試してみる
「耐障害性」を"0"に設定すると、「1つでもスタックが失敗したら全体を中断する」ことになります。その状態で、SKIPPED_SUSPENDED_ACCOUNT ステータスなスタックがあっても全体が中断されずに走り切ってくれるか確認します。
StackSetsの「ドリフト検出」も同様の挙動を見せるので、今回はドリフト検出で確認します。
FAILEDとSKIPPED_SUSPENDED_ACCOUNTがいる状態
正常なステータスSUCCEEDEDがほとんどでその中に、 FAILEDと SKIPPED_SUSPENDED_ACCOUNT が含まれている状態で、ドリフト検出を実行したところ、以下の通りドリフト検出自体も中断され FAILED となりました。

SKIPPED_SUSPENDED_ACCOUNTがいる状態
まず、FAILED ステータスのAWSアカウントをStackSets から削除しました。(※手順は割愛します)
それにより、SUCCEEDEDが多数でその中にSKIPPED_SUSPENDED_ACCOUNT だけが含まれる状態になりました。
再度、ドリフト検出を実行したところ、無事成功しました。

スタックインスタンス一覧を見ても、以下の通りSuspendedなAWSアカウント以外は、全てドリフトステータスが IN_SYNC に変更されました。

検証は以上です。






