Note
์๋ ๋ด์ฉ์ AI-Powered Container Ops: Building and Deploying with MCP Servers on AWS ์ ์ธ๊ธ๋ 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 ์ง์ ์ปจํ ์ด๋ ์ด์์ ์ ๋ขฐ์ฑ, ํ์ฅ์ฑ, ์ ์ง๋ณด์์ฑ ์ธก๋ฉด์์์ ์ด์ ์ ๊ฐ์กฐํ๊ฒ ๋ฉ๋๋ค.
ํ์ฌ 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/ecskiro-cli chatNote
์ฐธ๊ณ : ์ ๋ขฐ๋์ง ์์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๋ Kiro CLI๊ฐ ๊ถํ์ ์์ฒญํฉ๋๋ค.
Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:
๊ฐ ๋จ๊ณ๋ฅผ ์ง์ ๊ฒํ ํ๊ณ ์ถ๋ค๋ฉด y๋ฅผ, Kiro CLI์ ๋์์ ์ด๋ฏธ ์ ์๊ณ ์๊ฑฐ๋ ์ ๋ขฐํ๋ค๋ฉด t๋ฅผ ์ ๋ ฅํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
- ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์ฌ์ฉ์์ฉ 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๐งช ์ ๋ต ๋ณด๊ธฐ ํด๋ฆญ
docker ps ๋ช ๋ น์ ์คํํ๋ฉด ๋ฉ๋๋ค. (์์ ๊ฒฐ๊ณผ๋ ์๋๋ฅผ ์ฐธ๊ณ ํฉ๋๋ค)
2) ๋ธ๋ผ์ฐ์ ์์ ๋ฐฑ์๋ API ์๋น์ค๋ ์ด๋ป๊ฒ ๋ณด์ด๋์?-what-does-the-backend-api-service-look-like-in-the-browser)
๐งช ์ ๋ต ๋ณด๊ธฐ ํด๋ฆญ
๋ค๋ฅธ ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ ์คํํด AI๋ก ์์ฑ๋ ์ปจํ ์ด๋ ์๋น์ค๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ํ์ธํฉ๋๋ค.
python3 -m webbrowser $IDE_URL/proxy/3001/api-docs๐งช ์ ๋ต ๋ณด๊ธฐ ํด๋ฆญ
๋ค๋ฅธ ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ ์คํํด ์๋น์ค ๊ฐ ํต์ ์ ํ ์คํธํฉ๋๋ค.
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์ฐธ๊ณ : ํ๊ฒฝ์ ๋ฐ๋ผ ์๋น์ค ์ด๋ฆ์ ๋ณ๊ฒฝํด์ผ ํ ์ ์์ต๋๋ค.
๋ชฉํ: ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ก๋์ ์์ค์ผ๋ก ์ค๋นํ๊ณ ์ด๋ฏธ์ง๋ฅผ 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๋ฅผ ์ ๊ณต
๋ชฉํ: ๊ธฐ์กด 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 ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ๋๋ฌด ์ผ์ฐ ์ ๊ทผํ๋ฉด ์ฐ๊ฒฐ ํ์์์์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ชฉํ: ์ฑ๋ฆฐ์ง 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 ์ฝ์์์ ์ค์ผ์ผ๋ง ์ด๋ฒคํธ ํ์ธ
- ๋ถํ ๋์ ํ์คํฌ ์ ๋ณํ๋ฅผ ๋ชจ๋ํฐ๋ง
ALB_DNS=$(aws elbv2 describe-load-balancers --query 'LoadBalancers[0].DNSName' --output text)
hey -c 5 -n 30000 -z 5m "${ALB_DNS}"watch -n 10 'aws ecs describe-services --cluster ecs-workshop --services ai-ops-frontend-ecs --query "services[0].{RunningCount:runningCount,DesiredCount:desiredCount}"'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 ์ฌ์ฉ๋ฅ ์ด ์ค์ ํ ์๊ณ๊ฐ์ ์ด๊ณผํ๋ฉด ์ค์ผ์ผ ์์
- ๋ถํ ์ข ๋ฃ ํ ์ฟจ๋ค์ด ๊ธฐ๊ฐ์ ๊ฑฐ์ณ ํ์คํฌ ์๊ฐ ๋ค์ ์ค์ด๋ฆ
๋ชฉํ: 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 ํต์ ํ
์คํธ
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 ๊ธฐ๋ฐ ์ปจํ ์ด๋ ์ด์์ ๋ง์คํฐํ ๊ฒ์ ๋๋ค.
- โ ์ ์ฒด ๋ฐฐํฌ: ํ์คํฌ ์ ์, ALB, ECS ์๋น์ค๊ฐ ๋ชจ๋ ์์ฑ ๋ฐ ์ฐ๋
- โ ๊ณ ๊ฐ์ฉ์ฑ: ecs-workshop ํด๋ฌ์คํฐ์์ ๋ค์์ ํ์คํฌ ์คํ
- โ ์ธ๋ถ ์ ๊ทผ: ALB DNS ์ด๋ฆ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทผ ๊ฐ๋ฅ
- โ ํฌ์ค ๋ชจ๋ํฐ๋ง: ๋ชจ๋ ํฌ์ค ์ฒดํฌ ํต๊ณผ, ๋ก๊ทธ ํ์ธ ๊ฐ๋ฅ
- โ ์ค์ผ์ผ ๋์ ๋ฑ๋ก: ECS ์๋น์ค๊ฐ Application Auto Scaling์ ์ค์ผ์ผ ๋์๋ก ๋ฑ๋ก
- โ ์ค์ผ์ผ๋ง ์ ์ฑ ์์ฑ: CPU ๋ฐ ALB ์์ฒญ ๊ธฐ๋ฐ ์ค์ผ์ผ๋ง ์ ์ฑ ๊ตฌ์ฑ
- โ ์คํ ์ค์ผ์ผ๋ง ํ ์คํธ: ๋ถํ์ ๋ฐ๋ผ ์๋น์ค๊ฐ ์ค์ผ์ผ ์์/์ธ
- โ ๋ชจ๋ํฐ๋ง ํ์ฑํ: CloudWatch์ ECS ์ฝ์์์ ์ค์ผ์ผ๋ง ์ด๋ฒคํธ ํ์ธ ๊ฐ๋ฅ
- โ Service Connect ์ค์ : ECS Service Connect ๋ค์์คํ์ด์ค ์์ฑ ๋ฐ ๊ตฌ์ฑ
- โ ๋ง์ดํฌ๋ก์๋น์ค ๋ฐฐํฌ: ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ์๋น์ค ๋ชจ๋ Service Connect์ ํจ๊ป ์คํ
- โ ์๋น์ค ๊ฐ ํต์ : ํ๋ก ํธ์๋์์ Service Connect๋ฅผ ํตํด ๋ฐฑ์๋ API ํธ์ถ ์ฑ๊ณต
- โ ์๋น์ค ์ด๋ฆ ํด์: Service Connect ์๋น์ค ์ด๋ฆ์ผ๋ก ์๋น์ค ๊ฐ ํต์ ๊ฐ๋ฅ
์ผ๋ฐ์ ์ธ ํธ๋ฌ๋ธ์ํ ์ ๊ทผ ๋ฐฉ์ ์์:
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.
๋ฉ์ธ ์ฑ๋ฆฐ์ง ์ธ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์๋ฃํ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๊ณ ๊ธ ์๋๋ฆฌ์ค๋ ์๋ํด ๋ณด์ธ์.
- ๊ณ ๊ธ ์คํ ์ค์ผ์ผ๋ง: ์์ธก ์ค์ผ์ผ๋ง ๋ฐ ์ปค์คํ ๋ฉํธ๋ฆญ ๊ธฐ๋ฐ ์ค์ผ์ผ๋ง ๊ตฌํ
- ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ: ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ์ํด Amazon ECS ๊ธฐ๋ณธ ์ ๊ณต ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์ฌ์ฉ
- ๋น์ฉ ์ต์ ํ: Spot ์ธ์คํด์ค ๋ฐ ๋ผ์ดํธ์ฌ์ด์ง ๋์
- ๋ชจ๋ํฐ๋ง: CloudWatch Container Insights ๋ฐ ๋ถ์ฐ ํธ๋ ์ด์ฑ ์ถ๊ฐ
- API Gateway ์ฐ๋: ์๋น์ค ์๋จ์ API Gateway ์ถ๊ฐ
- ๋ฉํฐ AZ ๋ฐฐํฌ: ์ฌ๋ฌ ๊ฐ์ฉ ์์ญ์ ์๋น์ค ๋ฐฐํฌ
๋ชฉํ๋ ํ์ํ๊ณ , ์คํํ๊ณ , ํ์ตํ๋ ๊ฒ์ ๋๋ค. Kiro์๊ฒ ์ฐฝ์์ ์ธ ์ง๋ฌธ์ ํ๊ณ ๋ค์ํ ์ ๊ทผ ๋ฐฉ์์ ์๋ํด ๋ณด์ธ์.
๋ชจ๋์ ๋ชจ๋ ๋ง์ณค๋ค๋ฉด Kiro chat์์ ๋๊ฐ๋๋ค.
/exit

