はじめに
こんにちは、アプリケーションサービス本部 ディベロップメントサービス3課の北出です。
前回、こちらの記事 でControlTower を紹介しました。
引き続き、不慣れなOrganizationsやマルチアカウントを実務で扱っているため、初心者目線でマルチアカウント環境について勉強および紹介できればと思います。
今回は、AWS CloudFormation StackSets の紹介になります。
1. AWS StackSetsとは
AWS StackSetsは、複数のAWSアカウントやリージョンに対して、CloudFormationスタックを一括で展開・管理できるサービスです。
1.1 基本概念
- StackSet: 複数のアカウント・リージョンに展開するテンプレートの集合
- Stack Instance: 各アカウント・リージョンに実際に作成されるスタック
- Template: CloudFormationテンプレート(リソース定義)
1.2 なぜStackSetsが必要か
| 課題 | StackSetsによる解決 |
|---|---|
| 複数アカウントでの手動展開 | 一括自動展開 |
| 設定の不整合 | 統一されたテンプレート |
| 運用負荷の増大 | 集中管理 |
| ガバナンス統制 | 組織全体での標準化 |
2. 権限モデル(Permission Model)
2.1 セルフマネージド(Self-Managed)
特徴
- IAMロールを手動で設定
- 細かい権限制御が可能
- 設定が複雑
必要なロール
- 管理アカウント: AWSCloudFormationStackSetExecutionRole
- 対象アカウント: AWSCloudFormationStackSetAdministrationRole
使用場面
- 特定のアカウントのみに展開
- 細かい権限制御が必要
- AWS Organizations未使用環境
2.2 サービスマネージド(Service-Managed)
特徴
- 基本的にこちらが推奨
- AWS Organizationsと統合
- IAMロールの自動作成
- 設定が簡単
前提条件
- AWS Organizations有効
- 信頼できるサービスとしてStackSets有効
- 委任管理者の設定(オプション)
使用場面
- 組織全体への展開
- ガバナンス・コンプライアンス
- 運用の自動化
3. 主要パラメータ詳細
3.1 基本設定パラメータ
StackSet名とメタデータ
- StackSetName: “my-organization-stackset”
- Description: “組織全体のガバナンス設定”
- Tags:
- Key: “Environment”, Value: “Production”
- Key: “Owner”, Value: “Platform-Team”
権限設定
- PermissionModel: “SERVICE_MANAGED” # または “SELF_MANAGED”
- CallAs: “DELEGATED_ADMIN” # 委任管理者として実行
3.2 自動展開設定(AutoDeployment)
基本設定
- AutoDeployment:
- Enabled: true # 自動展開有効
- RetainStacksOnAccountRemoval: false # アカウント削除時にスタック削除
動作説明
- Enabled: true: 新しいアカウントが対象OUに追加された際、自動でスタックを展開
- RetainStacksOnAccountRemoval: false: アカウントがOUから削除された際、スタックも削除
3.3 展開制御パラメータ
同時実行制御
- OperationPreferences:
- MaxConcurrentPercentage: 100 # 最大同時実行率(%)
- MaxConcurrentAccounts: 10 # 最大同時実行アカウント数
- FailureTolerancePercentage: 10 # 失敗許容率(%)
- FailureToleranceCount: 2 # 失敗許容数
- RegionConcurrencyType: “PARALLEL” # リージョン同時実行タイプ
パラメータ説明
- MaxConcurrentPercentage: 対象アカウントの何%まで同時実行するか
- 100%の場合は全アカウントで同時にデプロイされる
- 25%の場合、100アカウントあると、最大で25アカウントまで同時にデプロイされる
- MaxConcurrentAccounts : %ではなく、アカウントの絶対数。%よりも優先される
- FailureTolerancePercentage: 何%まで失敗を許容するか
- RegionConcurrencyType:
- PARALLEL: 全リージョン同時実行
- SEQUENTIAL: リージョンを順次実行
3.4 対象設定パラメータ
組織単位(OU)指定
- DeploymentTargets:
- OrganizationalUnitIds:
- “ou-root-123456789” # ルートOU
- “ou-prod-987654321” # 本番環境OU
- AccountFilterType: “INTERSECTION” # または “DIFFERENCE”, “UNION”
- OrganizationalUnitIds:
アカウント直接指定
- DeploymentTargets:
- Accounts:
- “123456789012”
- “210987654321”
- Accounts:
リージョン指定
- Regions:
- “ap-northeast-1” # 東京
- “us-east-1” # バージニア北部
3.5 管理実行設定(ManagedExecution)
- ManagedExecution:
- Active: true # 管理実行有効
管理実行の効果
- スタック作成失敗時の自動ロールバック
- 部分的な失敗からの自動復旧
- より安全な展開プロセス
4. 実践的な設定例
4.1 ガバナンス設定の展開例
- StackSetName: “governance-tag-compliance”
- PermissionModel: “SERVICE_MANAGED”
- CallAs: “DELEGATED_ADMIN”
- AutoDeployment:
- Enabled: true
- RetainStacksOnAccountRemoval: false
- DeploymentTargets:
- Regions:
- OperationPreferences:
- MaxConcurrentPercentage: 100
- FailureTolerancePercentage: 10
- RegionConcurrencyType: “PARALLEL”
- ManagedExecution:
4.2 セキュリティ設定の段階的展開例
- StackSetName: “security-baseline”
- PermissionModel: “SERVICE_MANAGED”
- DeploymentTargets:
- OperationPreferences:
- MaxConcurrentPercentage: 50 # 慎重に50%ずつ
- FailureTolerancePercentage: 0 # 失敗許容なし
- RegionConcurrencyType: “SEQUENTIAL” # 順次実行
5. ベストプラクティス
5.1 設計時の考慮事項
権限モデルの選択
Service-Managed を推奨:
– AWS Organizations統合
– 自動権限管理
– 運用負荷軽減
Self-Managed が適している場合:
– 特定アカウントのみ対象
– 細かい権限制御が必要
– Organizations未使用
展開戦略
段階的展開を推奨:
1. 開発環境 → 2. ステージング → 3. 本番環境
同時実行制御:
– 重要度の高い設定: MaxConcurrentPercentage: 25-50%
– 一般的な設定: MaxConcurrentPercentage: 100%
5.2 運用時の注意点
失敗許容設定
重要な設定(セキュリティ等):
– FailureTolerancePercentage: 0 # 失敗許容なし
一般的な設定:
– FailureTolerancePercentage: 10 # 10%まで許容
モニタリング
必須監視項目:
– スタック展開状況
– 失敗したアカウント・リージョン
– ドリフト検出
– コンプライアンス状況
5.3 トラブルシューティング
よくある問題と対処法
| 問題 | 原因 | 対処法 |
|---|---|---|
| 権限エラー | IAMロール不足 | 必要な権限を付与 |
| リソース競合 | 既存リソースとの衝突 | テンプレート修正 |
| タイムアウト | 大量リソース作成 | MaxConcurrentを調整 |
| 部分失敗 | 一部アカウントでエラー | 失敗アカウントを個別調査 |
コメント