Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
如何在删除 AWS CloudFormation 堆栈时保留部分资源?
2 分钟阅读
0
我想删除新的或现有的 AWS CloudFormation 堆栈,但不想删除堆栈的所有资源。
简短描述
要在删除堆栈时保留某些资源,请使用 CloudFormation 模板中的 DeletionPolicy 属性。
在删除堆栈之前,请确保为要保留的每项资源指定 Retain、Snapshot 或 Delete 策略选项:
- 使用 Retain 选项,可在删除堆栈时保留资源。
- 使用 Snapshot 选项,可在删除资源之前创建该资源的快照。
**注意:**此选项仅适用于支持快照的资源。 - 使用 Delete 选项,可将资源和堆栈一起删除。
**注意:**如果未设置 DeletionPolicy,则此选项是默认结果。
解决方法
以下步骤向您展示如何使用 DeletionPolicy 的 Retain 选项来防止在删除 CloudFormation 堆栈时删除资源。
在 AWS CloudFormation 模板中指定 DeletionPolicy 属性
在 CloudFormation 模板中,输入 Retain 作为要保留资源的 DeletionPolicy。在以下 JSON 和 YAML 模板示例中,为 AWS::EC2::SecurityGroup 资源指定了 Retain 策略。
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 为 Retain 选项的资源仍然可用。您可以使用 AWS 管理控制台或 AWS CLI 查看其各自服务中的资源。
例如,在删除 CloudFormation 堆栈后,您可以使用以下步骤验证上述模板的 Retain 策略是否成功。
- 打开 Amazon EC2 控制台。
- 在导航窗格的网络与安全部分中,选择安全组。
- 确认附加了 Retain 策略的安全组仍然可用。
相关信息
How do I prevent the resources in my CloudFormation stack from getting deleted or updated?
没有评论