AWS Cloud School 13기 112일차

Forever 김·2026년 6월 11일

AWS Cloud School

목록 보기
101/116

2026-06-11

Today

FIS prod-rds Multi-AZ Failover 실험 결과보고서 작성 (멘토 제출용)

  • 노션 "FIS 시나리오 작업" 페이지 캡쳐 37장 전부 읽어 실험 결과 포렌식 재구성
  • 캡쳐 이미지 37장 로컬 저장 (FIS-실험-캡쳐\, ASCII 네이밍 01~25·C1~C12 + README 매핑)
  • 데이터 소스 3종 교차검증: 노션 그래프 + RDS Recent events 원문 + AWS 실측 쿼리
  • 실험 2회 확정: 15:27(EXPhgTCZQ3LVQj9gtz)·15:49(EXPz7XCxyHAZYaLh7Y) 둘 다 completed
  • 핵심 발견: FIS 실험 자체는 13초 fire-and-exit(reboot 트리거 후 종료) → 5xx 폭증·15분 장애는 실험 종료 후 발생 → Stop Condition 미발동 이유 규명
  • 정량 지표 도출: DB RTO ~1분(인프라) vs App RTO ~15분(앱) / 5xx 280건 / p99 peak 31초(커넥션 타임아웃 천장) / p50 2.6ms 유지 / Healthy=1 내내 / AZ 2c→2a→2c 원위치(현재 2c)
  • 결론 5개 도출: ①인프라 회복력 검증 ②"DB는 살아났는데 앱이 못 붙는" 15분 격차(JVM DNS TTL + HikariCP) ③헬스체크 맹점(deep health check 필요) ④영향범위 DB 의존 요청 한정 ⑤13초 fire-and-exit + Stop Condition 사각지대(aws:fis:wait 추가)
  • 산출: 바탕화면 PDF (md→HTML 커스텀 변환 + 이미지 base64 임베드 → Edge headless print, 1.55MB), 관련 캡쳐 9장 본문 임베드

Notes

작업 중 만난 환경 함정

  • python3 Windows Store 스텁이라 exit 49 → python(3.13.13) 사용
  • 멀티 이미지 배치 Read는 폭 >2000px 거부 → PIL로 ≤1900px 리사이즈 후 읽기 (단일 Read는 자동 다운스케일 OK)
  • md→PDF: pandoc 없음 → 커스텀 md→HTML(이미지 base64 임베드) + Edge --print-to-pdf(Start-Process -Wait + --user-data-dir)
  • PowerShell 파일 IO는 -Encoding UTF8 필수 (PS5.1이 한글·→ ??로 손상)

Learned

AMG (Amazon Managed Grafana)

  • AWS가 Grafana 서버를 완전 관리형으로 제공하는 서비스
  • Workspace 단위로 논리적 격리된 Grafana 인스턴스 생성
  • 인증: SAML 2.0 / IAM Identity Center 네이티브 통합
  • 데이터소스 연결 시 IAM 서비스 역할로 자동 권한 프로비저닝 (키 관리 불필요)
  • 과금: 활성 사용자당 — Editor $9/월, Viewer $5/월
  • 서울 리전(ap-northeast-2) 지원 ✅
  • vs 자체 Grafana: 패치/스케일링/HA 자동, 플러그인은 제한적

AMG Dimension

  • CloudWatch 메트릭의 식별 키-값 쌍 (리소스 필터)
  • Namespace(서비스 카테고리) > Metric(측정 항목) > Dimension(구체적 리소스 식별자)
  • 예: ClusterName=farmily-prod-ecs, ServiceName=farmily-prod-backend

AWS FIS (Fault Injection Service)

  • AWS 워크로드에 의도적 장애를 주입하는 관리형 카오스 엔지니어링 서비스
  • 핵심 3요소: Action(장애 행위) + Target(대상 리소스) + Stop Condition(CloudWatch Alarm 안전장치)
  • 지원: EC2 종료/CPU 스트레스, ECS 태스크 종료, RDS Failover, AZ 격리 등
  • 콘솔 GUI / CLI / Terraform / CloudFormation 모두 가능
  • 시나리오 라이브러리: AWS 프리빌트 템플릿 제공 (AZ Power Interruption 등)
  • 비용: 액션 실행 분당 과금, 대기 비용 0
  • 드리프트 우려 낮음: 실험 실행해도 템플릿 불변 + 대상 리소스 자동 복원
  • EC2 CPU/메모리 스트레스는 SSM Agent 필수

