AWS Cloud School 13기 119일차

Forever 김·2026년 6월 26일

AWS Cloud School

목록 보기
112/116

2026-06-26

Today

항목상태
AMP remote-write 구축amp.tf 검증·수정(오타+누락 inline policy) → -target apply
GitOps PR — remote-write(#115) · 차트 ServiceMonitor 4종(#116) 머지
DR 대시보드 교정 — RTO 15분·Route53 글로벌 헬스체크 리네임·5xx 비율 ArithmeticError 수정·AMP 더미패널 삭제
dr-eks amazon-cloudwatch-observability 애드온 설치 (PR #118)
Backend prod 승격 누락 인시던트 — 원인(main 직접 push→dev 이미지 미빌드) 규명·재배포 트리거
AMP 배포검증 문서 6컷 캡처 체크리스트 작성
Karpenter 패널 No data 진단 — 이벤트 기반 지표·now-1h 창 밖 사건(노드 i-01df80)

Notes

인프라 작업 메모 (AMP·DR·인시던트)

  • amp.tf 버그 2종 — ① sts:AssumRoleWithWebIdentity 오타(→AssumeRole...) ② aps:RemoteWrite inline policy 자체가 누락. 둘 다 plan에선 안 잡히고 apply 후 remote-write 403으로 드러남. apply는 원칙상 Jenkins(prod/dev)지만 단발 -target은 로컬로 처리, dr은 관례상 수동.
  • DR RTO 15분으로 교정 — 기존 5분은 트래픽 전환(읽기 경로, T+1분) 기준이었음. 진짜 RTO는 도쿄 RDS 승격(읽기→쓰기) 완료=15분. 둘을 분리: 트래픽 전환(체감 복구) ≠ RTO(쓰기 경로 완전 복구). RPO는 60초(ReplicaLag).
  • Route53 헬스체크는 글로벌 단일 — "서울 헬스체크"가 아니라 api.farmily.info FQDN 1개를 보는 글로벌 체크(메트릭은 항상 us-east-1 발행). 패널명 "API 글로벌 헬스체크"로 리네임, "서울정상" 값 매핑 제거.
  • 5xx 비율 ArithmeticError(m5xx/requests)*100은 requests=0일 때 NaN. 최종 IF(requests, 100*FILL(m5xx,0)/requests, 0)로 0 division 가드. CloudWatch metric math: 결측은 FILL(m,0), 0 나눗셈은 IF().
  • Backend 인시던트 — main 직접 push의 함정 — main 직접 push는 feat→push-image(dev 이미지 빌드)를 건너뜀 → dev-<sha> 부재 → prod 승격(crane copy) 스킵(설계된 안전망 "결정 C"). FF로 feat 동기화 후 prod 워크플로 재실행으로 복구. → 교훈: Infra·Backend 공통 main 직접 push 금지, 항상 feat→PR.
  • Karpenter 패널 No data = 정상nodes_created_total·프로비저닝 히스토그램은 이벤트 기반. 스케일 사건 없으면 빔. 노드 i-01df80(nodepool=default, on-demand)은 00:50 UTC 생성(5.5h 전)이라 대시보드 기본 now-1h 창 밖 → 비어 보임. Last 6h로 넓히면 보임.

Learned

AMP 운영 모니터링 용어집

수집 파이프라인 (인프라 — 익숙한 쪽)

  • Prometheus — 지표를 주기적으로 긁어 저장·쿼리하는 모니터링 시스템. 보통 클러스터 안에서 돈다.
  • AMP (Amazon Managed Prometheus) — 클러스터 의 관리형 Prometheus 저장소. 클러스터가 죽어도 지표가 남는다.
  • remote-write — 클러스터 안 Prometheus가 긁은 지표를 AMP로 실시간 복사 전송하는 것.
  • ServiceMonitor — "이 서비스의 /metrics를 긁어라"고 Prometheus에 알려주는 설정 객체. release 라벨로 Prometheus가 자기 대상인지 판별.
  • kube-state-metrics — 쿠버네티스 API 상태(노드 수·파드 Ready 등)를 Prometheus 지표로 내보내는 컴포넌트.
  • node-exporter — 노드(서버)의 CPU·메모리 등 OS 지표를 내보내는 컴포넌트.
  • IRSA — 파드에 IAM 역할을 임시 토큰으로 부여하는 EKS 인증(키를 코드에 안 박음). 어노테이션은 기존 파드에 소급 안 됨 → 추가 후 파드 재시작 필요.
  • SigV4 — AWS API 호출을 임시 자격증명으로 서명하는 방식.

통계·쿼리 (대시보드 읽기)

  • rate() — 계속 쌓이는 카운터의 초당 증가율. "총 몇 개"가 아니라 "초당 몇 개 늘었나".
  • 히스토그램 / _bucket — 값 분포를 구간별로 센 지표. 여기서 백분위를 뽑는다.
  • 백분위 p90 / p99 — 줄 세웠을 때 그 위치 값. p90 = 100개 중 90개는 이 값 안에 들어오고, 가장 느린 10%만 초과. 평균이 숨기는 꼬리 지연을 드러냄.
  • sum by(라벨) — 같은 지표를 라벨별로 묶어 합산.

서비스 메시 (Istio)

  • 서비스 메시 — 마이크로서비스끼리의 통신을 중간에서 관리하는 인프라 계층.
  • Envoy 사이드카 — 각 앱 파드 옆에 한 개씩 붙는 프록시 컨테이너. 그 파드의 모든 트래픽이 통과 → 앱 코드 수정 없이 요청 수·지연·에러 자동 측정.
  • Istio — 그 서비스 메시를 구현한 도구.

오토스케일링

  • KEDA — 큐 길이 같은 외부 이벤트를 보고 파드(앱 서버) 수를 자동 조절. (쿠버 기본은 CPU·메모리만 봄)
  • ScaledObject — KEDA에서 "무엇을 보고 어떻게 스케일할지" 정의한 설정 단위. scaler = 실제로 외부 값을 읽어오는 부분.
  • Karpenter노드(EC2 서버 자체)를 자동으로 띄우고 거두는 오토스케일러. 스케줄 못 받은 파드를 보고 딱 맞는 인스턴스를 즉석 생성.
  • NodePool — Karpenter가 노드를 띄울 규칙 묶음. NodeClaim = 그 규칙으로 노드 한 대를 요청하는 단위.
  • consolidation — Karpenter가 한가할 때 노드를 합쳐 줄이는 최적화.

배포

  • Argo Rollouts — 새 버전을 한 번에 안 바꾸고 트래픽을 점진적으로 넘기며 배포하는 도구.
  • 카나리(canary) — 신버전에 트래픽을 10%→50%→100%로 단계적으로 늘리는 배포(일부만 먼저 노출해 위험 탐지).
  • phase — Rollout 진행 상태. Progressing(진행 중)·Healthy(정상)·Degraded(문제).

기타

  • 파드(Pod) — 컨테이너를 묶은 쿠버네티스 최소 배포 단위. Ready = 트래픽 받을 준비 완료.
  • OOM (Out Of Memory) — 메모리 부족으로 프로세스가 강제 종료되는 것.
  • distroless — 셸·기본 유틸이 없는 최소 컨테이너 이미지(공격면 축소). 그래서 kubectl exec ... env가 안 됨 → 검증은 pod spec(-o jsonpath).

출처: 2026-06-26 AMP 운영 대시보드 구축. 상세는 설계서/모니터링/Farmily-AMP-운영모니터링-설계서.md · 레퍼런스 PDF(바탕화면).

Prompt(회고)

  • 이제 인프라 관련 작업들은 거의 끝났다 드디어 거의 끝나감을 몸소 느끼고있다. 뭔가 한것은 많이 없는거 같은데 왜 오랫동안 한거같은 생각이... 아마 내가 잘 못해서인가라는 생각이 든다.
  • 이제 마무리를 향해 달려가는 만큼 최선을 다해서 PPT와 유종의 미를 거두리라라는 생각으로 하겠다.
profile
나를 한줄로

0개의 댓글