AWS CloudFormationの最近の変更点 その2

## その２．ちょっと便利になった変更
[前回](/a-shiosalt/items/573086bfcf3b6347e639)の「三大変更点」ほかに引き続き、CloudFormationの変更点を記録しておきます。

前回は[Gitと同期](/a-shiosalt/items/573086bfcf3b6347e639#1-git%E3%81%A8%E5%90%8C%E6%9C%9Fgit-sync-202311)など新規追加機能を説明しました。
今回は、基本変わらないけどもちょっと便利になった変更箇所です。

1. [「根本原因を検出」ボタン追加](#1%E6%A0%B9%E6%9C%AC%E5%8E%9F%E5%9B%A0%E3%82%92%E6%A4%9C%E5%87%BA%E3%83%9C%E3%82%BF%E3%83%B3%E8%BF%BD%E5%8A%A0-202311) (2023/11)
 2. [AWS CloudTrail 統合](#2-aws-cloudtrail-%E7%B5%B1%E5%90%88202405) (2024/05)
 3. [変更セットで変更の可視性が向上](#3-%E5%A4%89%E6%9B%B4%E3%82%BB%E3%83%83%E3%83%88%E3%81%A7%E5%A4%89%E6%9B%B4%E3%81%AE%E5%8F%AF%E8%A6%96%E6%80%A7%E3%81%8C%E5%90%91%E4%B8%8A-202404) (2024/04)

 4.  [DeleteStack APIにDeletionModeの追加](#4-deletestack-api%E3%81%ABdeletionmode%E3%81%AE%E8%BF%BD%E5%8A%A0-202405) (2024/05)
 5.  [スタックの作成ウィザードのエラー表示変更](#5-%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%81%AE%E4%BD%9C%E6%88%90%E3%82%A6%E3%82%A3%E3%82%B6%E3%83%BC%E3%83%89%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E8%A1%A8%E7%A4%BA%E5%A4%89%E6%9B%B4-202406) (2024/06?)
 6.  [スタックの作成ウィザードでテンプレートのフォーマットエラー箇所を表示](#6-%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%81%AE%E4%BD%9C%E6%88%90%E3%82%A6%E3%82%A3%E3%82%B6%E3%83%BC%E3%83%89%E3%81%A7%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%A8%E3%83%A9%E3%83%BC%E7%AE%87%E6%89%80%E3%82%92%E8%A1%A8%E7%A4%BA-202406) (2024/06?)

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

以下変更点を新旧画面で説明します。

## 1.「根本原因を検出」ボタン追加 (2023/11)
スタックのイベントタブに[「根本原因を検出」(Detect root cause)ボタン](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-using-console-create-stack-review.html#cfn-using-console-create-stack-review-root-cause)が追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/7fecb45a-f91a-f400-628f-db6b421de80d.png)
成功したスタックではボタンは無効です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/d258a61b-a8c3-3039-fde8-fbd44fb6f655.png)

> 下記は2023年10月頃の変更前の画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/77472010-fb5f-695a-5314-fe9f8baa1762.png)「根本原因を検出」ボタンがありません。他に「詳細ステータス」列や「Gitと同期」タブなどもありません。


「根本原因を検出」ボタンを押すと、原因と思われるイベントに「考えられる根本原因」と表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/aa164eec-fb40-2292-b459-2a200288485e.png)
大量のイベントログがある場合の判別に便利です。

## 2. AWS CloudTrail 統合(2024/05)
スタックのイベントタブの「根本原因を検出」に2024/05に機能が追加されました。
「考えられる根本原因」のステータスをクリックすると[「CloudTrailイベントを表示」リンクが表示](https://aws.amazon.com/jp/about-aws/whats-new/2024/05/aws-cloudformation-deployment-troubleshooting-aws-cloudtrail-integration/)されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/219f2bbf-8518-9c87-a552-a664fd4cdf44.png)
拡大表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/483be679-6f89-7664-aa4b-8d93e453b233.png)

「CloudTrailイベントを表示」リンクを辿ると、CloudTrailのイベント履歴画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/f04c15f0-174b-28d7-cca4-e990f8b9f931.png)
CloudTrailのイベントは下記の条件でフィルタ表示するようです。
- 論理リソース名があればそれを指定、なければReadOnly=falseを指定
- CloudFormationのエラーイベントの前後30秒

CloudTrailの保存期間を過ぎている場合などは「見つかりませんでした」と表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/373183d7-ded2-650c-7cb4-e257cb61167f.png)

## 3. 変更セットで変更の可視性が向上 (2024/04)

「変更セット(Change set)」は、スタックの更新前に追加・更新・削除対象となるリソースを確認できる機能です。
事前にテンプレートファイルやパラメータの変更の影響が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/4ecb8233-f617-38c4-f8e5-5f45b8171519.png)
[出典 詳解 AWS CloudFormation]

この変更セットの画面が2024/04から更新され、[下記2列が追加されました。](https://aws.amazon.com/about-aws/whats-new/2024/04/aws-cloudformation-changesets-enhanced-change-visibility-deployments/)
 - プロパティレベルの変更： 差分の詳細画面へのリンク
 - ポリシーアクション： 削除・置換のポリシー(DeletionPolicyとUpdateReplacePolicy)設定
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/62030226-58b1-3197-4412-0aa1cc561b1b.png)


> 変更前の画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/b5f5b4dd-a861-4dd6-6744-c194eb5a9025.png)「プロパティレベルの変更」と「ポリシーアクション」列がありません。

> アクションがAdd（追加）の場合、以前は「置換」には"-"が表示されていましたが、2024年4月の更新より「True」が表示されるようになりました。

「プロパティレベルの変更」をクリックすると、プロパティの設定の差分が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/32c067c3-d91d-add4-1a17-3050aaf5c9ca.png)
「ドリフトの詳細を表示」画面と同じ作りですね。

