AWS CloudFormation の変更セットとは
変更セットを使用して CloudFormation スタックを更新する - AWS CloudFormation
変更セットは、スタックに対して提案された変更が実行中のリソースにおよぼす影響を事前に確認できるようにします。
CloudFormation スタックの更新前に更新が発生する可能性のあるリソースを確認できる機能です。
機能概要
- 変更セットの作成のみではスタックは更新されない
- 変更セットを実行した場合にはスタックが更新される
- 変更セットはスタックの更新が成功することを保証する機能ではない
- 実行された変更セットは CloudFormation によって自動的に削除される
変更セットを使用しないことによる影響
CloudFormation ベストプラクティス - AWS CloudFormation
例えば、Amazon RDS データベースインスタンスの名前を変更すると、CloudFormation によって新しいデータベースが作成され、古いものは削除されます。古いデータベースのデータをバックアップしていないと、データは失われます。
変更セットを使用せずにスタックを更新した場合、リソースの削除やデータの損失が発生する可能性があります。
そのため、CloudFormation のベストプラクティスでも変更セットを使用することが推奨されています。
やってみた
以下の CloudFormation テンプレートを使用して変更セットを試してみました。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: my-vpc
01. CloudFormation スタックの作成
上記テンプレートで CloudFormation スタックを作成します。
CloudFormation コンソールでスタックを作成する際にも変更セットを作成することができます。



変更セットを作成した時点ではスタックはデプロイされていないため、VPC も作成されません。
02. 変更セットの実行
手順 01 で作成した変更セットを実行します。

変更セットを実行したことでスタックがデプロイされ、VPC が作成されました。


03. スタックの更新
以下のテンプレートで変更セットを作成してスタックを更新します。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16




変更セットの詳細から以下の点を確認できます。
- リソースの置換は発生しない
- 置換: false
- Tags プロパティが削除される

もしこの時点で予期しない更新箇所があれば変更セットを削除することが可能です。
今回は問題ないので変更セットを実行します。
変更セットの実行後、CloudFormation テンプレートで定義していた VPC からタグが削除されたことを確認できます。

まとめ
今回は AWS CloudFormation の変更セットについて紹介しました。
どなたかの参考になれば幸いです。
Discussion