AWS CloudFormation에서 "Custom Named Resource already exists in stack" 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 5월 23일

AWS CloudFormation 스택에서 리소스가 생성되지 않고 스택에 이미 리소스가 있다는 내용의 오류 메시지가 표시됩니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

이 오류는 AWS CloudFormation에서 사용자 지정 이름을 가진 하나 이상의 리소스에 동일한 이름이 동일한 값으로 설정된 경우 발생합니다. 사용자 지정 이름을 가지는 각 리소스에는 고유한 물리적 ID가 있습니다. AWS CloudFormation에 정의된 대부분의 리소스에는 물리적 ID를 재사용할 수 없습니다.

반복되거나 실패하는 리소스의 이름을 고유한 이름으로 변경하면 이 오류를 해결할 수 있습니다. 또는 해당 리소스에 대해 사용자 지정 이름을 정의하지 않도록 선택할 수 있습니다. 사용자 지정 이름을 설정하지 않으면 AWS CloudFormation이 리소스를 만들 때 고유한 이름을 생성합니다. 이 고유한 이름은 기존 리소스와 충돌하지 않습니다.

​해결 방법

1.    실패하는 리소스가 포함된 AWS CloudFormation 템플릿에서 명시적으로 선언된 다른 리소스의 이름이 실패한 리소스의 이름과 같은지 확인합니다.

다음 예에서는 각 AWS Identity and Access Management(IAM) ManagedPolicy 리소스(ManagedPolicyName)의 사용자 지정 이름이 FinalS3WritePolicy로 동일하기 때문에 스택이 실패합니다.

# This stack will fail
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.    이름이 중복되는 모든 리소스의 이름을 업데이트합니다. 예를 들어 이전 예에서 처음에 나오는 FinalS3WritePolicyFinalS3DeletePolicy로 변경합니다. 또는 사용자 지정 이름을 제거해도 됩니다.

다음 예에서 스택 A는 각 IAM ManagedPolicy 리소스의 사용자 지정 이름(FinalS3DeletePolicyFinalS3WritePolicy)이 고유하므로 성공합니다. 스택 B는 ManagedPolicyName 속성에 사용자 지정 이름 값이 설정되지 않았으므로 성공합니다. AWS CloudFormation은 리소스를 생성할 때 스택 B의 각 IAM ManagedPolicy 리소스에 대해 자동으로 고유한 이름을 생성합니다.

스택 A:

# This stack will Succeed as unique names are set:
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:
........
........

스택 B:

# This stack will Succeed as no names are set     
S3DeletePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
........
........
S3WritePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
........
........

참고: 다른 스택의 기존 리소스 또는 AWS CloudFormation 외부에서 생성된 리소스가 포함된 관련 오류에도 이 문서의 해결 방법을 사용할 수 있습니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?