Ir para o conteúdo

Como resolvo o erro "Resource already exists in the stack" da minha pilha do CloudFormation?

3 minuto de leitura
0

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:
........
........
AWS OFICIALAtualizada há 5 meses