StackSets를 사용하여 하나의 계정 내 두 리전에 스택을 배포할 때, 한 리전에서 실패가 발생하고 스택 인스턴스 상태가 Outdated 로 표시되는 이유는 무엇일까? CloudFormation 에서 인스턴스 상태가 Outdated 가 되는 원인은 고유하지 않은 글로벌 리소스를 만들었기 때문이다.
Outdated 상태란,
StackSet에 템플릿이나 파라미터 변경이 있었는데, 일부 리전 또는 계정에서 아직 업데이트가 적용되지 않았을 때 발생하는 상태를 의미한다. 즉 StackSet 수준과 인스턴스 수준의 버전이 일치하지 않는 상태라고 생각하면 된다.
주요 원인은 다음과 같은데, (AWS 공식 문서 참고)
1. 대상 계정에 리소스를 생성할 권한이 부족함
대상 계정에 StackSet에서 요구하는 IAM 권한이 없으면 실패 예: EC2, IAM, S3 등의 리소스를 생성할 권한이 없을 경우
2. CloudFormation 템플릿에 오류가 있음
템플릿 자체 문법 오류 리소스 속성 누락 또는 잘못된 속성 사용 등
3. 고유하지 않은 글로벌 리소스를 생성하려고 시도함
S3 버킷, CloudFront 등은 글로벌 리소스로 전 세계적으로 이름이 고유해야 함 동일한 이름을 여러 리전에서 생성하려고 하면 실패
4. 대상 계정 번호가 누락됨
StackSet 배포 시 대상 계정 번호를 지정하지 않으면 오류 발생 마법사 또는 API 호출 시 누락 여부 확인 필요
5. 관리 계정과 대상 계정 간 신뢰 관계 없음
StackSet(서비스 관리형 권한)을 사용하려면 두 계정 간에 신뢰 정책이 구성되어 있어야 함 AWS Organizations 또는 IAM Role 신뢰 설정 확인 필요
6. 대상 계정이 리소스 한도를 초과함
예: IAM 역할 수 제한, VPC 수 제한 등 대상 계정에 이미 한도를 초과한 경우 추가 리소스 생성 실패
7. StackSet의 최대 인스턴스 수를 초과함
StackSet당 배포 가능한 최대 스택 수는 제한이 있음 (기본 500개) AWS 제한 문서 참고
템플릿이 글로벌 리소스(S3 버킷이나 CloudFront 배포와 같은 서비스)를 리전별로 동일하게 생성하려고 할때 발생한다고 가정 시, 해결 방법은 아래와 같다. (글로벌 리소스는 전 세계에서 고유해야 하므로, 중복 이름이 허용되지 않음! )
- 템플릿 내 리소스 이름 확인
- S3 버킷, CloudFront 등 글로벌 리소스는 이름이 중복되지 않게 설정
- 예: my-bucket-${AWS::Region} 과 같이 리전 기반으로 이름을 다르게 설정할 수 있도록 설정
- 템플릿을 위와 같이 변경 후 StackSet을 재배포
- 리소스 이름을 고유하게 수정 후 StackSet 인스턴스 업데이트를 실행
- S3 버킷, CloudFront 등 글로벌 리소스는 이름이 중복되지 않게 설정
Troubleshooting AWS CloudFormation StackSets - AWS CloudFormation
Troubleshooting AWS CloudFormation StackSets This topic contains some common AWS CloudFormation StackSets issues, and suggested solutions for those issues. Common reasons for stack operation failure Problem: A stack operation failed, and the stack instance
docs.aws.amazon.com
'IT 자격증 > [AWS] SysOps Administrator' 카테고리의 다른 글
Ec2에 액세스키 할당 VS 역할 부여 (0) | 2025.05.19 |
---|---|
Amazon Aurora MySQL에서 "기존 클러스터"를 특정 시점으로 복구하는 방법 (0) | 2025.05.19 |
EFS와 마운트에 대해서 (0) | 2025.05.18 |
모든 리전에서 CloudFormation 템플릿을 통해 리전별 AMI ID를 잘 가져오도록 하는 방법 (1) | 2025.05.18 |
CloudFront-ALB 구조에서의 세션 유실 현상 (0) | 2025.05.18 |