AWS CloudFormation スタックを削除したときにリソースの一部を保持する方法を教えてください。
最終更新日: 2019 年 7 月 8 日
新規または既存の AWS CloudFormation スタックを削除したいのですが、スタックのリソースをすべて削除したくはありません。いくつかのリソースをスタックに保持する方法を教えてください。
簡単な説明
スタックを削除するときに特定のリソースを維持するには、AWS CloudFormation テンプレートの DeletionPolicy 属性を使用します。
スタックを削除するときは、保持、スナップショット、または削除の各ポリシーオプションを指定します。
- 保持オプションは、スタックが削除された場合でもリソースを保持します。
- スナップショットオプションは、リソースが削除される前にそのリソースのスナップショットを作成します。
注: このオプションは、スナップショットをサポートするリソースにのみ使用可能です。 - 削除オプションは、スタックとともにリソースを削除します。
注: DeletionPolicy を設定しない場合、このオプションがデフォルトの結果になります。
解決方法
次の手順では、AWS CloudFormation スタックの削除中にセキュリティグループが削除されないように保持ポリシーを使用する方法を示します。
AWS CloudFormation テンプレートで DeletionPolicy 属性を指定する
AWS CloudFormation テンプレートで、スタックの削除時に保持したいリソースの DeletionPolicy として保持を入力します。次の JSON および YAML テンプレートスニペットの例では、セキュリティグループに保持ポリシーが指定されています。
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
更新した AWS CloudFormation テンプレートをアップロードする
- [AWS CloudFormation コンソール] を開きます。
- [スタックの作成] を選択します。
- テンプレートの選択では、[テンプレートを Amazon S3 にアップロードする] を選択してから、削除ポリシーを含めるように変更した AWS CloudFormation テンプレートを選択します。
- [次へ] を選択します。
- [スタック名] には、スタックの名前を入力してから [次へ] を選択します。
- [オプション] ページで、スタックに適したオプションを選択してから、[次へ] を選択します。
- [作成] を選択します。
DeletionPolicy 属性をテストする
- AWS CloudFormation スタックします。
- スタックの削除が完了した後も、保持ポリシーを持つリソースがまだ使用可能であることを確認してください。
この解決策のテンプレートスニペットの例では、AWS CloudFormation スタックを削除した後に次の手順に従って保持ポリシーが成功したことを確認できます。
- [Amazon EC2 コンソール] を開きます。
- ナビゲーションウィンドウの [ネットワークとセキュリティ] セクションで、[セキュリティグループ] を選択します。
- 保持ポリシーを持つセキュリティグループがまだ使用可能であることを確認します。