Amazon Web Services ブログ

AWS CloudFormation Git 同期を使用してお客様アカウントのリソースを構成する

本稿は、2024 年 8 月 22 日に AWS DevOps & Developer Productivity Blog で公開された “Use AWS CloudFormation Git sync to configure resources in customer accounts” を翻訳したものです。

AWS パートナーは、お客様のアカウントにクロスアカウントロールなどのリソースを作成する必要があることが多くあります。これらのリソースを一貫して プロビジョニングするのに適した選択肢は、AWS CloudFormation です。これは、JSON または YAML で記述されたテンプレートファイルでアーキテクチャを指定できる Infrastructure as Code (IaC) サービスです。また、CloudFormation には StackSets という機能があり、複数のリージョンとアカウントに並列でリソースをデプロイできます。この機能は、マルチアカウント戦略を採用するお客様にとって非常に価値があります。

パートナーにとっての課題は、テンプレートをお客様に提供する適切な手法を選択し、変更や追加が必要になった際にデプロイされたリソースを更新する方法を決めることです。CloudFormation では、クイック作成リンクを使ってテンプレートに基づいてスタックを 1 クリックで起動できる簡単な体験を提供していますが、後日スタックを自動的に更新する方法は提供していません。この記事では、CloudFormation Git 同期機能を使用して、パートナー定義のリソースをアカウントにデプロイする際に、お客様に最大限の制御と柔軟性を与える方法について説明します。

CloudFormation Git 同期を使用すると、Git リポジトリへの接続を構成し、選択したブランチの変更を監視できます。テンプレートファイルに変更をプッシュするたびに、スタックのデプロイが自動的に行われます。これは、AWS CodePipeline のようなサービスを使用して完全な CI/CD パイプラインを設定するよりも簡単で強力な自動化機能です。Git リポジトリを運用する際の一般的な方法として、オリジナルのリポジトリをフォークすることがあります。フォークとは、オリジナルのリポジトリのコピーを自身のGitアカウントに作成することです。この自身のフォーク先リポジトリは完全に自分でコントロールできます。フォーク先リポジトリで、ソースコードを変更したり、オリジナルのリポジトリ(アップストリームリポジトリ)から変更を取り込んでマージしたりと、柔軟に対応できます。

A diagram showing a partner repository, a customer ’ s forked repository, and a stack with Git sync enabled

パートナーのリポジトリ、お客様のフォークされたリポジトリ、そしてGit同期が有効になったスタック

上の図では、左側に AWS パートナーの Git リポジトリが表されています。このリポジトリには、パートナーが最新バージョンの CloudFormation テンプレートを保持しています。お客様アカウントで必要なリソースの要件が変わるにつれて、このテンプレートも変更される可能性があります。中央には、テンプレートのコピーを保持するお客様のフォークされたリポジトリがあります。お客様はテンプレートをカスタマイズできます。また、パートナーからのアップストリームの変更をフェッチおよびマージすることもできます。これは、自分が所有するアカウントでリソースが作成または変更されるときに、細かな制御と内部レビューを行いたいお客様にとって重要な考慮事項です。右側はお客様アカウントで、リソースがプロビジョニングされる場所です。AWS CodeConnections を介して Git 同期が構成された CloudFormation スタックは、フォークされたリポジトリにマージされた変更をすべて自動的にデプロイします。

GitHub の公開リポジトリをフォークした場合、たとえプライベートの GitHub Organization 内であっても、その仕様上公開されたままになることに注意してください。そのため、環境ファイルやアクセスキーなどの機密情報は、フォークされたリポジトリや公開リポジトリにコミットしないでください。

別の一般的なシナリオは、一度に複数のお客様アカウントでリソースを作成することです。多くのお客様が マルチアカウント戦略 を採用しており、これにはワークロードの分離、アカウントサービスクォータの枯渇からの保護、セキュリティ境界の範囲設定などの利点があります。一部のアーキテクチャでは、マイクロサービスごとに (開発、ステージング、プロダクション) の標準的なアカウントセットが必要とされ、数百または数千のアカウントを運用するお客様もあります。CloudFormation StackSets はこの問題を解決します。CloudFormation テンプレートに StackSets を記述し、デプロイ先のアカウントまたは組織単位を構成すると、CloudFormation サービスがターゲットのアカウントまたはリージョンごとに一貫してリソースをインストールする作業を行います。StackSetsは CloudFormation テンプレートで AWS::CloudFormation::StackSet リソースタイプを使用して定義できるため、同じ Git 同期ソリューションをこのシナリオで使用できます。

A diagram showing a customer ’ s forked repository and a stack set being deployed to multiple accounts.

お客様のフォークされたリポジトリと、複数のアカウントにデプロイされる StackSets

上の図では、右側のアカウントは任意の数にスケールでき、それらのアカウント内で複数のリージョンにデプロイすることもできます。お客様が AWS Organizations を使用してそれらのアカウントを管理している場合、設定はより簡単になり、新しく追加されたアカウントにはスタックで定義されたリソースが自動的に展開されます。パートナーが元のソーステンプレートを変更すると、お客様は同じフェッチとマージのプロセスに従って自動 Git 同期デプロイを開始できます。このようなデプロイで Git 同期を使用する場合は、TemplateBody パラメータを使用して子スタックのコンテンツを親テンプレートに埋め込む必要があることに注意してください。(訳者注: 通常、AWS::CloudFormation::Stack リソースの TemplateURL プロパティを使い S3 などに保存した子テンプレートを参照できますが、Git 同期を利用する場合は、CloudFormation が Git リポジトリのファイルをテンプレートとして直接取得することはできないため、TemplateBody パラメータを使用して親テンプレートの中に子テンプレートの内容を埋め込む必要があります。)

結論

この投稿では、パートナーとお客様が協力してお客様のアカウント内にリソースをインストールおよび構成する便利で制御可能なアーキテクチャオプションを紹介しました。AWS CloudFormation Git 同期と CloudFormation StackSets を併用することで、Git をオペレーションコントロールの基盤として利用し、スケーラブルかつ一貫した方法で更新をロールアウトできます。

Eric Z. Beard

Eric は AWS の CloudFormation チームのメンバーで、ソフトウェアエンジニア、ソリューションアーキテクト、デベロッパーアドボケイトとしての豊富な経験を持っています。DevOps や Infrastructure as Code、コンプライアンス、セキュリティーなどのトピックについて、AWS re:Invent などのイベントで頻繁に講演しています。お客様のクラウドアプリケーション設計をサポートしていない時は、テニスコートやジム、ヨガスタジオ、あるいはアメリカ西海岸の自然の中を散歩しています。

翻訳は Partner Sales Solutions Architect 福井 敦が担当しました。