AI-Powered AWS Operations Dashboard
Junseok Oh | Solutions Architect | AWS

| 항목 | 내용 | 설명 |
|---|---|---|
| Infra | Terraform MSA | 비공개 엣지 — CloudFront VPC Origin → 내부 ALB → Fargate |
| Compute | ECS Fargate | web thin-BFF + OOM-safe 비동기 워커 티어 (arm64) |
| Data | Aurora Serverless v2 | PostgreSQL 17 영속 상태 + 41종 인벤토리 sync |
| AI Tools | 9 게이트웨이 설계 (160+ 도구) · 30개 슬라이스 전부 LIVE | AgentCore 섹션 에이전트 (모두 read-only; 9개 게이트웨이 전부 READY MCP 타깃) |
| AI Routing | ADR-003 하이브리드 | regex fast-path + Haiku 분류기, 게이트 96.9% |
| Diagnosis | light·mid 9 / deep 16 섹션 | Well-Architected 매핑, DOCX/PDF 내보내기 |
| UX | 3-테마 + 모바일 + 4개 언어 | 반응형 대시보드 + Cmd-K + 한/영/中/日 i18n |

AWSops 기술 아키텍처
Terraform 기반 MSA · 비공개 엣지 · 읽기 전용 운영 태세
CloudFront-VPCOrigins-Service-SG
awsops-v2-web:3000 (thin-BFF, arm64)
terraform/v2/foundation/awsops-v2-tfstate, use_lockfile (DynamoDB 없음)apply tfplan (no -auto-approve)LIVE 오늘: workers · steampipe · agentcore · integrations · ai_cost_tracking · diagnosis_schedule · diagnosis_notify · eks_auto_register · hybrid_routing
agentcore_enabled · workers_enabled · steampipe_enabledhybrid_routing_enabled · diagnosis_schedule_enabled · diagnosis_notify_enabledincident_lifecycle_enabled · k8sgpt_enabled · rca_writeback_enabledeks_auto_register_enabled · ai_cost_tracking_enabled · multi_route_synthesis_enabledremediation_enabled — ADR-005 FROZEN, do-not-enable.tf Files (2/2)| 파일 | 역할 |
|---|---|
network.tf | VPC 신규/재사용 |
edge.tf | CloudFront + VPC Origin + ALB |
auth.tf | Cognito + Lambda@Edge |
data.tf | Aurora + schema |
workload.tf | ECS web service |
ecr.tf | dual-tier ECR |
ai.tf | AgentCore + SSM |
workers.tf | SQS + SFN + Lambda |
| 파일 | 역할 |
|---|---|
eks.tf | Access Entry + AdminView |
steampipe.tf | 인벤토리 sync (steampipe_enabled) |
notify.tf | 진단 알림 SNS (diagnosis_notify_enabled) |
incidents.tf | 인시던트 webhook (incident_lifecycle_enabled) |
k8sgpt.tf | K8sGPT 예산/리소스 (k8sgpt_enabled) |
writeback.tf | RCA write-back (rca_writeback_enabled) |
remediation.tf | 리메디에이션 substrate (FROZEN) |
secret-rotation.tf | 자기치유 재배포 (ADR-015) |
/api/*POST /api/jobs는 noop 계열만, report/compliance 등 도메인 job은 소유권 검사하는 전용 라우트(ADR-009)/api/health — 공개 헬스체크/api/stream — SSE 스트리밍/api/db — Aurora ping/api/jobs (+/[id]) — 비동기 작업/api/health. 불일치 시 circuit breaker 루프.web/lib/db.ts)worker_jobs · chat threads · diagnosismigrations/_*.sql )steampipe_enabled)agent/agent.py)/ops/awsops-v2/agentcore/*
observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 ADR-001/010에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨/assistant full page
worker_jobs (queued) + SQS
$.runtimereport_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨; ADR-13이 명시적으로 승인한 건 스케줄 진단 요약뿐이라 수동 실행분까지 배치하는 현재 구현은 ADR 범위를 넘어섬 — 후속 ADR 정리 필요)steampipe_enabled)
/datasources Explore 페이지 + NL→query/topology/resource/[id] 상세 패널eks_registrations.auth)configure.mjs 멀티선택 → eks.tf Access Entry + AmazonEKSAdminViewPolicy(클러스터 스코프, View 아님 — View는 cluster-scoped list 403)eks_registrations (eks_auto_register_enabled)ListClusters/DescribeCluster)는 ungated·always-on(workload.tf) — /api/eks·/api/overview·/api/cost는 온보딩 flag와 무관하게 항상 동작AWSopsReadOnlyRole을 host task role이 STS AssumeRole__all__ = 전 계정 fan-outget_role_arn()이 None 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지)/accounts admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음)state + PKCE public client/login 폼POST /api/auth/login → 무서명 공개 InitiateAuth(USER_PASSWORD_AUTH) → awsops_token (id_token 12h)make configure
— TUI → terraform.tfvars + backend.hcl
terraform init / plan -out tfplan
→ 컨트롤러가 apply tfplan (공유 인프라)
make deploy
— migrate-first → arm64 build → ECR → ECS rolling → wait stable → smoke /api/health
make agentcore / make workers
— 각 flag로 apply 후 실행
ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지 ADR-005 전부는 그대로 동결.
AI-Powered AWS Operations Dashboard
감사합니다 · Questions?
실전 시나리오와 종합진단
🔍 하이브리드 라우팅 (regex + Haiku)...
Gateway: cost · 프롬프트 캐싱 hit
📊 AgentCore 섹션 에이전트 · 라이브 read-only 조회...
MCP Tools ✅ Cost Explorer ✅ EKS Metrics ✅
🤖 Bedrock 분석 · SSE 스트리밍...

답변과 함께 라우트·도구 사용 내역 표시 · 대화는 Aurora thread로 영속 저장 (resizable drawer와
/assistant전체 화면이 같은 thread 공유)
"비용 개선점 찾아줘"
권장사항만 제시 · 자동 적용 없음 (mutating 설치 버튼은 ADR-005로 동결 — do-not-enable)

서비스별 비용·추이 시각화 → rightsizing 후보 도출 · 권장만 제시, 자동 적용 없음
/inventory/[type]페이지 → AgentCore 질의
/inventory/[type] 제네릭 페이지Steampipe = 인벤토리 sync 전용 (Aurora 적재) 라이브 조회는 AgentCore MCP 도구가 담당

페이지별 mini-dashboard에서 후보를 좁히고 → AgentCore 라이브 조회로 현황 보강
/topology/resource/[id] 상세 · blast radius 진단
노드 클릭 →
/topology/resource/[id]상세 · blast radius(영향 범위) 추적 — 사람이 그래프를 보며 진단하는 read-only 방식

자동 제목 · 태그 · 소프트 삭제 지원 — 리포트 목록과 상세 화면에서 열람
diagnosis/{id}.docx · diagnosis/{id}.pdfdeleted_at)deleted_at IS NULLtitle / tags는 React-escape 렌더 (raw HTML 주입 없음)
diagnosis_schedule_enabled)report_schedules 테이블 — 주간 / 격주 / 월간 (next_run_at 기준)schedule_dispatcher — 스캔 후 report job enqueuereport-scheduler.ts 패턴 승계diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨; ADR-13이 승인한 건 스케줄 요약뿐이라 수동 실행분까지 묶는 현재 범위는 ADR 정리 대상)/datasources)
NL → query 변환 + 챗 주입 · 스키마는 Aurora 캐시 · 전 커넥터 READ만
표면적으로는 콘솔이지만, 각 서비스마다 왜 문제인지 설명하는 진단 가이드가 붙어있다.
GuideSpec — 서비스 추가는 컴포넌트가 아니라 데이터 추가ADR-011 — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계).
make configure → Terraform applymake deploy/loginAWSops — AI-Powered AWS Operations Dashboard
Junseok Oh | Solutions Architect | AWS