AWS CloudFormation 오류 "Cannot update a stack when a custom-named resource requires replacing"을 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 10월 31일

AWS CloudFormation 스택을 업데이트하려고 하면 "CloudFormation cannot update a stack when a custom-named resource requires replacing. Rename 'MYResourceXXX' and update the stack again."와 유사한 오류 메시지가 표시됩니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

이 오류는 일반적으로 스택 업데이트에서 사용자 지정 이름이 포함된 속성이 있는 리소스를 대체하려고 할 때 발생합니다. AWS CloudFormation에서 사용자 지정 이름이 포함된 속성을 대체하려면 사용자 지정 이름을 다른 이름으로 변경해야 합니다. 스택 실패와 오류 메시지를 방지하기 위해, 스택을 업데이트하기 전에 다른 이름을 사용하려면 모든 리소스를 사용자 지정 이름으로 변경합니다.

이 오류의 해결 방법은 다음과 같이 가정합니다.

  • 기존 스택을 업데이트하는 경우 새 스택을 생성하지 않습니다.
  • 기존 사용자 지정 리소스의 이름을 변경하는 경우 새 사용자 지정 리소스의 이름를 생성하지 않습니다.

해결 방법

1.    코드 편집기에서 업데이트하려는 스택의 AWS CloudFormation 템플릿을 엽니다.

2.    사용자 지정 이름을 가진 리소스 속성의 값이나 이름을 다른 이름으로 교체합니다.

참고: 다음 예에서 MyRDS 리소스의DBInstanceIdentifier 속성을 사용자 지정 이름PRODdb으로 설정합니다. AWS CloudFormation 스택은 이름 PRODdb이 다른 이름(예: PRODdb1)으로 변경될 때까지 성공적으로 업데이트할 수 없습니다. 아니면 템플릿에서 DBInstanceIdentifier 속성을 생략할 수도 있습니다. 이렇게 하면 AWS CloudFormation은 DB 인스턴스에 대해 사용할 고유한 물리적 ID를 생성합니다.

"MyRDS": {
    "Type": "AWS::RDS::DBInstance",
    "Properties": {
        "DBInstanceClass": "db.m3.medium",
        "Engine": "MySQL",
        "DBInstanceIdentifier": "PRODdb",
        "AllocatedStorage": "10",
        "AutoMinorVersionUpgrade": "true",
        "BackupRetentionPeriod": "0",
    …
    …
    }
}

중요: 이름이 사용자 지정된 리소스의 이름을 변경할 때, AWS CloudFormation에서 해당 리소스를 교체합니다. 자세한 내용은 이름 유형을 참조하십시오. 특정 리소스를 교체하면 적절한 백업 없이 데이터가 손실될 수 있습니다. 자세한 내용은 교체를 참조하십시오.

3.    AWS CloudFormation 템플릿에 대한 변경 내용을 저장하고 템플릿을 사용하여 스택을 업데이트합니다.