AWS CloudFormation StackSets:大規模環境のデプロイを「神の視点」で制御する方法
こんにちは。インフラの世界へようこそ。
もしあなたが今、数百のアカウントを持つAWS環境の構築を任されているなら、一度は「一斉にデプロイして、設定ミスで全滅した」という悪夢を想像したことがあるかもしれません。
CloudFormation StackSetsは、まさにその「悪夢」を「安定したルーチン」に変えるための強力な武器です。しかし、ただ使うだけでは不十分。今日は、現場のSREが必ず直面する「並行デプロイの制御」という深淵に踏み込み、あなたのインフラを鉄壁にするための設計術を伝授します。
—
1. StackSetsとは何か?:中央集権的な統治の要
StackSetsは、「1つのテンプレートを、組織内の複数のアカウントとリージョンに一気に展開する」ための機能です。
通常、CloudFormationは「1つのアカウント・1つのリージョン」が単位ですが、StackSetsを使えば、管理アカウント(親)からメンバーアカウント(子)へ、指示を飛ばすだけで全環境を同期できます。
- 役割: 組織全体にガードレール(IAMポリシーやConfigルールなど)を一律適用する。
- メリット: 手動操作による「構成ドリフト(設定のズレ)」を物理的に根絶できる。
—
2. 安全なデプロイの鍵:制御パラメーターの真実
ここが本日の核心です。大規模環境では、全ての対象アカウントに対して「同時に」デプロイを走らせるのは自殺行為です。通信エラーやAPI制限(スロットリング)にぶつかり、デプロイが中途半端に失敗します。
ここで重要になるのが `DeploymentPreferences` です。
制御すべき2つの数値
1. `MaxConcurrentCount`(最大並行数):
一度にデプロイを走らせるアカウントの数。ここを高くしすぎるとAPI制限に、低すぎると完了まで時間がかかりすぎます。
2. `FailureToleranceCount`(失敗許容数):
「何アカウントまで失敗してもデプロイを続行するか」の閾値。通常は「0」にすべきです。 1つでも失敗が許されないクリティカルな設定なら、即座に停止させるのが原則です。
—
3. 実践:安全なHelloWorldデプロイ
まずは、小さな規模で「制御」を体感しましょう。AWS CLIを使って、安全なロールアウトを指示する例です。
2つのアカウントに対して、1つずつ安全にデプロイを行うコマンド例
aws cloudformation create-stack-instances \
–stack-set-name “SecurityGuardStack” \
–accounts ‘[“123456789012”, “987654321098”]’ \
–regions ‘[“ap-northeast-1”]’ \
–operation-preferences \
“MaxConcurrentCount=1,FailureToleranceCount=0” \
–operation-id “deploy-v1-$(date +%s)”
この設定の意図(SREの視点)
- `MaxConcurrentCount=1`: 確実に1つずつ処理させることで、万が一エラーが出ても「最初のアカウント」で止まり、被害を最小限に抑えます。
- `FailureToleranceCount=0`: 「1つでもコケたら自動停止」という強い制約です。曖昧さを排除するのがIaCの鉄則です。
—
4. 現場で震えるほど役立つ「設計の極意」
初心者を卒業し、プロの設計者になるために、これだけは覚えておいてください。
① 「バッチサイズ」を意識する
アカウント数が増えてきたら、`MaxConcurrentCount`ではなく `MaxConcurrentPercentage`(割合)を使いましょう。
例えば、`MaxConcurrentPercentage=10`にすれば、全対象の10%ずつデプロイが進行します。インフラの規模が100アカウントになっても、コードを書き換える必要はありません。
② 冪等性(べきとうせい)を死守する
StackSetsを使うなら、テンプレートは「何度実行しても同じ結果になる」ように書いてください。
`Parameters`をハードコードせず、`AWS::AccountId`や`AWS::Region`といった擬似パラメーターを最大限活用しましょう。これができていれば、デプロイの失敗を恐れる必要はなくなります。
—
最後に:失敗は怖くない
初めてStackSetsを使うとき、多くの人が「デプロイ失敗」を恐れます。ですが、失敗を恐れて手動操作に戻ることこそが最大のリスクです。
「失敗しても、自動的に止まる。そして、修正して再度実行すれば元通りになる」
この状態こそが、IaCの完成形です。まずは小さなテンプレートから、今日学んだ `MaxConcurrentCount` を制御して、自動化の快感を味わってください。
インフラをコードで統治する。この感覚を身につければ、あなたの毎日は劇的に楽になり、より創造的な仕事に集中できるようになりますよ。応援しています。