はじめに
2023年のRe:inventにて登場したgit sync。CloudFormationとスムーズな接続ができる魅力的な機能です。社内の開発で導入しようと思いましたが、先輩方と相談しながら検討した結果、要件に合わず導入を諦めることになりましたので、その理由を記載したいと思います。
↓ Git Sync追加のアナウンス
Git Syncとは
GitHub、GitHub Enterprise、GitLab、BitbucketからCloudFormationに接続できる仕組み。
テンプレートまたはデプロイファイルへの変更をコミットすると、CloudFormation はスタックを自動的に更新します。これにより、プルリクエストとバージョントラッキングを使用して、一元化された場所から CloudFormation スタックの設定、デプロイ、更新を行うことができます。
検討から諦めまで
今回Git Syncの導入を検討していたのは、GitHubで管理しているIAMリソースを複数のAWSアカウントに展開する自動デプロイの開発です。
Git Sync → CloudFormation StackSets
具体的には、GitHubで管理しているIAMのコードが更新されたら、CloudFormation StackSets(以下、StackSets)で複数のアカウントに展開するというアーキテクチャの中で使用を検討していました。
しかし、2024年6月20日現在、Git Syncは、Gitから直接StackSetsへは接続できないことが分かりました。
Git Sync → CloudFormationスタック → CloudFormation StackSets
ただ、Git SyncとStackSetsの間に、StackSets用のCloudFormationスタックを作ることで、Git Syncの利用は可能とのことでした。
しかし、それだと、StackSetsを作るCloudFormationスタック用のCloudFormationテンプレートと、そのテンプレートを置くS3バケット1が必要になります。そして、そのS3に置くテンプレートもGitHub管理であれば、GitHub Actionsが必要になります。このように、Git Syncを実現するために、もう一つGitの接続が必要という、やや無理やりな実現方法になってしまいます。
各AWSアカウントにGit Syncする
それを受けて、IAMを展開したい複数のアカウントそれぞれにCloudFormationスタックとGit Syncを作るのはどうかという案が出ました。しかし、その案には2つの懸念点がありました。
①新AWSアカウントを作成するたびに、git syncを作成する必要がある
定期的にAWSアカウントが増加する弊社には作業コストが高いと考えました。
②git syncの成功を各アカウントで管理しなくてはいけない
この案だと、git syncの成功はデプロイ先の各アカウントを見に行かないと確認できません。複数アカウントへのデプロイの結果確認を一元的に行いたい場合、他のサービスを使わなければならず、不便だと考えました。
最終的には?
セキュリティと管理リソースの少なさを鑑みて、GitHub → CodePipeline → StackSets となりました。
Git Syncはどういう要件に合う?
以上の検討を経て、今現在のGit Syncは以下の要件に合うのでは?と思います
- GitとCloudFormationスタック1対1の接続
- 複数のアカウントの場合
- 基本は他の手段のほうがいい
- 各アカウントでそれぞれgit syncを接続しても、git syncの実行結果を一元的に確認できないので不便。
- 各アカウントにそれぞれ接続でOK or 複数アカウントの数が少なく、増加の予定もない、などならありかもしれない?
- 基本は他の手段のほうがいい
以上です。ありがとうございました。
-
S3バケットではなく直接TemplateBodyを指定しても良いのですが、使用したいテンプレートが制限である51200文字を超えていたので、弊社のケースではできなそうでした。 ↩