メインコンテンツまでスキップ

環境の削除

CloudFormationのスタックを削除すると作成したリソースが削除されます。

対象のスタックを選択し、削除ボタンをクリックします。

image.png

DeletionPolicy

EC2やRDSなどのデータが含まれるリソースについて、削除したくない場合もあります。
こういった場合に使用できるのがDeletionPolicyです。

DeletionPolicyで指定できる値

  • Delete
    スタックの削除時にリソースと (該当する場合) そのすべてのコンテンツを削除します。
  • Retain
    スタックを削除する際に、リソースやコンテンツを削除せず保持します。
  • RetainExceptOnCreate
    スタック操作がロールバックされても、新しく作成されたリソースは削除されますが、既存のリソースは保持されます。これにより、重要なリソースとそのデータを保持しながら、新しい、空の、未使用のリソースを確実に削除できます。
  • Snapshot
    スナップショットをサポートするリソースについては、CloudFormation は削除前に、リソースのスナップショットを作成します。

EC2インスタンスにDeletionPolicyを指定する例

  EC2Instance:
Type: AWS::EC2::Instance
DeletionPolicy: Retain
Properties:
ImageId: "ami-04beabd6a4fb6ab6f"
InstanceType: !Ref InstanceType
EbsOptimized: false
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
Encrypted: false
DeleteOnTermination: true
Iops: 3000
VolumeSize: 16
VolumeType: gp3
NetworkInterfaces:
- SubnetId: !Ref PublicSubnet1
AssociatePublicIpAddress: true
DeviceIndex: "0"
GroupSet:
- !Ref Ec2SecurityGroup
PrivateDnsNameOptions:
HostnameType: ip-name
EnableResourceNameDnsARecord: false
EnableResourceNameDnsAAAARecord: false
Tags:
- Key: Name
Value: !Sub webserver#1-${UserName}

このテンプレートをデプロイした後、実際にスタックを削除するとエラーになります

image.png

これは、EC2を保持することで、EC2が配置されたVPCやサブネットの削除に失敗するからです。しかも、削除可能なものは削除されるため、すごく中途半端な状態で残ってしまいます

削除することまで考慮してスタック分割をしておくとベストです。

テンプレートファイル