Minha pilha do AWS CloudFormation falha ao criar um recurso e eu recebo uma mensagem de erro informando que meu recurso já existe na pilha. Como faço para resolver esse erro?
Breve descrição
Quando você cria um recurso com nome personalizado com o mesmo nome e definido com o mesmo valor de outro recurso, o CloudFormation não consegue diferenciá-los. Em seguida, você recebe a mensagem de erro: “O recurso com nome personalizado já existe na pilha”. Cada recurso com nome personalizado tem uma ID física exclusiva. Você não pode reutilizar a ID física para a maioria dos recursos definidos no CloudFormation.
Você pode resolver esse erro alterando o nome do recurso com falha para um nome exclusivo. Ou você pode optar por não definir o nome personalizado desse recurso. Se você não definir um nome personalizado, o CloudFormation gerará um nome exclusivo quando o recurso for criado. Esse nome exclusivo não entrará em conflito com seus recursos existentes.
Resolução
1. No modelo do CloudFormation que contém seu 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 (IAM) (ManagedPolicyName) tem o mesmo nome personalizado (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:
........
........
2. Atualize o nome de qualquer recurso que tenha um nome duplicado. Por exemplo, altere a primeira instância de FinalS3WritePolicy no exemplo anterior para FinalS3DeletePolicy. Ou remova o nome personalizado.
Nos exemplos a seguir, a Pilha A é bem-sucedida porque cada recurso ManagedPolicy do IAM tem um nome personalizado exclusivo (FinalS3DeletePolicy e FinalS3WritePolicy). A Pilha B é bem-sucedida porque nenhum valor de nome personalizado é 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.
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:
........
........
Pilha B:
S3DeletePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........
S3WritePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........
**Observação:**Você pode usar a resolução neste artigo para erros relacionados envolvendo recursos que existem em uma pilha diferente ou recursos criados fora do CloudFormation.