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