Eu tenho o bucket S3 como recurso no meu modelo do CloudFormation. Com DeletionPolicy
definido como Retain
. Isso funciona como esperado, ao excluir a pilha, ele realmente retém o balde. No entanto, quando tento criar a pilha novamente, a criação falha ao tentar criar o mesmo bucket novamente, com a mensagem de erro reclamando que ela já existe.
O que preciso adicionar ao meu modelo CloudFormation para que ele não tente recriar um recurso que já existe?
O fragmento relevante do meu modelo é o seguinte:
"Resources": {
"SomeS3Bucket" : {
"Type" : "AWS::S3::Bucket",
"DeletionPolicy" : "Retain",
"Properties": {
"BucketName": "SomeS3Bucket"
}
}
Respostas:
Uma abordagem é adicionar um parâmetro de entrada ao modelo CloudFormation para indicar que um bucket existente deve ser usado.
Use cláusulas Condição no modelo para criar o depósito somente se o parâmetro indicar que é necessário.
fonte
O CloudFormation usa tags com o prefixo "aws:" para rastrear quais recursos estão associados a quais entradas nas pilhas - esse é o estado "ativo" usado para comparar com um modelo antes de decidir o que adicionar / excluir / atualizar.
Como usuário, você não pode adicionar, editar ou excluir essas tags.
Portanto, se seus recursos existentes não tiverem essas tags ou não tiverem os valores corretos para essas tags, eles não serão considerados parte da nova pilha e não vejo uma maneira de mudar isso.
fonte
Também estou tentando automatizar isso, pois parece que isso não pode ser feito apenas com o modelo Cloudformation. O processo em que estou pensando seria:
temp-$originalbucketname
$originalbucketname
temp-$originalbucketname
Esse é um processo muito envolvido, dependendo do tamanho do balde que pode levar horas, pois a maioria das etapas é O (n) com o número de chaves.
Você pensaria que o Cloudformation é a camada básica da automação da AWS, mas acho que é apenas um monstro (bastante limitado) que reúne APIs bizantinas para todos os seus serviços.
fonte