Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
AWS CloudFormation のスタックを削除する際に、そのスタック内の一部のリソースを保持する方法を教えてください。
新規または既存の AWS CloudFormation のスタックの 1 つを削除したいのですが、そのスタックのリソースの一部を残す必要があります。
簡単な説明
スタックを削除する際に特定のリソースを残すには、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 テンプレートをアップロードする
- AWS CloudFormation コンソールを開きます。
- 新規のスタックの場合は、[スタックの作成] を選択します。既存のスタックの場合は、更新したいスタックを選択し、[スタックの更新] を選択します。
- [テンプレートの選択] で [テンプレートを Amazon S3 にアップロード] を選択し、その後、削除ポリシーを含むように変更した CloudFormation テンプレートを選択します。
- [次へ] を選択します。
- スタックを新規作成する場合は、[スタックの名前] にスタック名を入力し、[次へ] を選択します。
- [オプション] ページで、スタックに対して適切なオプションを選択し、[次へ] を選択します。
- [作成] を選択します。
DeletionPolicy 属性をテストする
- AWS CloudFormation のスタックを削除します。
- DeletionPolicy の [保持] オプションを設定したリソースが、スタックの削除が完了した後も残っていることを確認します。各サービスのリソースを確認するには、AWS マネジメントコンソールまたは AWS CLI を使用します。
例えば、CloudFormation スタックを削除した後に次の手順を実行すると、前述のテンプレートの [保持] ポリシーが正常に機能していることを確認できます。
- Amazon EC2 コンソールを開きます。
- ナビゲーションペインの [ネットワークとセキュリティ] セクションで、[セキュリティグループ] を選択します。
- [保持] ポリシーがアタッチされているセキュリティグループが残っていることを確認します。
関連情報
- 言語
- 日本語

関連するコンテンツ
- 質問済み 8年前
- 質問済み 5年前
- 質問済み 7年前
