Skip to content

Instantly share code, notes, and snippets.

@ianychoi
Created February 4, 2026 00:40
Show Gist options
  • Select an option

  • Save ianychoi/12055a7cb51a46c662920f04f55f02df to your computer and use it in GitHub Desktop.

Select an option

Save ianychoi/12055a7cb51a46c662920f04f55f02df to your computer and use it in GitHub Desktop.
AI-Powered Containers Ops in Amazon ECS

Note

아래 내용은 AI-Powered Container Ops: Building and Deploying with MCP Servers on AWS 에 언급된 ECS 부분을 한글로 번역한 것입니다.

AI 기반 Amazon ECS 컨테이너 운영

AI 기반 Amazon ECS 컨테이너 운영 예시

한 기업이 현대적인 마이크로서비스 아키텍처를 기반으로 한 상품 카탈로그 시스템을 구현하려 합니다. 이 솔루션은 사용자에게 표시되는 React 프론트엔드와 백엔드 API 서비스로 구성되며, 두 서비스 모두 기존 Amazon ECS 인프라 위에 배포됩니다. 프론트엔드 애플리케이션은 사용자가 간단한 인터페이스를 통해 상품 정보를 조회할 수 있도록 하며, 백엔드 서비스는 Swagger UI로 문서화된 RESTful API를 통해 상품 데이터 카탈로그를 관리합니다. 기업은 MCP 서버를 활용해 ECS 환경 내에서 이러한 서비스 간의 배포와 통신을 오케스트레이션합니다.

이 구현은 ECS의 내부 서비스 디스커버리 메커니즘을 통해 프론트엔드 서비스가 백엔드 API와 보안적으로 비공개 통신을 수행하는 패턴을 보여줍니다. 백엔드 서비스는 Swagger UI를 통해 잘 문서화된 API 인터페이스를 제공하여 개발 팀이 API 계약을 더 쉽게 이해하도록 돕습니다. 두 서비스 모두 적절한 작업 정의와 서비스 구성을 가진 ECS 태스크로 배포되며, MCP 서버가 리소스 활용도와 가용성을 최적화하도록 지능적으로 관리합니다.

예상 결과

이 기업은 Amazon ECS에서의 효율적인 서비스 간 통신 패턴을 보여주는 프로덕션 수준의 마이크로서비스 배포를 달성하게 됩니다. 이 구현은 AI 기반 MCP 서버가 서비스 디스커버리, 부하 분산, 컨테이너 배치 결정을 지능적으로 관리하는 방법을 보여줍니다. 배포의 성공은 향후 마이크로서비스 구현을 위한 참조 아키텍처(reference architecture) 로 활용되며, AI 지원 컨테이너 운영의 신뢰성, 확장성, 유지보수성 측면에서의 이점을 강조하게 됩니다.

참조 아키텍처 예시

ecs-operations/simple-architecture

🚀 AI-Ops 챌린지: ECS Fargate에 배포하기

당신의 미션

현재 AWS 리전에는 미리 구성된 ECS 클러스터(ecs-workshop)가 있고, AWS CLI와 VS Code IDE 플러그인이 사전 설치되어 있습니다. 당신의 챌린지는 사용자용 React 프론트엔드와 백엔드 API 서비스를 생성하고, 이를 Application Load Balancer와 함께 Amazon ECS Fargate에 배포하는 것입니다.

사전 준비 사항:

  • 현재 AWS 리전에 미리 구성된 ECS 클러스터(ecs-workshop)

💡 챌린지 접근 방식: 우선은 드롭다운 프롬프트 제안보다는 Kiro에게 창의적인 질문을 던지면서 스스로 각 목표를 달성해 보세요. 가이던스가 필요하거나 자신의 접근 방식을 비교해 보고 싶을 때만 프롬프트 제안을 사용하세요.

워크스페이스 설정

mkdir -p ~/environment/ai-ops-workshop/ecs && cd ~/environment/ai-ops-workshop/ecs

Kiro Chat 초기화

kiro-cli chat

Note