## 4. DeleteStack APIにDeletionModeの追加 (2024/05)
スタックの削除コマンドで強制的にスタック削除(FORCE_DELETE_STACK)が[指定可能になりました。](https://aws.amazon.com/about-aws/whats-new/2024/05/aws-cloudformation-dev-test-cycle-new-parameter-deletestack-api)
```
$ aws cloudformation delete-stack --stack-name myFirststack \
 --deletion-mode FORCE_DELETE_STACK
```
リソースの削除に失敗してスタックを強制的に削除するには、以前はエラーで消せないリソースのリソースIDを--retain-resourcesオプションで個別に指定する必要がありました。
FORCE_DELETE_STACK オプションを利用すれば、リソースIDを記載せずに強制削除が行えます。

Webマネジメントコンソールでは一回削除に失敗しないとFORCE_DELETE_STACKは利用できません。
削除に失敗すると表示される「削除を再試行」ボタンを選択すると、選択肢で「このスタック全体を強制削除」が利用できるようになりました。
![cfn-del-fail-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/0829db33-da54-88ef-bad7-59ef7a78de8a.png)
イベントにはDELETE_SKIPPEDの記載と共に、状況の理由欄に「This resource failed to delete. It was skipped and retained using the Force Delete Stack mode.」と記録されます。
![cfn-del-force-event.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/67324186-cce7-e2dc-09bb-fa73beeaee8f.png)

以前よりある、「このスタックを削除するが、リソースを保持」（--retain-resourcesオプション）では、エラーで残すリソースを選択した場合スタックの削除が可能ですが、状況の理由欄に説明は表示されません。
![cfn-del-fail-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/743a857f-1dad-f6e0-0e6a-274b49448518.png)

「このスタックを削除するが、リソースを保持」選択時のDELETE_SKIPPED
![cfn-del-fail-skip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/4718d8ea-ccb7-222b-62b4-648b0cd36972.png)
  
## 5. スタックの作成ウィザードのエラー表示変更 (2024/06?)
スタックの作成ウィザードでは、エラーのメッセージ表示場所が画面下に移動されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/a7f4f249-c25c-0b1e-ad32-0ead2e656fb4.png)
「戻る」ボタンで戻っても表示されたままです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/f892baaf-aac1-50f4-ac1c-7bccf3c45fc7.png)

> 以前はエラーが画面上に表示されていました。
ｘボタンで非表示も可能でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/0422ed57-828f-a74e-bf9f-af943c10d04d.png)

## 6. スタックの作成ウィザードでテンプレートのフォーマットエラー箇所を表示 (2024/06?)
スタックの作成ウィザードで、テンプレートにJSON/YAMLフォーマット異常があると「テンプレートの指定」画面で表示されるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/fdb28b02-8dae-3852-3fde-778dc5f202e6.png)
「▶パーサーエラー」をクリックするとエラー箇所を表示してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/dc29cc31-4171-22bc-e70b-83d4def71ff2.png)

なお、それ以外で事前に確認できるエラーは表示場所が変わり、画面下と「ファイルの選択」の下にエラーが表示されるようになりました。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832079/0d90a24a-e351-b6b3-0d9f-2df267dc3b1e.png)

エラーメッセージはコマンド aws cloudformation validate-templateでの確認結果と同じようです。
```
$ aws cloudformation validate-template --template-body file://yaml-format-error3.yaml

An error occurred (ValidationError) when calling the ValidateTemplate operation: Template format error: [/Resources/myS3Bucket2] resource definition is malformed
```

> 「5.エラー表示変更」と「6.テンプレートのフォーマットエラー箇所を表示」は6月になって変更に気づきました。5月に変更されていたかもしれません。
> AWSの[What's New with AWS?](https://aws.amazon.com/new/) 等ではアナウンスされていないようです。

## 関連本の説明
マイナビ出版様から<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月の変更までは反映できています。
今回の説明では「1. 根本原因を検出」「3. 変更セットで変更の可視性が向上」は本に記載済みです。