前陣子常常在解釋 CloudFormation DeletionPolicy 的用途,發現大家在寫 CloudFormation 時除了 Resource 以外的參數都很少會去用到,但實際上 DeletionPolicy 卻能讓管理上帶來更多的保護與方便,這篇會解釋一下 DeletionPolicy 可以怎麼用。
本文內容實際以 AWS DeletionPolicy Attribute 為主
基本上 DeletionPolicy 主要功能就是在「Delete Resource」時會發生,其 DeletionPolicy 參數有幾種適用情況
DeletionPolicy: Delete (預設)
不指定 DeletionPolicy 的情況下預設是 Delete,也就是會真的刪除 Resource。
使用情境:(預設) 當 CloudFormation 不存在此 Resource 就刪除 Resource。
對於一些重要的 Resource 不適合使用 Delete 多為含有「資料」:
- AWS::EC2::Volume
- AWS::ElastiCache::CacheCluster
- AWS::ElastiCache::ReplicationGroup
- AWS::Neptune::DBCluster
- AWS::RDS::DBCluster
- AWS::RDS::DBInstance
- AWS::Redshift::Cluster
DeletionPolicy: Retain
Retain 本身是為了修正或補救 CloudFormation 與真實 Resource 產生差異時的參數,當該 Resource Delete 時,並不會真實的刪除 Resource 只會把 CloudFormation Resource 刪掉,通常是 CloudFormation 發生 drift 與 Resource 不一致的情況。
使用情境:
- CloudFormation import 必須指定 Retain 才會觸發 import Resource
- 避免 CloudFormation 刪除真實 Resource 而做的保護措施
- 當真實 Resource 不存在,但 CloudFormation 仍存在時產生 drift 的補救方法
- 當要從 Elastic beanstalk 分離指定 Resource 時,指定 Retain 脫離管理
DeletionPolicy: Snapshot
Snapshot 對於一些會含有「資料」的重要服務支援的參數,當指定為 Snapshot 時被 Delete 後會自動產生 Snapshot。
使用情境:Resource 可以被刪除,但需要保留 Snapshot 備份
Snapshot 僅支援以下 Resource 可以使用:
- AWS::EC2::Volume
- AWS::ElastiCache::CacheCluster
- AWS::ElastiCache::ReplicationGroup
- AWS::Neptune::DBCluster
- AWS::RDS::DBCluster
- AWS::RDS::DBInstance
- AWS::Redshift::Cluster