如何在刪除 AWS CloudFormation 堆疊時保留部分資源?

2 分的閱讀內容
0

我想刪除新的或現有的 AWS CloudFormation 堆疊,但不想刪除堆疊的所有資源。

簡短描述

若要在刪除堆疊時保留某些資源,請使用 CloudFormation 範本中的 DeletionPolicy 屬性

在刪除堆疊之前,請確定為您要保留的每個資源指定保留快照刪除政策選項:

  • 保留選項在堆疊刪除時會保留資源。
  • 快照選項會在資源刪除之前建立該資源的快照。
    **注意:**此選項僅適用於支援快照的資源。
  • 刪除選項會將資源與堆疊一起刪除。
    **注意:**如果您沒有設定 DeletionPolicy,則此選項是預設結果。

解決方法

下列步驟說明如何使用對 DeletionPolicy 使用保留選項,以防止在 CloudFormation 堆疊刪除期間刪除資源。

在 AWS CloudFormation 範本中指定 DeletionPolicy 屬性

在 CloudFormation 範本中,輸入保留作為您要保留的資源的 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 範本

  1. 開啟 AWS CloudFormation 主控台
  2. 對於新堆疊,請選擇建立堆疊。對於現有堆疊,請選取要更新的堆疊,然後選擇更新堆疊
  3. 對於選擇範本,選取將範本上傳至 Amazon S3,然後選擇經您修改以包括刪除政策的 CloudFormation 範本。
  4. 選擇下一步
  5. 如果您要建立新堆疊,對於堆疊名稱,請輸入您的堆疊名稱,然後選擇下一步
  6. 選項頁面上,為堆疊選取適當的選項,然後選擇下一步
  7. 選擇建立

測試 DeletionPolicy 屬性

  1. 刪除 AWS CloudFormation 堆疊
  2. 在堆疊刪除完成後,確認對 DeletionPolicy 使用保留選項的資源仍然可用。您可以使用 AWS 管理主控台或 AWS CLI 檢查其各自服務中的資源。

例如,您可以在刪除 CloudFormation 堆疊後,使用下列步驟驗證上述範本的保留政策是否成功。

  1. 開啟 Amazon EC2 主控台
  2. 網路和安全區段的導覽窗格上,選擇安全群組
  3. 確認附加了保留政策的安全群組仍然可用。

相關資訊

在 AWS CloudFormation 主控台建立堆疊

如何防止 CloudFormation 堆疊中的資源遭到刪除或更新?

AWS 官方
AWS 官方已更新 2 年前