我想删除新的或现有的 AWS CloudFormation 堆栈,但不想删除堆栈的所有资源。
简短描述
要在删除堆栈时保留某些资源,请使用 CloudFormation 模板中的 DeletionPolicy 属性。
在删除堆栈之前,请确保为要保留的每项资源指定保留、快照或删除策略选项:
- 保留选项会在删除堆栈时保留资源。
- 快照选项会在删除资源之前创建该资源的快照。
**注意:**此选项仅适用于支持快照的资源。
- 删除选项会将资源和堆栈一起删除。
**注意:**如果您未设置 DeletionPolicy,则此选项是默认结果。
解决方法
以下步骤向您展示如何使用 DeletionPolicy 的保留选项来防止在删除 CloudFormation 堆栈时删除资源。
在 AWS CloudFormation 模板中指定 DeletionPolicy 属性
在 CloudFormation 模板中,输入 Retain 作为要保留资源的 DeletionPolicy。在以下 JSON 和 YAML 模板示例中,为 AWS::EC2::SecurityGroup 资源指定了保留策略。
JSON:
{
"Description": "AWS CloudFormation DeletionPolicy demo",
"Resources": {
"SGroup1": {
"Type": "AWS::EC2::SecurityGroup",
"DeletionPolicy": "Retain",
"Properties": {
"GroupDescription": "EC2 Instance access"
}
},
"SGroup2": {
"Type": "AWS::EC2::SecurityGroup",
"DeletionPolicy": "Retain",
"Properties": {
"GroupDescription": "EC2 Instance access"
}
},
"SGroup1Ingress": {
"Type": "AWS::EC2::SecurityGroupIngress",
"DeletionPolicy": "Retain",
"Properties": {
"GroupName": {
"Ref": "SGroup1"
},
"IpProtocol": "tcp",
"ToPort": "80",
"FromPort": "80",
"CidrIp": "0.0.0.0/0"
}
},
"SGroup2Ingress": {
"Type": "AWS::EC2::SecurityGroupIngress",
"DeletionPolicy": "Retain",
"Properties": {
"GroupName": {
"Ref": "SGroup2"
},
"IpProtocol": "tcp",
"ToPort": "80",
"FromPort": "80",
"CidrIp": "0.0.0.0/0"
}
}
}
}
YAML:
Description: AWS CloudFormation DeletionPolicy demo
Resources:
SGroup1:
Type: 'AWS::EC2::SecurityGroup'
DeletionPolicy: Retain
Properties:
GroupDescription: EC2 Instance access
SGroup2:
Type: 'AWS::EC2::SecurityGroup'
DeletionPolicy: Retain
Properties:
GroupDescription: EC2 Instance access
SGroup1Ingress:
Type: 'AWS::EC2::SecurityGroupIngress'
DeletionPolicy: Retain
Properties:
GroupName: !Ref SGroup1
IpProtocol: tcp
ToPort: '80'
FromPort: '80'
CidrIp: 0.0.0.0/0
SGroup2Ingress:
Type: 'AWS::EC2::SecurityGroupIngress'
DeletionPolicy: Retain
Properties:
GroupName: !Ref SGroup2
IpProtocol: tcp
ToPort: '80'
FromPort: '80'
CidrIp: 0.0.0.0/0
上传您更新后的 CloudFormation 模板
- 打开 AWS CloudFormation 控制台。
- 对于新堆栈,选择创建堆栈。对于现有堆栈,选择要更新的堆栈,然后选择更新堆栈。
- 在选择模板中,选择将模板上传到 Amazon S3,然后选择经过修改包含删除策略的 CloudFormation 模板。
- 选择下一步。
- 如果您要创建新堆栈,请在堆栈名称中输入堆栈的名称,然后选择下一步。
- 在选项页面上,为您的堆栈选择相应的选项,然后选择下一步。
- 选择创建。
测试 DeletionPolicy 属性
- 删除 AWS CloudFormation 堆栈。
- 删除堆栈后,确认 DeletionPolicy 为保留选项的资源仍然可用。您可以使用 AWS 管理控制台或 AWS CLI 查看其各自服务中的资源。
例如,在删除 CloudFormation 堆栈后,您可以使用以下步骤验证上述模板的保留策略是否成功。
- 打开 Amazon EC2 控制台。
- 在导航窗格的网络与安全部分中,选择安全组。
- 确认附上保留策略的安全组仍然可用。
相关信息
在 AWS CloudFormation 控制台上创建堆栈
如何防止 CloudFormation 堆栈中的资源被删除或更新?