こんにちは、櫻井です。
この記事はCloudFormation(以下CFn)を使ってIaCを始めてみたい、マルチアカウントへのデプロイを効率化したい、手作業でのデプロイによるトラブルの回避をしたい。などを考えている方向けの記事です。
CFnのStackSetsを使ったデプロイをするための準備として、管理者アカウント(CFnのStackSetsを実行する側)の設定とターゲットアカウント(デプロイしたいアカウント)の設定があるので、順を追って説明していきます。
目次
今回触れること、触れないこと
触れること
- StackSetsを使うための準備
- StackSetsを実行する方法
触れないこと
- StackSetsでデプロイするオブジェクトの詳細(後日紹介予定です)
- StackSetsの概念
詳しいStackSetsの概念について知りたい方は、公式ドキュメントを参考にしてみてください。
StackSetsを使うための準備
マルチアカウント・マルチリージョンにデプロイするためには、信頼関係、実行権限などのロールを作る必要があるので、まずはそこから作成していきます
ロールを作成するためのCFnテンプレートを作成する(管理者側)
CFnを使って、管理者アカウントがターゲットアカウントに対してデプロイするために必要な信頼関係、実行権限を持つロールを作成していきます。
お好みのエディタを使って以下のテンプレートを作成してください。
※今回はYAMLで記述していますが、JSONで記述することも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
AWSTemplateFormatVersion: 2010-09-09 Resources: AdministrationRole: Type: AWS::IAM::Role Properties: RoleName: GFManagementStackSetAdministratorRole AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: cloudformation.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: GFManagementStackSetAdministratorRolePolicy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - sts:AssumeRole Resource: - "arn:*:iam::*:role/GFManagementStackSetExecutionRole" |
作成したテンプレートからロールを作成する(管理者側)
テンプレートの作成が出来たら、マネジメントコンソールからスタックを作成していきます。
今回説明をしていない点についてはデフォルトで作成しています。
- CFn → スタックを選択し、「新しいリソースを使用」を選択する
- テンプレートの準備完了を選択し、先程作成したテンプレートを選択する
数十秒ほど待ち、更新をして以下のようになっていればOK
これでターゲットアカウントに対しての信頼関係と、実行権限を持つロールを管理者アカウントに作成することが出来たと思うので、確認してみます。
- 作成したスタックの名前を選択します。
- リソースタブに移動し、物理IDを選択してください。
- CFnのテンプレートから作成したロールが確認できればOK
StackSetsのデプロイを受け入れるためのロールを作成する(ターゲット側)
ターゲットアカウントでの作業になるので、管理者アカウントからサインアウトし、ターゲットアカウントでサインインしておいてください。
以下のテンプレートを先程と同様の手順で作成してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
AWSTemplateFormatVersion: 2010-09-09 Resources: ExecutionRole: Type: AWS::IAM::Role Properties: RoleName: GFManagementStackSetExecutionRole AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: AWS: - 601056942533 #管理者アカウントのID Action: - sts:AssumeRole Path: / ManagedPolicyArns: - !Sub arn:${AWS::Partition}:iam::aws:policy/AdministratorAccess |
先ほどと同様の結果が得られていればOKです。
これでStackSetsを使うための準備が整ったので、次は実際にマルチアカウント・マルチリージョンへのデプロイをしていきます。
StackSetsを実行する
再度管理者アカウントでの作業になるので、ターゲットアカウントからサインアウトし、管理者アカウントでサインインしておいてください。
こちらも先程と同様に、触れていない点についてはデフォルトで作成しています。
- CFn → StackSetsを選択し作成を選択
- 先程作成したロールを選択する
- 配布したいテンプレートを選択する
- 配布したいアカウントのIDを入力する
- リージョンを選択する
- 設定項目を確認して作成する
- 作成が確認できたら、ターゲットアカウントにログインし、作成がされていることを確認する。
無事マルチアカウント・マルチリージョンに対してデプロイする事ができました。
まとめ
今回はCloudFormationを使った複数アカウント、複数リージョンに対するデプロイ方法についての紹介をさせていただきました。
インフラをコード化しておくことでのメリットは非常に多いので、ぜひCloudFormationを使ってみてください。
一緒に働く仲間を募集中!
ギークフィードではAWSエンジニアを募集しています。
興味がある方はこちらからエントリーをしてぜひ一緒に働きましょう!
- 特定の時間あたりのlambda実行数をSlackに通知する - 2023-12-23
- 公衆電話からでも使える電話帳サービスをLEX + AmazonConnectで作ってみた - 2023-12-19
- SQSを使ってlambdaを10秒ごとに定期実行する - 2023-12-14
- Slack と AWS の電話番号登録アプリ – Bolt + CDK ソースコード解説 - 2023-03-26
- SlackとAWSを組み合わせた電話番号登録アプリの開発 – Boltフレームワーク+CDKで作ってみた - 2023-03-26