참고: 신뢰되지 않은 도구를 사용할 때 Kiro CLI가 권한을 요청합니다.

Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:

각 단계를 직접 검토하고 싶다면 y를, Kiro CLI의 동작을 이미 잘 알고 있거나 신뢰한다면 t를 입력하는 것을 권장합니다.

챌린지 1: 최신 React 프론트엔드와 백엔드 API 마이크로서비스 생성 🎯

프롬프트 아이디어:

  • 현재 디렉터리에 사용자용 React 프론트엔드 앱을 생성하라는 지시
  • 프론트엔드 앱은 사용자가 간단한 인터페이스를 통해 상품 정보를 조회할 수 있도록 할 것
  • 백엔드 API 서비스를 생성하라는 지시. 백엔드 서비스는 Swagger UI로 문서화된 RESTful API를 통해 상품 데이터 카탈로그를 관리
  • React 애플리케이션에 포함할 모던한 스타일과 애니메이션
  • 웹 페이지에 보여줄 콘텐츠
  • 애플리케이션 헬스 체크 방법
  • 두 애플리케이션을 Docker 컨테이너로 패키징하기 위한 Dockerfile 작성 지시
  • Dockerfile은 Amazon ECS Fargate 런치 타입 배포에 호환되도록 작성
  • 로컬에서 애플리케이션을 배포 및 테스트하는 데 사용할 Docker Compose 파일 생성
  • 프론트엔드 Docker 이미지 태그: ai-ops-frontend-ecs:latest
  • 백엔드 Docker 이미지 태그: ai-ops-backend-ecs:latest
💡 힌트가 필요하다면? “Kiro 프롬프트 제안”을 클릭하세요.
1. AI-Ops 워크숍용 프로페셔널 React 프론트엔드 앱을 현재 디렉터리에 생성하세요. 애플리케이션은 다음 요구사항을 충족해야 합니다.
- 제목이 "Welcome to AIOps with Amazon ECS Workshop"인 환영 페이지를 가질 것
- 백엔드 API 서비스에서 상품 정보를 조회하기 위한 버튼과 링크를 포함할 것
- 그라디언트와 애니메이션이 포함된 모던한 스타일 적용
- 반응형이며 프로덕션 준비 상태일 것
- 애플리케이션 헬스 체크에 사용할 “/health” 엔드포인트를 제공하고 HTTP 상태 코드 200을 반환할 것
- 서비스 간 통신 테스트를 위해 컨테이너 내에서 nslookup과 curl 명령을 실행할 수 있어야 함
- Docker 이미지는 "ai-ops-frontend-ecs:latest" 태그로 빌드할 것

2. 현재 디렉터리에 프로페셔널한 백엔드 API 서비스를 생성하세요.
- 백엔드 서비스는 Swagger UI로 문서화된 RESTful API를 통해 상품 데이터 카탈로그를 관리
- Swagger UI로 문서화된 RESTful API를 실행하기 위한 Docker 베이스 이미지 사용
- 기본 헬스 체크 엔드포인트 제공
- 서비스 간 통신 테스트를 위해 컨테이너 내에서 nslookup과 curl 명령을 실행할 수 있어야 함
- Docker 이미지는 "ai-ops-backend-ecs:latest" 태그로 빌드할 것

3. 애플리케이션을 로컬에서 배포 및 테스트하는 데 사용할 Docker Compose 파일을 생성하세요.
- 로컬 테스트를 위해 프론트엔드와 백엔드 API 서비스에 각각 3000, 3001 포트를 할당
- 로컬 테스트용 docker-compose 명령을 출력
- 두 애플리케이션을 Docker 컨테이너로 패키징하기 위한 Dockerfile 생성
- Dockerfile은 프로덕션용으로 최적화된 멀티스테이지 Dockerfile이어야 하며, Linux 운영체제에 호환되어야 함
- Dockerfile은 Amazon ECS Fargate 런치 타입 배포에 호환되어야 함

모든 필요한 파일을 생성하고, 프로페셔널한 스타일과 완전한 애플리케이션 설정을 포함하세요.

4. 로컬에서 빌드 및 테스트

