CloudFormationテンプレートのリソースとしてS3バケットを持っています。 DeletionPolicy
をRetain
に設定します。これは期待どおりに機能し、スタックを削除すると、実際にバケットが保持されます。ただし、スタックを再度作成しようとすると、同じバケットを再度作成しようとすると作成が失敗し、すでに存在しているというエラーメッセージが表示されます。
既存のリソースを再作成しないようにするには、CloudFormationテンプレートに何を追加する必要がありますか?
私のテンプレートの関連フラグメントは次のとおりです:
"Resources": {
"SomeS3Bucket" : {
"Type" : "AWS::S3::Bucket",
"DeletionPolicy" : "Retain",
"Properties": {
"BucketName": "SomeS3Bucket"
}
}
1つの方法は、CloudFormationテンプレートに入力パラメーターを追加して、既存のバケットを使用する必要があることを示すことです。
テンプレートで条件句を使用して、パラメーターが必要とする場合にのみバケットを作成します。
CloudFormationは、「aws:」接頭辞が付いたタグを使用して、どのリソースがどのスタックのどのエントリに関連付けられているかを追跡します。これは、何を追加/削除/更新するかを決定する前にテンプレートと比較するために使用する「ライブ」状態です。
ユーザーとして、そのようなタグを追加、編集、または削除することはできません。
したがって、既存のリソースにこれらのタグがない場合、またはこれらのタグの正しい値がない場合、それらは新しいスタックの一部とは見なされず、変更する方法がありません。
Cloudformationテンプレートだけでは実行できないように思われるため、これも自動化しようとしています。私が考えているプロセスは:
temp-$originalbucketname
$originalbucketname
からすべてのコンテンツを削除temp-$originalbucketname
これは非常に複雑なプロセスです。バケットサイズによっては、ほとんどの手順がO(n)であり、キーの数もあるため、数時間かかる場合があります。
CloudformationはAWS自動化の基本的なレイヤーだと思うかもしれませんが、それはすべてのサービスのビザンチンAPIを組み合わせた(かなり限定された)モンスターにすぎないと思います。