AWS CloudFormationの最近の変更点

# AWS CloudFormationの最近の変更
AWS CloudFormationでは2023年末から2024年6月にかけて多くの改善・機能追加がありました。
特に下記は<b>「三大変更点」</b>と呼んでもいいかなと思います。

 1. [Gitと同期(Git Sync)](#1-git%E3%81%A8%E5%90%8C%E6%9C%9Fgit-sync-202311) (2023/11)
 1. [IaCジェネレーター](#2-iac%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%82%BF%E3%83%BC-202402) (2024/02)
 1. [オンラインエディタをデザイナーからApplication Clomposerへ変更](#3-%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%83%BC%E3%81%8B%E3%82%89application-clomposer%E3%81%B8%E5%A4%89%E6%9B%B4202403) (2024/03)

 また、『最近CloudFormationのデプロイが早くなった気がする』とか思っている人も多いと思います。下記の変更がアナウンスされています。
 
 4 [スタック作成を高速化](#4-%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E4%BD%9C%E6%88%90%E3%82%92%E9%AB%98%E9%80%9F%E5%8C%96-202403) (2024/04)
 
 スタックセットでも地道に変更があり、オプションが追加されています。
 
 5 [スタックセットで「同時実行モード」オプション追加](#5%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%82%BB%E3%83%83%E3%83%88%E3%81%A7%E5%90%8C%E6%99%82%E5%AE%9F%E8%A1%8C%E3%83%A2%E3%83%BC%E3%83%89%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E8%BF%BD%E5%8A%A0-202311) (2023/11)
 
他にも変更はありますが、CloudFormation色々変わったな、という方も上記を押さえておけば不安なく利用できると思います。
ということでこの５つの変更点をざっくり説明します。
>  続編 [AWS CloudFormationの最近の変更点 その2](/a-shiosalt/items/0965895b9b19a6bb0af8) を公開しました。
その２には「基本変わらないけどもちょっと便利になった変更箇所」を記載しています。

[関連本の説明](#%E9%96%A2%E9%80%A3%E6%9C%AC%E3%81%AE%E8%AA%AC%E6%98%8E)

## 変更点の説明
### [1. Gitと同期(Git Sync)](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/git-sync.html) (2023/11)
Gitリポジトリと連携する機能が提供されました。Gitリポジトリでテンプレートファイルを管理します。
テンプレート更新時は自動でCloudFormationのスタックを更新します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/71027bbe-c5bb-412e-6218-b9a9320b8868.png)
新規スタック作成時に設定も可能な他、既存のスタックをGitと同期させることも可能です。

Gitとの同期には「デベロッパー用ツール」の「[接続(Connections)](https://docs.aws.amazon.com/ja_jp/dtconsole/latest/userguide/welcome-connections.html)」機能を利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/3ed88d00-d463-4142-6c08-a8e853bbc931.png)
Gitと同期を利用する時は先に「接続」の設定が必要です。

Gitリポジトリで管理するスタックの情報は「デプロイファイル」にまとめられています。
```deploy-file-sample.yaml
template-file-path: 2-14-3-VPCEndPoints.yaml
parameters:
  mySecurityGroups: sg-0cf73bd245c9ff853
  myVPC: vpc-07d4bc315ce093c6d
  S3Interface: Yes
  S3InterfaceRouteTable: rtb-0ffd23f96afd0915c
tags:
  sampleTag: sample-sync
```
デプロイファイルはGitと同期を設定するウィザード中で作成することも、手動で作成して利用も可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/14354d10-f470-7096-7601-ff6fc2fa8212.png)
(出典: 詳解 AWS CloudFormation)

CloudFormationはGit側の更新検知し、変更セットの作成と実行を自動で開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/2d583375-693f-2180-6f89-7e91ea701919.png)
なおリリース当初は「接続」のarnサービス名は codestar-connectionsでしたが、2024/05よりcodeconnectionsに変更されました。（本には間に合わずcodestar-connectionsで記載しています。）

### [2. IaCジェネレーター](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/generate-IaC.html) (2024/02)
既存のAWSリソースからテンプレートを作成する機能が新しく提供されました。
作成したテンプレートは「IaC ジェネレーター」から表示できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/45113be4-abac-249e-2ab5-6a9f66d684b8.png)

またインポート機能も提供されており、CloudFormation以外で作成・設定したリソースをCloudFormationのスタックに取り込むインポート操作が簡単になりました。

IaCジェネレーターの利用には最初に「新しいスキャンを開始」の実行が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/b457f7c6-5555-53a8-e5ef-f5e73e4f3c82.png)
テンプレートは「テンプレートを作成」ボタンから作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/c2cc87ee-fe4a-9047-3063-4a292636b680.png)
途中でスキャンしたリソースが一覧で表示されます。選択するとそのリソースを基にテンプレートを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/75cf71e0-e551-1064-7d85-8947ced092e8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/a28e91fb-531e-5180-8c3b-cfe2a5acdd93.png)

インポート機能を使うと、テンプレート作成時に選択した既存リソースをインポートすることができます。
IaCジェネレータのテンプレート詳細画面「スタックにインポート」ボタンから開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/224d90fd-0a74-090f-5490-ca809e22612f.png)
インポートには変更セットを使用しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/87391206-566f-f67c-5416-60c03435be12.png)

