트러블슈팅

[AWS] CloudFormation 스택 생성 실패 - IAM Role 이름 충돌로 인한 CREATE_FAILED

JooRi 2025. 11. 14. 14:42
728x90
반응형
SMALL

 

 
이번 글에서는 CloudFormation 스택 생성 중 발생한 실제 오류를 바탕으로,
문제가 발생한 원인과 해결 과정을 정리하였다.

 

 

문제 상황

 

AWS CloudFormation에서 스택을 생성하는 과정에서 위와 같은 오류가 발생했다.

 

“리소스(STGLabInstanceRole)가 CREATE_FAILED 상태입니다.
STGLabInstanceRole already exists in stack …”

 

 

 

 

또 다른 오류는 다음과 같았다.

 

“STGLabRoleForInstances already exists in stack …”

 

 

즉, InstanceProfile과 IAM Role 모두 이미 동일한 이름으로 기존 스택에 존재하고 있었기 때문에 새 스택에서 다시 생성하는 데 실패한 것이다.

 

CloudFormation은 IAM Role, InstanceProfile, ManagedPolicy처럼 Global로 사용되는 리소스에 대해 동일 이름을 중복해서 생성하는 것을 허용하지 않는다.

 

 

원인

문제의 핵심은 템플릿 내부의 아래 코드였다.

STGLabInstanceRole:
  Type: AWS::IAM::Role
  Properties:
    RoleName: STGLabInstanceRole
STGLabRoleForInstanceProfile:
  Type: AWS::IAM::InstanceProfile
  Properties:
    InstanceProfileName: STGLabRoleForInstances

 

즉, RoleName과 InstanceProfileName을 이미 존재하는 이름으로 지정해 놓았기 때문에 새로운 스택을 배포할 때 이미 존재하는 이름과 충돌하게 된 것이다.

 

 

IAM을 확인한 결과,

이미 STGLabInstanceRole이라는 이름의 역할이 존재하고 있었다.

 

 

해결 과정

 

템플릿 코드에서 RoleName과 InstanceProfileName을 새 이름으로 수정한 후 다시 스택을 배포하였다.

 

 

배포 결과

스택 전체가 정상적으로 CREATE_COMPLETE 상태로 완료되었다.

 

 

결론

1) IAM 리소스는 전역 이름(글로벌 리전)이기 때문에 중복 불가하다.
2) RoleName/InstanceProfileName을 고정값으로 두면 충돌 위험이 높다.
3) CloudFormation 이벤트 로그에서 충돌 리소스 파악 가능하다.

 

끝..

728x90
반응형
LIST