CloudWatch Container Insights

  • ECS/EKS 컨테이너의 메트릭·로그를 자동 수집·집계하는 CloudWatch 기능
  • 클러스터 설정에서 containerInsights=enabled 한 줄로 활성화
  • 수집 레벨: Cluster > Service > Task > Container (Enhanced 모드)
  • AMG와의 관계: Container Insights = 데이터 수집 레이어, AMG = 시각화 레이어
  • Enhanced Observability (2024.12~): 컨테이너 레벨 메트릭 + 사전 구성 대시보드

Terraform State

  • 현재 AWS에 실제 존재하는 리소스의 스냅샷을 기록한 JSON 파일
  • 역할: 코드(.tf) vs State vs 실제 AWS 3자 비교로 변경사항 판단
  • 없으면 Terraform이 자기가 뭘 만들었는지 모름 → 중복 생성
  • 민감 정보(DB 비밀번호 등) 평문 포함 가능 → encrypt 필수, Git 커밋 금지
  • 팀 협업: S3(공유 저장소) + DynamoDB(동시 수정 방지 Lock)
  • Lock 동작: apply는 Lock 필요, plan은 read-only라 동시 가능

컷오버 (Cutover)

  • 기존 시스템 → 새 시스템으로 실제 운영 트래픽을 전환하는 순간
  • 방식: Big Bang(한번에) vs Rolling(점진적)
  • AWS 패턴: DNS 컷오버(Route53), DB 컷오버(DMS), Blue/Green(ALB 타겟 스왑)

IAM Trust Policy 요소

  • Version: 정책 문법 버전 (2012-10-17 고정)
  • Effect: Allow/Deny
  • Principal.Service: 역할을 assume할 주체 (예: fis.amazonaws.com)
  • Action: sts:AssumeRole: 임시 자격증명 발급 허용
  • Condition — Confused Deputy 방지:
    • aws:SourceAccount: 우리 계정(851957594139)에서 온 요청만
    • aws:SourceArn: 특정 리소스(FIS 실험)에서 온 요청만
  • Trust Policy = "누가 쓸 수 있나" / Permission Policy = "뭘 할 수 있나"

IAM Permission Policy 요소 (FIS 역할용)

  • Sid: Statement ID — 사람이 읽기 위한 라벨, 기능 영향 없음
  • Action: 허용할 API 호출 (예: rds:RebootDBInstance)
  • Resource: 대상 리소스 ARN — 특정 리소스만 지정하면 최소 권한 원칙 적용
    • 예: arn:aws:rds:ap-northeast-2:851957594139:db:prod-rds → prod-rds 하나만
  • Resource: "*": CloudWatch Alarm 등 ARN 필터링 제한적인 서비스에서 사용 (AWS 권장)
  • 설계 패턴: Statement 분리로 "실험 액션 권한"과 "Stop Condition 조회 권한"을 구분
  • Trust + Permission 조합: Trust가 "누가 assume 가능", Permission이 "assume 후 뭘 할 수 있나"
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RebootProdRdsOnly",
      "Effect": "Allow",
      "Action": "rds:RebootDBInstance",
      "Resource": "arn:aws:rds:ap-northeast-2:851957594139:db:prod-rds"
    },
    {
      "Sid": "ReadStopConditionAlarm",
      "Effect": "Allow",
      "Action": "cloudwatch:DescribeAlarms",
      "Resource": "*"
    }
  ]
}

Prompt(회고)

잘된 것

  • FIS 결과보고서를 단일 소스에 의존하지 않고 3소스(노션 그래프·RDS events·AWS 실측)로 교차검증 → "13초 fire-and-exit라 장애는 실험 종료 후 발생" 같은 반직관적 결론을 자신 있게 도출. 보고서가 추측이 아니라 실측 기반이 됨.
  • 설계서 최신화 때 "설계서 글"이 아니라 실제 워크플로우 YAML을 진실 소스로 삼아 대조 → Mobile 섹션이 stale했던 걸 발견. 문서-코드 드리프트를 코드 기준으로 정렬.
  • AWS FIS를 사용하면서 처음으로 k6를 통해 인프라 테스트를 진행해보았다. 테스트를 진행하면서 Grafana를 통해 필요한 지표를 모니터링도 하고 유의미한 작업을 했다고 생각한다.
  • 오늘 우리 교육장에 퇴소자가 한명 생겼다. 이유는 취업에 성공했다. 쿠팡에 합격하셨다고 한다. 매우 부럽다. 나도 언제 취업하지...?
profile
나를 한줄로

0개의 댓글