AWS CloudFormation のスタックを削除する際に、そのスタック内の一部のリソースを残す方法を教えてください。

所要時間2分
0

新規または既存の AWS CloudFormation のスタックの1つを削除したいのですが、そのスタックのリソースの一部を残す方法を探しています。

簡単な説明

スタックを削除する際に特定のリソースを残すには、CloudFormation テンプレートの DeletionPolicy 属性を使用します。

スタックを削除する前に、残したいリソースごとに RetainSnapshot、または Delete のポリシーオプションを指定してください。

  • Retain オプションを指定すると、スタックが削除された場合でもリソースを保持できます。
  • Snapshot オプションを指定すると、リソースが削除される前にリソースのスナップショットを作成できます。
    注: このオプションは、スナップショットを取ることをサポートするリソースでのみ使用できます。
  • Delete オプションを指定すると、スタックとともにリソースが削除されます。
    注: このオプションは、DeletionPolicy を設定していない場合にはデフォルトで実行されます。

解決策

次の手順では、DeletionPolicy に対して Retain オプションを使用して、CloudFormation のスタックを削除する際にリソースが削除されないようにする方法を示します。

AWS CloudFormation テンプレートで DeletionPolicy 属性を指定する

CloudFormation テンプレートで、保持したいリソースに対し、DeletionPolicy として Retain を選択します。次の 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 テンプレートをアップロードする

  1. AWS CloudFormation コンソールを開きます。
  2. スタックを新規に作成する場合は、[スタックの作成] を選択します。既存のスタックの場合は、更新したいスタックを選択し、[スタックの更新] を選択します。
  3. [テンプレートの][Upload a template to Amazon S3] を選択し、その後、DeletionPolicy を含むように変更した CloudFormation テンプレートを選択します。
  4. [次へ] を選択します。
  5. スタックを新規作成する場合は、[スタックの名前] にスタック名を入力し、[次へ] を選択します。
  6. [オプション] ページで、スタックに対して適切なオプションを選択し、[次へ] を選択します。
  7. [作成] を選択します。

DeletionPolicy 属性をテストする

  1. AWS CloudFormation のスタックを削除します。
  2. DeletionPolicyRetain オプションを設定したリソースが、スタックの削除が完了した後も残っていることを確認します。各サービスのリソースを確認するには、AWS マネジメントコンソールまたは AWS CLI を使用します。

例えば、CloudFormation スタックを削除した後に次の手順を実行すると、前述のテンプレートの Retain ポリシーが正常に機能していることを確認できます。

  1. Amazon EC2 コンソールを開きます。
  2. ナビゲーションペインの [ネットワークとセキュリティ] セクションで、[セキュリティグループ] を選択します。
  3. Retain ポリシーがアタッチされているセキュリティグループが残っていることを確認します。

関連情報

Creating a stack on the AWS CloudFormation console

CloudFormation スタックのリソースが削除または更新されないようにするには、どうすれば良いですか?

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