こんにちは、CTOのsakasaiです。
今年もAWS re:Inventが開催中ですね。みなさんアップデートのチェックが大変だと思います。
自分はXのタイムラインを軽く眺めつつ、気になったやつだけちょっと見るくらいにして、あとはこちらでまとめてチェックしようと思っています。
AWS Black Belt Online Seminar 2023 年 AWS re:Invent 速報
というわけで、早速気になったものがあったのでチェックしつつ、試してみました。
こちら
AWS CloudFormation introduces Git management of stacks
AWS CloudFormation スタックがGitと同期できるようになりました。
テンプレートをGitリポジトリで管理して、更新(プッシュ)されたときに自動でデプロイすると言ったワークフローに取り入れることができるようになります。
発表時点ではGitHub, GitHub Enterprise, GitLab, Bitbucket のリポジトリがサポートされているようです。
Working with AWS CloudFormation Git sync
Automate safe AWS CloudFormation deployments from GitHub
早速、やってみます。
事前にGitHubにリポジトリを準備しておきます。
またCloudFormationのテンプレートは以下を使用します。(S3バケットを1つ作るだけの単純なものです)
AWSTemplateFormatVersion: 2010-09-09
Parameters:
MyBucket:
Type: String
Description: S3 bucket name
Resources:
S3Bucket:
Type: 'AWS::S3::Bucket'
Properties:
BucketName: !Sub '${MyBucket}'
最初にAWSマネージメントコンソール上でCloudFormationスタックを作成します。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/スクリーンショット-2023-11-27-23.25.47-1024x771.png)
テンプレートの指定で「Gitから同期」を選択して次へをクリックします。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/スクリーンショット-2023-11-27-23.25.56-1024x771.png)
任意のスタック名を入力して、今回リポジトリにまだ何もおいていない状態なので「次のパラメータを
使用してファイルを作成し、リポジトリに配置します。」を選択します。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/スクリーンショット-2023-11-27-23.30.43-1024x483.png)
テンプレート定義リポジトリでこちらも初めてなので「Gitリポジトリをリンクする」を選択し、プロバイダーにGitHubを選択します。
GitHubへの接続もないため「新しい接続を作成する」のリンクをクリックして作成し、この画面に戻って作った接続名と接続先のリポジトリ、ブランチを選択します。
デプロイファイルのパスを入力し、IAMロールを作成します。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-48-1024x887.png)
デプロイファイルパラメーターでテンプレートファイルパスを入力し、今回S3バケット名をパラメータとして渡したいので、キーと値を設定し次へをクリックします。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-50-1024x606.png)
次の画面ではスタックオプションの設定でIAMロールを選択し、次へ
最後に確認してスタックを作成します。
正常に作成されると同期が開始されます。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-51-1024x809.png)
しばらく待つとエラーになりました。
ファイルがないと怒られているようです。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-52-1024x984.png)
ここでGitHubを見てみるとプルリクが作成されていました。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/スクリーンショット-2023-11-27-23.49.24-952x1024.png)
差分を見ると、以下のようにdeployment.yamlがプッシュされているようなのでマージします。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-54-1024x246.png)
しばらく待つとまた同期が開始され今度は以下のエラーが出ました。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-55-1024x1010.png)
template.yamlが無いと怒られているようですが、今回はGitHubにプルリクが作られているわけではなかったので、GitHubにtemplate.yaml(最初に記載したS3バケットを作成するテンプレートを記述)を作成しプッシュします。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/スクリーンショット-2023-11-27-23.52.58-1024x135.png)
しばらくすると再度同期が開始され
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/スクリーンショット-2023-11-27-23.53.19-986x1024.png)
問題なければ正常に終了します。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-56-1024x968.png)
S3バケットも作成されていました。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-57-1024x576.png)
※今回スタック作成時にスタックオプションで設定したIAMロールに権限(S3アクセス)が足りず一度エラーになりました。エラーになった場合はエラーの内容を見つつ、その辺を疑ってみてもいいかもしれません。
新規作成の正常終了を確認できたので、次にテンプレートを変更して同期されるか確認してみます。
以下のように変更しました。
AWSTemplateFormatVersion: 2010-09-09
Parameters:
MyBucket:
Type: String
Description: S3 bucket name
Resources:
S3Bucket:
Type: 'AWS::S3::Bucket'
Properties:
BucketName: !Sub '${MyBucket}-12345'
最初に作ったS3バケット名の後ろに-12345
が付く形です。
この変更をGitHubにプッシュしてしばらくすると同期が開始されます。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-58-1024x729.png)
しばらく待つと正常終了し、
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-59-1024x973.png)
S3バケット名が変わりました。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-61-1024x584.png)
今回のテンプレートでは元のS3バケットが残っているということもなさそうです。
![](https://www.d-make.co.jp/blog/wp-content/uploads/2023/11/image-62-1024x227.png)
さいごに
AWS CloudFormationスタックのGit同期を確認できました。
AWS環境構築時に、ちょっとしたものだと一旦CloudFormationでテンプレートを作ってデプロイしたけどそのまま放置、といったような感じで運用されていることもあると思いますが、今回のアップデートで最初にGit同期を設定しておけばある程度その後の運用や自動化がしやすくなりそうな感じがしました。