AWS Fault Injection Simulator: 카오스 엔지니어링으로 시스템 복원력 테스트하기
AWS FIS로 장애 주입 실험을 수행하는 방법. EC2, ECS, RDS 장애 시뮬레이션과 SAA-C03 시험 핵심 정리.
관련 시험 도메인
- Domain 2: Design Resilient Architectures
핵심 요약
**AWS Fault Injection Simulator (FIS)**는 AWS 워크로드에 제어된 장애를 주입하여 애플리케이션의 복원력을 테스트하는 관리형 카오스 엔지니어링 서비스입니다. EC2 중단, AZ 장애, 네트워크 지연 등을 시뮬레이션할 수 있습니다.
시험 팁
시험 핵심: "애플리케이션 복원력 테스트" → AWS FIS, "장애 주입 실험" → AWS FIS, "게임 데이 시뮬레이션" → AWS FIS
AWS FIS는 언제 사용해야 할까?
적합한 경우
AWS FIS 적합 시나리오:
├── 복원력 검증
│ └── 장애 발생 시 시스템이 정상 동작하는지 테스트
├── 게임 데이(Game Day) 시뮬레이션
│ └── 실제 장애 시나리오 재현 및 대응 연습
├── CI/CD 파이프라인 통합
│ └── 배포 전 자동화된 복원력 테스트
├── AZ/리전 장애 대비
│ └── Multi-AZ, Multi-Region 아키텍처 검증
└── 모니터링/알람 검증
└── 장애 시 CloudWatch 알람이 제대로 동작하는지 확인
부적합한 경우
AWS FIS가 적합하지 않은 상황:
├── 프로덕션 첫 배포 (테스트 환경에서 먼저)
├── 복원력 아키텍처가 없는 시스템
│ → 먼저 Multi-AZ, Auto Scaling 구성
├── 단순 기능 테스트
│ → 일반 테스트 도구 사용
└── 성능/부하 테스트만 목적
→ AWS Distributed Load Testing 등 사용
AWS FIS 핵심 개념
아키텍처
┌─────────────────────────────────────────────────────────────┐
│ AWS Fault Injection Simulator │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 실험 템플릿 (Experiment Template) │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ 액션 (Actions) │ │ │
│ │ │ • aws:ec2:stop-instances │ │ │
│ │ │ • aws:ec2:terminate-instances │ │ │
│ │ │ • aws:ecs:stop-task │ │ │
│ │ │ • aws:rds:failover-db-cluster │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ 대상 (Targets) │ │ │
│ │ │ • 리소스 ID │ │ │
│ │ │ • 태그 필터 │ │ │
│ │ │ • 리소스 유형 │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ 중지 조건 (Stop Conditions) │ │ │
│ │ │ • CloudWatch 알람 연결 │ │ │
│ │ │ • 임계값 초과 시 자동 롤백 │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 실험 실행 (Experiment) │ │
│ │ │ │
│ │ [Target Resources: EC2, ECS, RDS, EKS...] │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
핵심 용어
| 용어 | 설명 |
|---|---|
| 실험 템플릿 (Experiment Template) | 실행할 액션, 대상, 중지 조건을 정의한 청사진 |
| 액션 (Action) | 수행할 장애 주입 동작 (EC2 중지, 네트워크 지연 등) |
| 대상 (Target) | 장애를 주입할 AWS 리소스 (ID, 태그, 필터로 지정) |
| 중지 조건 (Stop Condition) | 실험 자동 중단 조건 (CloudWatch 알람 연결) |
| 시나리오 라이브러리 | 사전 구성된 실험 템플릿 모음 |
지원 액션
주요 장애 유형
AWS FIS 지원 액션:
├── EC2
│ ├── aws:ec2:stop-instances (인스턴스 중지)
│ ├── aws:ec2:terminate-instances (인스턴스 종료)
│ ├── aws:ec2:reboot-instances (인스턴스 재부팅)
│ └── aws:ec2:send-spot-instance-interruptions (스팟 중단)
│
├── ECS
│ ├── aws:ecs:stop-task (태스크 중지)
│ └── aws:ecs:drain-container-instances
│
├── EKS
│ ├── aws:eks:terminate-nodegroup-instances
│ └── aws:eks:pod-delete
│
├── RDS
│ ├── aws:rds:failover-db-cluster (페일오버)
│ └── aws:rds:reboot-db-instances
│
├── 네트워크
│ ├── aws:network:disrupt-connectivity (연결 차단)
│ └── aws:ssm:send-command (네트워크 지연 주입)
│
└── AZ 수준
└── aws:ec2:asg-insufficient-instance-capacity
(AZ 용량 부족 시뮬레이션)
FIS 실험 설계
안전한 실험을 위한 가드레일
실험 안전 장치:
├── 중지 조건 설정 (필수!)
│ ├── CloudWatch 알람 연결
│ │ └── 에러율 > 5% → 실험 자동 중단
│ ├── 응답 시간 임계값
│ │ └── P99 지연 > 3초 → 실험 중단
│ └── 서비스 가용성 알람
│
├── 대상 범위 제한
│ ├── 태그 필터로 테스트 환경만 대상
│ ├── 리소스 비율 지정 (예: 30%만)
│ └── 특정 AZ만 대상
│
└── 점진적 실험
├── 1단계: 개발 환경에서 테스트
├── 2단계: 스테이징 환경에서 테스트
└── 3단계: 프로덕션에서 제한된 범위로 테스트
시험 팁
시험 포인트: FIS 실험에는 반드시 **중지 조건(Stop Condition)**을 설정해야 합니다. CloudWatch 알람을 연결하여 임계값 초과 시 자동으로 실험을 중단할 수 있습니다.
일반적인 실험 시나리오
| 시나리오 | 액션 | 검증 포인트 |
|---|---|---|
| EC2 인스턴스 장애 | stop-instances | Auto Scaling이 새 인스턴스 시작하는지 |
| AZ 장애 | 특정 AZ의 모든 인스턴스 중지 | Multi-AZ 페일오버 동작 |
| RDS 페일오버 | failover-db-cluster | 애플리케이션 자동 재연결 |
| ECS 태스크 장애 | stop-task | 서비스가 태스크 재시작하는지 |
| 네트워크 지연 | SSM으로 tc 명령 실행 | 타임아웃/재시도 로직 동작 |
CI/CD 파이프라인 통합
자동화된 복원력 테스트
┌─────────────────────────────────────────────────────────────┐
│ CI/CD + FIS 통합 아키텍처 │
├─────────────────────────────────────────────────────────────┤
│ │
│ [Code Commit] → [Build] → [Deploy to Staging] │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ AWS FIS │ │
│ │ 실험 실행 │ │
│ └─────────────────┘ │
│ │ │
│ ┌────────┴────────┐ │
│ ▼ ▼ │
│ [성공] [실패] │
│ │ │ │
│ ▼ ▼ │
│ [Deploy to Prod] [롤백 + 알림] │
│ │
└─────────────────────────────────────────────────────────────┘
비용 구조
가격 (US East 기준)
| 항목 | 비용 |
|---|---|
| 액션-분 (Action-minute) | $0.10/액션-분 |
예시: 5개 EC2 인스턴스를 10분간 중지하는 실험
- 5 액션 × 10분 = 50 액션-분
- 비용: 50 × $0.10 = $5.00
비용 최적화 팁
비용 절감 전략:
├── 짧은 실험 시간
│ └── 검증에 필요한 최소 시간만 실행
├── 대상 리소스 최소화
│ └── 전체가 아닌 샘플 리소스만 대상
├── 개발/테스트 환경 활용
│ └── 프로덕션 실험 전 비프로덕션에서 검증
└── 시나리오 라이브러리 활용
└── 사전 구성된 템플릿으로 시행착오 감소
SAA-C03 시험 출제 포인트
자주 나오는 시나리오
- ✅ 복원력 테스트: "장애 발생 시 시스템 동작 검증" → AWS FIS
- ✅ 게임 데이: "실제 장애 시나리오 재현" → AWS FIS
- ✅ AZ 장애 시뮬레이션: "특정 AZ 장애 시 동작 확인" → AWS FIS
- ✅ 자동화된 테스트: "CI/CD에서 복원력 테스트" → AWS FIS
- ✅ 안전 장치: "중지 조건, CloudWatch 알람 연동" → FIS Stop Conditions
예상 문제
시험 팁
예상 문제 1: "Multi-AZ로 배포된 애플리케이션이 실제로 AZ 장애 시 정상 동작하는지 검증하려면 어떤 서비스를 사용해야 할까요?"
→ 정답: AWS Fault Injection Simulator (AZ 장애 시뮬레이션 후 페일오버 검증)
시험 팁
예상 문제 2: "FIS 실험 중 애플리케이션 에러율이 급증하면 자동으로 실험을 중단하려면?"
→ 정답: CloudWatch 알람을 FIS 실험의 Stop Condition으로 연결
시험 팁
예상 문제 3: "프로덕션 환경에서 카오스 엔지니어링 실험을 안전하게 수행하려면 어떤 조치가 필요할까요?"
→ 정답: Stop Conditions 설정 + 대상 리소스 범위 제한 + 점진적 실험
자주 묻는 질문 (FAQ)
Q: FIS와 타사 카오스 엔지니어링 도구의 차이점은?
AWS FIS는 AWS 서비스와 네이티브로 통합되어 IAM 권한, CloudWatch 알람, 타겟 필터링이 쉽습니다. Chaos Monkey, Gremlin 등 타사 도구는 멀티클라우드를 지원하지만 AWS 특화 기능은 FIS가 더 강력합니다.
Q: FIS 실험이 실제로 리소스를 종료하나요?
예, 실제로 리소스에 영향을 줍니다. EC2 중지 액션은 실제로 인스턴스를 중지합니다. 따라서 테스트 환경에서 먼저 실험하고, 프로덕션에서는 제한된 범위로 실행하세요.
Q: 실험 중 문제가 생기면?
Stop Condition이 트리거되면 FIS가 자동으로 실험을 중단합니다. 수동으로도 콘솔/CLI에서 즉시 중단할 수 있습니다. 중단 후에도 이미 종료된 인스턴스는 Auto Scaling이 복구해야 합니다.
Q: 어떤 리전에서 사용 가능한가요?
FIS는 대부분의 AWS 상용 리전에서 사용 가능합니다. 새 리전 출시 시 AWS 문서를 확인하세요.
Q: FIS는 데이터를 손상시킬 수 있나요?
FIS 자체는 데이터를 직접 손상시키지 않습니다. 하지만 인스턴스 종료 시 EBS가 삭제되도록 설정되어 있다면 데이터 손실이 발생할 수 있습니다. 실험 전 데이터 백업과 EBS 설정을 확인하세요.