애플리케이션 로컬 검증

아래 명령을 실행하여 AI 지원으로 생성된 컨테이너 서비스를 확인합니다.

curl -s http://localhost:3000/ | head -10
curl -s http://localhost:3001/api/products

지식 점검 (로컬 실행)

1) 로컬에서 Docker 컨테이너가 실행 중인지 어떻게 확인하나요?
🧪 정답 보기 클릭

docker ps 명령을 실행하면 됩니다. (예시 결과는 아래를 참고합니다)

result

2) 브라우저에서 백엔드 API 서비스는 어떻게 보이나요?-what-does-the-backend-api-service-look-like-in-the-browser)
🧪 정답 보기 클릭

다른 터미널에서 아래 명령을 실행해 AI로 생성된 컨테이너 서비스를 브라우저에서 확인합니다.

python3 -m webbrowser $IDE_URL/proxy/3001/api-docs

result

3) 두 서비스가 서로 통신할 수 있나요?-can-your-services-communicate-with-each-other)
🧪 정답 보기 클릭

다른 터미널에서 아래 명령을 실행해 서비스 간 통신을 테스트합니다.

docker exec ai-ops-frontend nslookup backend
docker exec ai-ops-frontend curl -s http://backend:3001/health
docker exec ai-ops-backend nslookup frontend  
docker exec ai-ops-backend curl -s http://frontend:3000/health

참고: 환경에 따라 서비스 이름을 변경해야 할 수 있습니다.

챌린지 2: Docker 이미지를 Amazon ECR에 푸시 🐳📦

목표: 애플리케이션을 프로덕션 수준으로 준비하고 이미지를 Amazon ECR에 푸시합니다.

프롬프트 아이디어:

  • AWS 배포를 위해 애플리케이션을 준비하고, 서비스 간 통신은 하드코딩 대신 환경 변수를 사용하도록 변경
  • 기존 Amazon ECS 클러스터와 같은 리전에 Amazon ECR 리포지토리를 생성하고, Docker 이미지를 해당 ECR 리포지토리에 푸시하라는 지시
  • Amazon ECR 리포지토리 이름을 "ai-ops-backend-ecs" 및 "ai-ops-frontend-ecs"로 지정하라는 지시
💡 힌트가 필요하다면? “Kiro 프롬프트 제안”을 클릭하세요.
1. Amazon ECS Fargate에 배포할 수 있도록 애플리케이션을 준비하고, 서비스 간 통신 주소는 하드코딩 대신 환경 변수를 사용하도록 변경합니다.

2. 기존 Amazon ECS 클러스터와 동일한 리전에 Amazon ECR을 생성하고, 다음을 수행합니다.
- "ai-ops-backend-ecs" 및 "ai-ops-frontend-ecs"라는 Amazon ECR 리포지토리를 생성
- 현재 AWS 자격 증명을 사용해 Docker를 ECR에 인증
- 이미지를 ECR용으로 태깅
- 이미지를 ECR에 푸시
- 배포에 사용할 완전한 ECR 이미지 URI를 제공

챌린지 3: 애플리케이션을 Amazon ECS에 배포하고 ALB로 노출 🚀

목표: 기존 Amazon ECS 클러스터에 애플리케이션을 배포하고, 퍼블릭 Application Load Balancer를 통해 애플리케이션을 노출합니다.

프롬프트 아이디어:

  • 생성된 Amazon ECR 이미지를 ECS 태스크 정의에서 사용하라는 지시
  • 적절한 리소스 할당을 가진 Fargate 타입 ECS 태스크 정의 생성
  • 로드 밸런서를 활성화한 ECS 서비스 생성
  • 헬스 체크, 로깅, 네트워킹 구성
  • 배포 검증
  • 두 서비스가 동일한 로드 밸런서를 사용하고, 각각의 ALB 리스너 포트를 지정하도록 구성
💡 힌트가 필요하다면? “Kiro 프롬프트 제안”을 클릭하세요.
기존 이미지를 사용하여 빌드하고 기존 ECS 클러스터에 Fargate 유형으로 배포합니다.