IaCジェネレータでテンプレートを作成・インポート可能なリソースタイプは下記に公開されています。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/generate-IaC-supported-resources.html


### 3. オンラインエディタを[デザイナー](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer.html)から[Application Clomposer](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/app-composer-for-cloudformation.html)へ変更(2024/03)
Application Composerはテンプレートファイルを作成・編集する機能です。
キャンパスビューとテンプレートビューで表示できます。

キャンパスビューはテンプレートの内容を図で表示します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/237936fc-64ce-0f37-b046-77ed4432fe27.png)

テンプレートビューはテンプレートをテキストで表示・更新できます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/3d75bab8-2501-ef91-619d-d14b09cb6cac.png)

Application Composerは元々AWS SAMテンプレートファイルを作成するツールとして提供されていました。
2024年3月より「[CloudFormationコンソールモード](https://aws.amazon.com/about-aws/whats-new/2024/03/aws-cloudformation-console-visualization-stacks-application-composer/) 」が追加され、CloudFormationスタック作成・更新のウィザードと連携が可能となりました。

以前は下図の「デザイナー」が連携されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/95d49a2b-c886-f25f-b2a4-9459fbc111ad.png)

Application Composerは単独で起動できるほか、スタックの作成ウィザードなどからも利用可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/750f5557-cb9d-2f2f-4db2-9e715cf3e601.png)

以前のデザイナーも同様に利用することができました。下記は以前の画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/5099dd2f-e622-2408-ed61-a3c0b0bd5922.png)

Application Composerは「CloudFormationコンソールモード」リリース後の2024年5月にも更新があり、「検証」ボタンの追加やテンプレート保存先バケット指定の改善が行われています。（本には間に合わずリリース初期画面で説明）


### 4. スタック作成を高速化 (2024/03)
2024/03の変更でスタック内の複数リソース間で依存がある時、[結果整合性チェック(Eventual consistency check)完了を待たずに依存するリソースの作成を開始](https://aws.amazon.com/jp/blogs/news/how-we-sped-up-aws-cloudformation-deployments-with-optimistic-stabilization/)するようになりました。
これによりスタック作成・更新の完了が最大40%速くなると説明されています。（但し失敗時は、逆に待ち時間が長くなる可能性があります。）

これとは別に、テンプレートのチェックも改善され、最初のリソースを作成する前に検証し、無効な設定がある場合は作成前に[エラーメッセージで終了するように変更](https://aws.amazon.com/jp/about-aws/whats-new/2024/03/aws-cloudformation-new-validation-checks-stack-operations/)されました。

どちらも操作に変更はありません。
また2024/04にWebマネジメントコンソールにも変更が入り、スタックのイベントタブに[「詳細ステータス」項目が追加](https://aws.amazon.com/about-aws/whats-new/2024/04/aws-cloudformation-changesets-enhanced-change-visibility-deployments/) されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/5e487986-3d40-d6b4-fe55-f3d447857e4e.png)
詳細ステータスにはCONFIGURATION_COMPLETEが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/cc5cc7a0-e248-ff4b-2ba6-8e4135966c4a.png)

なお、CONFIGURATION_COMPLETEは必ず表示されるわけではありません。
表示された場合は、結果整合性チェック完了を待たず依存するリソースを作成開始することを表しているようです。

（参考：変更前のイベントタブ。「詳細ステータス」欄がありません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/a12c1f54-c35b-e3f5-75e5-21d54b34e5b3.png)

### 5.スタックセットで「同時実行モード」オプション追加 (2023/11)
スタックではなくて、スタックセットの変更です。
スタックセットのデプロイオプションに「同時実行モード」オプションが追加されました。
「厳格な耐障害性」か「ソフト障害耐性」が選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/5a24a5be-4424-42e9-90be-f50f6719650d.png)
デフォルトは厳格な耐障害性です。
「厳格な耐障害性」を選ぶと、「同時アカウントの最大数」か「障害耐性 +1」の小さい方の数でデプロイを開始し、失敗が発生すると動的に同時に実行するデプロイ数を減らします。
「ソフト障害耐性」は「同時アカウントの最大数」で開始し、同時実行数は変更しません。

## 関連本の説明
マイナビ出版様から<b>「CloudFormationの辞書として使える本」</b>を目指して[「詳解 AWS CloudFormation」](https://book.mynavi.jp/ec/products/detail/id=143664)を出版しました。

https://book.mynavi.jp/ec/products/detail/id=143664

[Amazon](http://www.amazon.co.jp/o/ASIN/483998588X/mynavibooks-22/)、[Yodobashi](https://www.yodobashi.com/product/100000009003849795/)、[マイナビ出版](https://book.mynavi.jp/ec/products/detail/id=143664)

6月に出版だったため、ぎりぎりまで原稿を修正することになりましたが、4月の変更までは反映できています。

5月以降の変更で、本に反映できなかったものは下記などがあります。
 - DeleteStack APIにDeletionModeの追加 (2024/05)
 - AWS CloudTrail 統合 (2024/05)
 - スタックの作成・更新ウィザードのエラー表示変更 (2024/06?)
 
~~こちらは後日説明するつもりです。~~ [AWS CloudFormationの最近の変更点 その2](/a-shiosalt/items/0965895b9b19a6bb0af8)に併せて記載しました。