¿Cómo puedo resolver el error «El recurso con nombre personalizado ya existe en la pila» en AWS CloudFormation?

3 minutos de lectura
0

Mi pila de AWS CloudFormation no crea un recurso y recibo un mensaje de error que me indica que mi recurso ya existe en la pila. ¿Cómo puedo resolver este problema?

Descripción corta

Cuando crea un recurso con un nombre personalizado con el mismo nombre y con el mismo valor que otro recurso, CloudFormation no puede diferenciarlos. En ese caso, recibirá el mensaje de error «El recurso con nombre personalizado ya existe en la pila». Cada recurso con un nombre personalizado tiene un identificador físico único. No puede reutilizar el identificador físico para la mayoría de los recursos que se definen en CloudFormation.

Puede resolver este error cambiando el nombre del recurso que falla por un nombre único. O bien, puede optar por no definir el nombre personalizado de ese recurso. Si no establece un nombre personalizado, CloudFormation genera un nombre único cuando se crea el recurso. Este nombre único no entrará en conflicto con sus recursos existentes.

Resolución

1.    En la plantilla de CloudFormation que contiene el recurso fallido, compruebe si hay otros recursos declarados explícitamente con el mismo nombre que el recurso fallido.

En el siguiente ejemplo, la pila falla porque todos los recursos de AWS Identity and Access Management (IAM) ManagedPolicy (ManagedPolicyName) tienen el mismo nombre 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.    Actualice el nombre de cualquier recurso que tenga un nombre duplicado. Por ejemplo, cambie la primera instancia de FinalS3WritePolicy del ejemplo anterior a FinalS3DeletePolicy. También puede eliminar el nombre personalizado.

En los siguientes ejemplos, la pila A funciona correctamente porque cada recurso de IAM ManagedPolicy tiene un nombre personalizado único (FinalS3DeletePolicy y FinalS3WritePolicy). La pila B funciona correctamente porque no se han establecido valores de nombre personalizados para ninguna de las propiedades de ManagedPolicyName. Cuando se crea el recurso, CloudFormation genera automáticamente un nombre único para cada recurso de IAM ManagedPolicy en la pila B.

Pila 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:
........
........

Pila B:

S3DeletePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
........
........
S3WritePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
........
........

**Nota:**Puede utilizar la resolución de este artículo para errores relacionados con recursos existentes en una pila diferente o con recursos creados fuera de CloudFormation.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años