1. ECS 태스크 정의 생성:

- 백엔드와 프론트엔드 각각에 "ai-ops-backend-ecs", "ai-ops-frontend-ecs" ECR 리포지토리 이미지 사용
- Fargate 런치 타입 사용
- /health 엔드포인트에 컨테이너 헬스 체크 구현
- CloudWatch 로깅 구성
- ECR 접근 및 CloudWatch 로깅을 위한 필요한 IAM 태스크 실행 역할 생성

2. 로드 밸런싱이 활성화된 ECS 서비스 생성:
- 기존 클러스터 ecs-workshop에 "ai-ops-backend-ecs", "ai-ops-frontend-ecs" 서비스 생성
- 고가용성 보장
- ECS 서비스에서 로드 밸런싱 활성화
- 헬스 체크 경로 /health 구성
- 태스크는 프라이빗 서브넷 사용
- HTTP 트래픽용 보안 그룹 설정
- ai-ops-alb라는 Application Load Balancer 생성, 두 서비스 모두 이 로드 밸런서를 사용
- ai-ops-frontend-ecs는 로드 밸런서의 80 포트에서 리슨, ai-ops-backend-ecs는 8080 포트에서 리슨

3. 검증:
- 서비스 상태와 실행 중인 태스크 확인
- 자동으로 생성된 ALB DNS 이름 확인

⏳ 중요: ECS 서비스와 로드 밸런서를 배포한 후, ALB가 “active” 상태가 될 때까지 약 3분을 기다린 뒤 애플리케이션에 접근해야 합니다. EC2 콘솔의 Load Balancers에서 ALB 상태를 확인할 수 있습니다. 너무 일찍 접근하면 연결 타임아웃이나 에러가 발생할 수 있습니다.

지식 점검

챌린지 4: 프론트엔드 ECS 서비스 오토스케일링 구현 📈

목표: 챌린지 1에서 배포한 프론트엔드 애플리케이션 서비스에 대해 CPU 사용량과 ALB 요청 메트릭 기반 ECS 서비스 오토스케일링을 구성합니다.

실제 시나리오를 시뮬레이션하기 위해, 다른 터미널에서 hey 도구로 부하를 생성합니다.

export ALB_URL=<YOUR-ECS-SERVICE-FRONTEND-ALB-URL>
hey -c 5 -n 30000 -z 3m "${ALB_URL}"

이 명령은 약 3분 동안 30000개의 요청을 실행합니다. YOUR-ECS-SERVICE-FRONTEND-ALB-URL을 앞 단계에서 얻은 ALB URL로 바꾸세요.

목표: Kiro를 사용해 프론트엔드 애플리케이션의 오토스케일링 용량 필요치를 파악하고, CPU 리소스 수요 변화에 효율적으로 반응할 수 있도록 오토스케일링을 설정합니다.

프롬프트 아이디어:

  • ECS에서 프론트엔드 애플리케이션의 CPU/메모리 사용률 검토 및 분석
  • ECS 서비스용 Application Auto Scaling 타깃 생성
  • 관측된 메트릭 기반 CPU 타깃 트래킹 스케일링 정책 생성
  • AWS 모범 사례에 따른 ALB 요청 수 기반 스케일링 정책 설정
  • 스케일링 임계값과 쿨다운 기간을 AWS 모범 사례에 맞춰 정의
  • 부하 하에서 오토스케일링 동작 테스트
💡 힌트가 필요하다면? “Kiro 프롬프트 제안”을 클릭하세요.
Implement ECS Service Autoscaling for the ai-ops-frontend-ecs

1. Amazon ECS에서 워크로드 리소스 사용률 검토

2. 스케일 가능한 타깃 등록:
- ECS 서비스 "ai-ops-frontend-ecs"를 Application Auto Scaling에 스케일 대상로 등록
- 관측된 메트릭을 바탕으로 최소/최대 용량 설정

3. CPU 기반 스케일링 정책 생성:
- CPU 사용률 타깃 트래킹 정책 구성
- CPU 사용률을 기준으로 빠른 스케일 아웃
- 모범 사례에 따른 스케일 인 구성

