ExternalSecret CR 생성 → ESO가 Secrets Manager에서 값 가져옴 → K8s Secret 자동 생성 → pod에 env/volume으로 주입farmily-app-secrets ExternalSecret → farmily/prod/app Secrets Manager 참조farmily-app ServiceAccount → eks-app-iam-role (IRSA) → Secrets Manager 읽기 권한farmily-app SA → eks-app-iam-role / farmily-app-ai SA → eks-ai-iam-roleAssumeRoleWithWebIdentity → 임시 credential 반환 → pod가 AWS 접근AssumeRoleWithWebIdentity → 임시 credential → ECR push, crane copy 등AssumeRole → Terraform plan/apply용 임시 credential| Principal (신뢰 대상) | 역할 종류 | 예시 |
|---|---|---|
| OIDC URL (외부 IdP) | IRSA / GHA OIDC 역할 | oidc.eks.amazonaws.com/... → pod가 쓰는 Role |
token.actions.githubusercontent.com → GHA가 쓰는 Role | ||
| AWS Service | 서비스 역할 | ec2.amazonaws.com → EC2 인스턴스가 쓰는 Role |
lambda.amazonaws.com → Lambda 함수가 쓰는 Role | ||
ecs-tasks.amazonaws.com → ECS task가 쓰는 Role |
eks-app-iam-role → Trust: EKS OIDC URL → pod(IRSA)가 씀farmily-cicd-backend-role → Trust: GitHub OIDC URL → GHA가 씀ecs-tasks.amazonaws.com → ECS task가 씀ServiceMonitor 생성 → "이 label 가진 Service의 /metrics 엔드포인트를 긁어라"apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: farmily-app
spec:
selector:
matchLabels:
app: farmily-app # 이 label 가진 Service 대상
endpoints:
- port: http
path: /actuator/prometheus # Spring Boot 메트릭 경로
interval: 30sPodMonitor(Service 없이 pod 직접 대상), PrometheusRule(알림 규칙)farmily-ops (서울, ws-2f69639a...)farmily-grafana) = 일상 운영 대시보드 (CPU, 메모리, 요청 수, 에러율)Farmily-DR-Grafana) = DR 대시보드. 서울 리전 장애 시에도 도쿄에서 메트릭 조회 가능 (크로스 리전 쿼리)echo "hello", System.out.println() 등System.err.println(), 예외 스택트레이스 등command > output.txt → stdout만 파일로, 에러는 화면에command 2>&1 → stderr를 stdout으로 합침lint (보풀 잡는다는 의미)ERROR: DB connection failed at 14:30:01CPU: 72%, 메모리: 1.2GB, 요청 수: 150/s/metrics로 노출 → Prometheus가 수집)