MEGAZONEブログ
Multi-account and multi-Region deployments at scale
マルチアカウント、マルチリージョンの大規模デプロイ
Pulisher : Cloud Technology Center チュ・ジェビン
Description : AWS Organizationsと一緒に、マルチアカウント、マルチリージョンデプロイ時に考慮できるツールオプションとCDK PipelinesとCodeCatalystについて学ぶセッション
はじめに
コンプライアンスイシューでマルチアカウント、マルチリージョン環境を構築する顧客が多いです。 このような方式はAWS Well-Architected Frameworkでも推奨されていますが、アカウントの脅威に陥ったり、リソースのリミットに達した時、それらを避ける方法はより多くのアカウントやリージョンを使うことになります。 また、ステージ区分(dev, stage, production)のための区分になる場合も多いです。
顧客はこのようなアーキテクチャが実装されるべきであることは同意しますが、インターネット上でOpinionedコンテンツを見つけるのが難しいので、発表者がこのセッションを準備したそうです。
アジェンダは以下の通りです。
・マルチリージョン、マルチアカウント展開とは?
・実務習得の教訓
・ツール
・導入事例
・質問タイム
プラットフォームリソースとワークロードリソース
プラットフォームリソースとは、さまざまなワークロード(異なるアカウントに存在する場合もあります)を実行するためのプラットフォームとして使用されるリソースを指します。例えば、一元化されたロギングを実装するには、すべてのアカウントに中央ロギング施設と連携するためのサービスを配置する必要があります。組織内のすべてのアカウントに同じタイプのリソースを一度に配布するには、どのようにすればよいかを考える必要があります。 これをブートストラップと呼びます。
ワークロードリソースとは、文字通り一つのワークロードに従属したリソースであり、ワークロードに合わせて配置と構成されます。IaCツール – 例えば、CDK、CloudFormation、Terraform、CDK Pipelines、CodePipeline、ControlTowerなどのツールでこれらのリソースを配置できることをセッションで説明します。
デプロイフロー
プラットフォームエンジニアはアカウントごとにプラットフォームリソースを構成します(ブートストラップ)。このプラットフォームが用意された後、その上に開発者が必要とするワークロードリソースを様々なツールで配布することができます。 図では、AWS CodeCommitとAWS CodePipeline、そしてCodeCommit、CodeBuild、CodeDeployオーケストレーションのうち必要な権限認可を担当するIAMの役割が表示されています。
AWS Organizations와 CloudFormation StackSets
アカウントがさらに増えたとします。AWS OrganizationsとAWS CloudFormation StackSetsを冬期化することで、プラットフォームエンジニアはAWS Organizationsに含まれるアカウント(組織IDを指定)に対して、順次/並列にプラットフォーム展開を実現することができます。
CDK Pipelines
CDK PipelinesはAWS CodePipelineパイプラインを簡単に設定することができます。Cdkでconstructは配布するAWSリソースを指定するライブラリモジュールです。CDK Pipelineもconstructの一種であり、デプロイパイプラインを自動でセットアップしてステージ設定が可能です。
開発者はパイプラインをステージごとに配置するように指定することになりますが、拡大した画像でベータとガンマステージを構成しています。
CodeCatalystは、CDK Pipelinesよりもさらにシンプルに抽象化されたパイプラインモデルです。ワークフローのビルディングブロックと言えるActionにはいくつかのタイプがあります。CodeCatalystはデスティネーションアカウントまで接続され、そのポイントにCDK、CloudFormation、CodeBuildなどを活用したリソースの配布を行うことができます。
各ステージとアサインするIAMロール間のマッピングを指定することで、接続アカウントが変化します。
CodeDeployサービスでデプロイ実行に関する他アカウント内の役割をAssumeできるIAMの役割をCodePIpelineに付与することで、CodePipelineでステージ別アカウントに配置されたCodeDeployと連携してデプロイを達成する構造を示す図表です。
このセッションで一番注目した図表ですが、StackSetでマルチアカウント、マルチリージョンデプロイを実行する時、次のようになります。
・対象アカウントとリージョン:各ステージで何個のアカウントとリージョンにデプロイする必要があるか。
・デプロイ戦略:ロールバック戦略、デプロイ戦略が必要か。
・検証内容:ベイクタイム(デプロイ完了を確認する前に待つ時間)、ヘルスチェック、メトリックモニタリング、統合テストの実施有無など
上記のような内容を具体的にガイドしてくれているので、この図表に込められたインサイトについて追加研究時間が必要だと思います。
セッションを終えて
今回のセッションでは、AWS Organizationsと一緒にマルチアカウント、マルチリージョン展開時に考慮できるツールオプション、比較的馴染みのないCDK PipelinesとCodeCatalystまで含めて説明しました。
二人の発表者が質疑応答を熱心に進めてくれたセッションですが、私もCloudFormation StackSetに関する質問をして別添します。
Q. CloudFormation StackSetでマルチアカウントに配置した各スタックからOutputを一度にまとめる方法はありますか?
A. [確認が必要] この場合、CloudFormationスタックでStackSet配布を定義するCloudFormationスタックを作成し、そのStackSetリソースのOutputを参照することができるでしょう。 ただし、この機能はまだ知られていないようです。OutputはAccountIDがキーとして含まれるマッピングの形になると思います。