4. ALB 요청 기반 스케일링 정책 생성:
- 타깃 트래킹 정책을 ALB 요청 수(타깃당 요청 수)에 대해 설정
- 관측된 메트릭 기반 타깃 값 설정
- 적절한 쿨다운 기간 구성

5. 오토스케일링 테스트:
- hey를 이용해 부하 생성
- CloudWatch 및 ECS 콘솔에서 스케일링 이벤트 확인
- 부하 동안 태스크 수 변화를 모니터링

테스트용 예시 명령(요약):

터미널 1 – 부하 생성:

ALB_DNS=$(aws elbv2 describe-load-balancers --query 'LoadBalancers[0].DNSName' --output text)
hey -c 5 -n 30000 -z 5m "${ALB_DNS}"

터미널 2 – 태스크 수 모니터링:

watch -n 10 'aws ecs describe-services --cluster ecs-workshop --services ai-ops-frontend-ecs --query "services[0].{RunningCount:runningCount,DesiredCount:desiredCount}"'

터미널 3 – CPU 사용률 모니터링:

aws cloudwatch get-metric-statistics --namespace AWS/ECS --metric-name CPUUtilization --dimensions Name=ServiceName,Value=ai-ops-frontend-ecs Name=ClusterName,Value=ecs-workshop --start-time $(date -u -d '10 minutes ago' +%Y-%m-%dT%H:%M:%S) --end-time $(date -u +%Y-%m-%dT%H:%M:%S) --period 300 --statistics Average

예상 결과:

  • 부하 동안 태스크 수가 2에서 더 높은 값으로 증가
  • CPU 사용률이 설정한 임계값을 초과하면 스케일 아웃
  • 부하 종료 후 쿨다운 기간을 거쳐 태스크 수가 다시 줄어듦

챌린지 5: ECS 서비스 간 통신 구현 🔗

목표: ECS Service Connect를 설정하여 프론트엔드 앱(서비스 A)과 백엔드 API 앱(서비스 B) 간 서비스 네임스페이스 기반 서비스 간 통신을 구성하고, 서비스 A가 ECS Service Connect DNS 이름으로 제공되는 백엔드 서비스 이름을 통해 연결할 수 있게 합니다.

프롬프트 아이디어:

  • ECS Service Connect 네임스페이스 생성
  • Service Connect가 활성화된 상태로 백엔드 API 서비스 재배포
  • Service Connect 클라이언트 구성을 사용해 프론트엔드 서비스 재배포
  • 프론트엔드 앱의 버튼과 링크를 ECS Service Connect DNS가 제공하는 백엔드 서비스 이름을 사용하도록 업데이트
  • 포트 매핑 및 서비스 이름 구성
  • 서비스 간 통신 테스트
💡 힌트가 필요하다면? “Kiro 프롬프트 제안”을 클릭하세요.
Implement ECS Service Connect for microservices communication

1. Service Connect 네임스페이스 생성:
- "ai-ops-namespace"라는 ECS Service Connect 네임스페이스 생성
- 기존 ECS 클러스터에 네임스페이스 구성
- Service Connect 서버로 백엔드 API 서비스(Service B) 재배포:

2. 백엔드 API 서비스의 태스크 정의 업데이트
- Service Connect 서버로 활성화하고 서비스 이름을 "ai-ops-backend-ecs"로 설정
- 필요한 컨테이너 포트와 서비스 디스커버리 포트 매핑 구성
- Service Connect 클라이언트로 프론트엔드 서비스(Service A) 재배포:

3. 기존 프론트엔드 앱 태스크 정의 업데이트
- Service Connect 클라이언트 전용으로 활성화
- 환경 변수 API_URL을 백엔드 서비스의 HTTP 주소로 설정
- Service Connect 클라이언트를 백엔드 서비스에 연결하도록 구성
- 연결 테스트를 위해 ECS Execute Command 활성화

