Skip to content

삭제된 AWS SNS 주제 복구 시 ARN의 중요성

1줄 요약

AWS SNS 주제(Topic)를 삭제한 뒤 동일한 이름으로 다시 생성해도, 기존 CloudWatch 알람은 이전 리소스의 고유 ARN을 참조하므로 알람 액션을 반드시 명시적으로 재설정해야 한다.

1. 인시던트 개요

모니터링 알람용 AWS SNS 주제가 실수로 삭제되는 일이 발생했다. 가장 빠른 복구를 위해 삭제된 주제와 **'동일한 이름'**으로 새 주제를 생성하고 이메일 및 Lambda 구독을 다시 연결했다.

겉보기에는 모든 구성이 정상 복구된 것처럼 보였으나, 실제 테스트 시 기존에 설정되어 있던 수많은 CloudWatch 알람들이 새로 생성된 SNS 주제로 알림을 전송하지 못하고 침묵하는 장애가 발생했다.

[장애 발생 흐름]
1. SNS 주제 실수 삭제 (기존 고유 ARN 소멸)
2. 동일 이름으로 주제 재생성 (새로운 내부 ARN 발급)
3. CloudWatch 알람 발동 ──(알림 시도)──✖ [과거 ARN 참조로 인한 드롭]

2. 근본 원인: Name vs Immutable ARN

CloudWatch 알람의 '작업(Action)' 설정은 사람이 지정하는 리소스 이름(Name)이 아닌, AWS 전역 고유 식별자인 **ARN(Amazon Resource Name)**을 저장한다.

  • 이름(Name): 사용자가 지정하는 식별자로, 삭제 후 동일 이름으로 재사용 가능
  • ARN(Amazon Resource Name): 리소스 생성 시 고유하게 부여되는 불변의 ID

동일한 이름으로 주제를 다시 생성하더라도, AWS 내부적으로는 완전히 새로운 리소스가 생성된 것이므로 기존 CloudWatch 알람 액션은 **더 이상 존재하지 않는 과거의 대상(Dangling ARN)**을 가리키게 된다.

- 기존 알람 액션 Target : arn:aws:sns:ap-northeast-2:123456789012:OLD-TOPIC-ID (삭제됨)
- 새로 생성된 주제 ARN  : arn:aws:sns:ap-northeast-2:123456789012:NEW-TOPIC-ID (미연결)

3. 실전 복구 및 검증 절차

Step 1. 구독자 정보 확보

삭제된 SNS 주제의 생성 이력이 90일을 초과하여 CloudTrail 로그가 만료되었다면, IaC(Terraform/CloudFormation) 코드나 배포 설정 문서를 통해 기존 구독자 목록(이메일, Lambda, SQS 등)을 신속히 확보해야 한다.

Step 2. SNS 주제 및 구독 재생성

동일한 이름으로 SNS 주제를 생성하고, 확보된 구독자 정보를 바탕으로 구독(Subscription)을 모두 다시 추가한다.

Step 3. CloudWatch 알람 작업(Action) 일괄 갱신

삭제된 주제를 바라보던 모든 CloudWatch 알람의 액션을 식별하여 신규 SNS ARN으로 업데이트한다. 알람이 많을 경우 AWS CLI로 일괄 갱신한다.

bash
# 특정 알람의 액션을 신규 SNS ARN으로 업데이트
aws cloudwatch put-metric-alarm \
  --alarm-name "EC2-CPU-High-Alarm" \
  --alarm-actions "arn:aws:sns:ap-northeast-2:123456789012:NEW-TOPIC-ID"

Step 4. 강제 트리거를 통한 수신 테스트

실제 인시던트 발생 전에 set-alarm-state 명령어로 알람을 강제 발동시켜 모든 구독자에게 정상 수신되는지 즉시 검증한다.

bash
# 알람 상태를 강제로 ALARM으로 변경하여 테스트
aws cloudwatch set-alarm-state \
  --alarm-name "EC2-CPU-High-Alarm" \
  --state-value ALARM \
  --state-reason "Testing SNS notification recovery"

4. 핵심 체크포인트 (Gotchas)

  1. AWS 리소스 재사용의 함정: 이름이 같다고 해서 기존 서비스 간의 링크나 권한이 자동으로 복원되지 않는다.
  2. IaC 기반 인프라 관리 권장: 콘솔에서 수동으로 생성한 리소스는 삭제 시 복구와 추적이 어려우므로, 알람 및 알림 파이프라인은 코드로 관리하는 것이 안전하다.

게시된 시간: 2026-07-08 09:35:53수정한 시간: 2026-08-15 13:57:00

Built with VitePress. | 📡 RSS Feed