Quero solucionar o erro "Resource already exists in the stack" da minha pilha no AWS CloudFormation.
Breve descrição
Cada recurso tem um ID físico exclusivo e não é possível reutilizar o ID físico na maioria dos recursos definidos no CloudFormation.
Se você criar uma pilha e os recursos tiverem o mesmo nome e o mesmo valor de outro recurso, o CloudFormation não conseguirá diferenciar os recursos. Então você recebe a mensagem de erro "Resource already exists in stack". Além disso, você pode receber essa mensagem de erro se existirem recursos que o CloudFormation não define ou gerencia com o mesmo ID físico na conta da AWS ou na região da AWS.
Para resolver esse problema, altere o nome do recurso com falha para um nome exclusivo ou não defina o nome desse recurso. Se não definir um nome, o CloudFormation gera um nome exclusivo quando você criar o recurso. Esse nome exclusivo não entra em conflito com seus recursos existentes.
Resolução
Observação: é possível usar a seguinte resolução para erros relacionados a recursos que existem em uma pilha diferente ou que você criou com outros recursos da AWS. Por exemplo, é possível receber essa mensagem de erro em filas do Amazon Simple Queue Service (Amazon SQS) que têm um identificador que já existe.
Verifique o nome dos seus recursos
No modelo do CloudFormation que contém o recurso com falha, verifique se outros recursos declarados explicitamente têm o mesmo nome do seu recurso com falha.
No exemplo a seguir, a pilha falha porque cada recurso ManagedPolicy do AWS Identity and Access Management (AWS IAM) tem o mesmo nome FinalS3WritePolicy:
S3DeletePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName:
Fn::Join:
- _
- - FinalS3WritePolicy
- Ref: EnvType
PolicyDocument:
........
........
S3WritePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName:
Fn::Join:
- _
- - FinalS3WritePolicy
- Ref: EnvType
PolicyDocument:
........
........
Atualize o nome do seu recurso duplicado
Atualize o nome de um recurso que tenha um nome duplicado. Por exemplo, altere a primeira ocorrência de FinalS3WritePolicy para FinalS3DeletePolicy. Ou remova o nome.
Nos exemplos a seguir, a Pilha A é bem-sucedida porque cada recurso ManagedPolicy do IAM tem os nomes exclusivos FinalS3DeletePolicy e FinalS3WritePolicy. A Pilha B é bem-sucedida porque nenhum valor de nome é definido para nenhuma das propriedades ManagedPolicyName. Quando o recurso é criado, o CloudFormation gera automaticamente um nome exclusivo para cada recurso ManagedPolicy do IAM na Pilha B.
Exemplo para a Pilha A:
S3DeletePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName:
Fn::Join:
- _
- - FinalS3DeletePolicy
- Ref: EnvType
PolicyDocument:
........
........
S3WritePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName:
Fn::Join:
- _
- - FinalS3WritePolicy
- Ref: EnvType
PolicyDocument:
........
........
Exemplo para a Pilha B:
S3DeletePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........
S3WritePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........