4. 서비스 구성:
- Service Connect 서버 구성이 적용된 백엔드 서비스 배포
- Service Connect 클라이언트 구성이 적용된 프론트엔드 서비스 배포
- 두 서비스 모두 동일한 Service Connect 네임스페이스 사용
- 두 서비스 모두에서 executeCommand 활성화
- 태스크 실행 역할에 SSM 권한을 추가해 execute command 지원

5. Service Connect 테스트:
- 프론트엔드가 서비스 이름과 포트를 통해 백엔드 API를 호출할 수 있는지 확인
- Service Connect 로그 및 메트릭 확인
- 서비스 간 API 통신 테스트

Service Connect 상태 확인 예시:

aws servicediscovery list-namespaces

aws ecs describe-services --cluster ecs-workshop --services ai-ops-backend-ecs ai-ops-frontend-ecs --query 'services[*].deployments[*].serviceConnectConfiguration'

지식 점검

프론트엔드 서비스에서 상품 정보를 가져오고, 브라우저 네트워크 탭에서 API 호출이 성공하는지 확인하며, 직접 IP 주소를 사용하지 않는지 검증합니다.

🏆 승리 조건

다음 조건을 달성하면 Amazon ECS에서의 AI 기반 컨테이너 운영을 마스터한 것입니다.

🚀 ECS Fargate 배포:

  • ✅ 전체 배포: 태스크 정의, ALB, ECS 서비스가 모두 생성 및 연동
  • ✅ 고가용성: ecs-workshop 클러스터에서 다수의 태스크 실행
  • ✅ 외부 접근: ALB DNS 이름을 통해 애플리케이션 접근 가능
  • ✅ 헬스 모니터링: 모든 헬스 체크 통과, 로그 확인 가능

📈 서비스 오토스케일링:

  • ✅ 스케일 대상 등록: ECS 서비스가 Application Auto Scaling에 스케일 대상로 등록
  • ✅ 스케일링 정책 생성: CPU 및 ALB 요청 기반 스케일링 정책 구성
  • ✅ 오토스케일링 테스트: 부하에 따라 서비스가 스케일 아웃/인
  • ✅ 모니터링 활성화: CloudWatch와 ECS 콘솔에서 스케일링 이벤트 확인 가능

🔗 Service Connect 통신:

  • ✅ Service Connect 설정: ECS Service Connect 네임스페이스 생성 및 구성
  • ✅ 마이크로서비스 배포: 프론트엔드와 백엔드 서비스 모두 Service Connect와 함께 실행
  • ✅ 서비스 간 통신: 프론트엔드에서 Service Connect를 통해 백엔드 API 호출 성공
  • ✅ 서비스 이름 해석: Service Connect 서비스 이름으로 서비스 간 통신 가능

🔧 막혔을 때: Kiro에게 도움 받기

일반적인 트러블슈팅 접근 방식 예시:

I'm getting this error with my ECS deployment: [여기에 구체적인 에러 메시지를 붙여넣으세요].
Help me troubleshoot and fix this issue with my [cluster/task definition/service/ALB].
Explain what might be causing this and provide step-by-step solutions.

🎯 보너스 챌린지

메인 챌린지 세 가지를 모두 완료했다면, 다음과 같은 고급 시나리오도 시도해 보세요.

  1. 고급 오토스케일링: 예측 스케일링 및 커스텀 메트릭 기반 스케일링 구현
  2. 블루/그린 배포: 무중단 배포를 위해 Amazon ECS 기본 제공 블루/그린 배포 사용
  3. 비용 최적화: Spot 인스턴스 및 라이트사이징 도입
  4. 모니터링: CloudWatch Container Insights 및 분산 트레이싱 추가
  5. API Gateway 연동: 서비스 앞단에 API Gateway 추가
  6. 멀티 AZ 배포: 여러 가용 영역에 서비스 배포

목표는 탐색하고, 실험하고, 학습하는 것입니다. Kiro에게 창의적인 질문을 하고 다양한 접근 방식을 시도해 보세요.

Kiro Chat 종료

모듈을 모두 마쳤다면 Kiro chat에서 나갑니다.

/exit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment