Skip to content

Latest commit

ย 

History

History
326 lines (196 loc) ยท 14.6 KB

README.md

File metadata and controls

326 lines (196 loc) ยท 14.6 KB

Languages

HCL JSON YAML

Technologies

AWS Jenkins Docker Terraform ELK Stack Prometheus Grafana nGrinder



๐Ÿ“ˆ ์•„ํ‚คํ…์ฒ˜

๐Ÿ“˜๋ณธ๋ฌธ ํ™•์ธ
  • ๋‹จ์ผ VPC ๋‚ด์— ํผ๋ธ”๋ฆญ/ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์„ ๊ตฌ์„ฑํ•˜๊ณ  NAT ์ธ์Šคํ„ด์Šค๋ฅผ ๋‘์–ด ๋ณด์•ˆ๊ณผ ํ™•์žฅ์„ฑ์„ ๋™์‹œ์— ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท: ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„ ๋ฐ NAT ์ธ์Šคํ„ด์Šค ๋ฐฐํฌ.
    • ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท: ๋ฐฑ์—”๋“œ, Jenkins, Redis, RDS ๋“ฑ ์ฃผ์š” ์„œ๋น„์Šค ๋ฐฐ์น˜.
    • VPC ๊ฒฉ๋ฆฌ: ํผ๋ธ”๋ฆญ/ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท ๋ถ„๋ฆฌ๋กœ ์™ธ๋ถ€ ์ ‘๊ทผ ์ฐจ๋‹จ.
    • CORS ๋ฌธ์ œ ํ•ด๊ฒฐ: ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ๊ฐ„์˜ CORS ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ํ”„๋ก ํŠธ์—”๋“œ์˜ ALB์™€ ๋ฐฑ์—”๋“œ์˜ ALB์— ๊ฐ๊ฐ ๋ฉ”์ธ ๋„๋ฉ”์ธ๊ณผ ์„œ๋ธŒ ๋„๋ฉ”์ธ์„ ํ• ๋‹นํ•˜์—ฌ ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…์„ ๋งŒ์กฑ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์›ํ™œํ•œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
  • ECS: ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ, AI ์„œ๋น„์Šค๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฐํฌํ•˜๋ฉฐ ASG๋กœ ์Šค์ผ€์ผ ์ธ/์•„์›ƒ ๊ด€๋ฆฌ.
  • ALB:
    • ํ”„๋ก ํŠธ ALB: Route 53์„ ํ†ตํ•ด ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ.
    • ๋ฐฑ์—”๋“œ + AI ALB: ์„œ๋ธŒ๋„๋ฉ”์ธ์œผ๋กœ CORS ๋ฌธ์ œ ํ•ด๊ฒฐ.
  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ: Jenkins์—์„œ GitHub ํ‘ธ์‹œ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ Docker ์ด๋ฏธ์ง€๋ฅผ ECR์— ์—…๋กœ๋“œ ํ›„ ECS๋กœ ์ž๋™ ๋ฐฐํฌ.
  • ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊ทธ ๊ด€๋ฆฌ:
    • Prometheus์™€ Grafana๋กœ ๋ฉ”ํŠธ๋ฆญ ๋ชจ๋‹ˆํ„ฐ๋ง.
    • ELK ์Šคํƒ์œผ๋กœ ๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฐ ์‹œ๊ฐํ™”.

ECS์™€ ASG๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌ ๋ฐ ํ™•์žฅํ•˜๋ฉฐ, ALB์™€ Route 53์œผ๋กœ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ๊ณผ CORS ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. CI/CD๋กœ ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ , Prometheus, Grafana, ELK ์Šคํƒ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋กœ๊ทธ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.


๊ตฌ์ถ•ํ•œ AWS ํ™˜๊ฒฝ์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ณ  ํšจ์œจ์ ์ธ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด AWS ์ธํ”„๋ผ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ, ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ, ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ ์ž๋™ํ™”, ๊ทธ๋ฆฌ๊ณ  ๋ฆฌ์†Œ์Šค ํ™•์žฅ์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.


๋ฐฐํฌ ํ™˜๊ฒฝ

1. ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ

  • ECS - Rolling Update ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ๋ฐฐํฌํ•  ๋•Œ ๊ธฐ์กด ํƒœ์Šคํฌ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๊ต์ฒดํ•˜๋ฉฐ, ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

3. ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ ์ž๋™ํ™”

  • ECS(Elastic Container Service) / ECR(Elastic Container Registry)
    • ECS์˜ ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ๊ณผ ์œ ์ €๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด Auto Scaling Group์—์„œ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ECR์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„ ์ž๋™์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

2. ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ

  • Application Load Balancer(ALB)
    • ๋‹ค์ˆ˜์˜ Auto Scaling Group์— ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
    • ALB๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•˜๊ณ , ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ๋น„์ •์ƒ ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

4. Auto Scaling ๋ฐ ํƒœ์Šคํฌ ํ™•์žฅ ๋กœ์ง

๋งํฌ

5. ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊ทธ ๊ด€๋ฆฌ

๋งํฌ

6. ๋ณด์•ˆ ๊ฐ•ํ™”

  • AWS Systems Manager Parameter Store:

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์™€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์† ์ •๋ณด) ๊ด€๋ฆฌ

    • ECS ํƒœ์Šคํฌ ์ •์˜์˜ containerDefinitions์—์„œ secrets๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ๊ฐ’์„ Parameter Store์—์„œ ์ง์ ‘ ๋ถˆ๋Ÿฌ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ”๋“œ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ, ๊ถŒํ•œ ๊ด€๋ฆฌ์™€ ๊ฐ์‚ฌ ์ถ”์ ์ด ์šฉ์ดํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
  • CORS ๋ฌธ์ œ ํ•ด๊ฒฐ: ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ๊ฐ„์˜ CORS ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ํ”„๋ก ํŠธ์—”๋“œ์˜ ALB์™€ ๋ฐฑ์—”๋“œ์˜ ALB์— ๊ฐ๊ฐ ๋ฉ”์ธ ๋„๋ฉ”์ธ๊ณผ ์„œ๋ธŒ ๋„๋ฉ”์ธ์„ ํ• ๋‹นํ•˜์—ฌ ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…์„ ๋งŒ์กฑ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์›ํ™œํ•œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

7. Jenkins๋ฅผ ํ™œ์šฉํ•œ CI/CD

๋งํฌ


์œ„์™€ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋Š” ์•ˆ์ •์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋™์‹œ์— ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ECS์™€ Auto Scaling Group์„ ์—ฐ๋™ํ•˜์—ฌ ํƒœ์Šคํฌ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ถ€์กฑํ•  ๊ฒฝ์šฐ ๋™์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค์™€ ํƒœ์Šคํฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค์˜ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ์™€ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ์€ ๋ฌผ๋ก , ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. AWS์˜ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ๊ฐ„ ์œ ๊ธฐ์ ์ธ ์—ฐ๋™์œผ๋กœ ์šด์˜์˜ ์ž๋™ํ™”์™€ ํšจ์œจ์„ฑ์„ ๋ชจ๋‘ ๋‹ฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.




๐Ÿ”จ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์œ ์ง€๋ณด์ˆ˜

๐Ÿ“˜๋ณธ๋ฌธ ํ™•์ธ

Log Monitor


  • aws frontend-alb, backend&ai-alb

Metric Monitor

  • Spring Boot

  • Docker cAdvisor container dashboard

Slack Alert

  • ECS - Service ๋ฐฐํฌ Alert
  • Slack Alert - Jenkins health check
  • slack alert - ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ์•Œ๋ฆผ


๐Ÿ’Ž ์™œ ์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€?

๐Ÿ“˜๋ณธ๋ฌธ ํ™•์ธ

jenkins ์‚ฌ์šฉ ์ด์œ 

์ƒ์„ธ ๋‚ด์šฉ

Jenkins ์‚ฌ์šฉ ์ด์œ 

ํ”„๋กœ์ ํŠธ๋Š” ํ˜‘์—…์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด GitHub Organization์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ํŒŒํŠธ๋ณ„ ๋…๋ฆฝ์ ์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , CI/CD ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒด๊ณ„ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์‚ผ์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์‹คํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ Jenkins๋ฅผ ๋„๊ตฌ๋กœ ์„ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.


terraform ์‚ฌ์šฉ ์ด์œ 

์ƒ์„ธ ๋‚ด์šฉ

Terraform ์‚ฌ์šฉ ์ด์œ 

AWS ๊ธฐ๋ฐ˜์˜ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉฐ ์šฐ๋ฆฌ ํŒ€์€ ์ผ๊ด€์„ฑ ์œ ์ง€, ํ˜‘์—… ํšจ์œจ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ์œ ์ง€๋ณด์ˆ˜ ํŽธ์˜์„ฑ์„ ์ตœ์šฐ์„  ๊ณผ์ œ๋กœ ์‚ผ์•˜์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ฝ˜์†”์„ ํ†ตํ•œ ์ˆ˜์ž‘์—… ์„ค์ • ๋ฐฉ์‹์€ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ณ , ํŒ€์›์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ž‘์—… ์ค‘์ธ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ค์šด ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ฐœ๋ฐœ์„ ๋ฉˆ์ถ”๋Š” ์‹œ๊ฐ„ ๋™์•ˆ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•˜๋ฉด ๋น„์šฉ์ด ๋‚ญ๋น„๋  ์šฐ๋ ค๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํŒ€์› ๊ฐ„์˜ ํ˜‘์—…์„ ๊ฐ•ํ™”ํ•˜๊ณ , ์ธํ”„๋ผ ๊ด€๋ฆฌ๋ฅผ ์ฒด๊ณ„ํ™”ํ•˜๋ฉฐ ๋น„์šฉ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ๋„๊ตฌ์ธ Terraform์„ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


Terraform ๋„์ž…์„ ํ†ตํ•ด ํŒ€์€ ์ธํ”„๋ผ ๊ด€๋ฆฌ์˜ ์ฒด๊ณ„ํ™”์™€ ํ˜‘์—… ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. S3์™€ DynamoDB๋ฅผ ํ™œ์šฉํ•œ ์ค‘์•™ ์ง‘์ค‘ํ˜• ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ์ž‘์—… ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์•ˆ์ •์ ์ธ ํ˜‘์—… ํ™˜๊ฒฝ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ธํ”„๋ผ ๊ด€๋ฆฌ๊ฐ€ ๋”์šฑ ์ฒด๊ณ„ํ™”๋˜๊ณ , ํŒ€์˜ ํ˜‘์—…๊ณผ ์šด์˜ ํšจ์œจ์„ฑ์ด ์ „๋ฐ˜์ ์œผ๋กœ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.



ansible ๋Œ€์‹  ecs ์‚ฌ์šฉ ์ด์œ 

์ƒ์„ธ ๋‚ด์šฉ

ECS ์‚ฌ์šฉ ์ด์œ 

๋ฐฐํฌ ์ž๋™ํ™”์™€ ์„œ๋น„์Šค ๊ฐ€์šฉ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด AWS Autoscaling์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” Autoscaling์œผ๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Ansible์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋งค๋ฒˆ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šฐ๋Š” ์ž‘์—…์ด ๋ฐ˜๋ณต์ ์ด๊ณ  ๊ด€๋ฆฌ ๋ถ€๋‹ด์ด ์ปธ์œผ๋ฉฐ, ๋ฐฐํฌ ์ค‘ ์„œ๋น„์Šค ์ค‘๋‹จ ๊ฐ€๋Šฅ์„ฑ์„ ์™„์ „ํžˆ ๋ฐฉ์ง€ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


Ansible์—์„œ ECS๋กœ ์ „ํ™˜ํ•œ ์ด์œ 

1. Autoscaling๊ณผ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ์˜ ๋ณด์™„

Ansible์„ ์‚ฌ์šฉํ•ด Autoscaling์œผ๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šฐ๋Š” ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๋ ค ํ–ˆ์ง€๋งŒ, ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ์ถ”๊ฐ€์ ์ธ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ์ˆ˜์ž‘์—…์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ECS๋Š” ์œ ์ € ๋ฐ์ดํ„ฐ์™€ ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ์„ ํ™œ์šฉํ•ด Autoscaling๊ณผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋˜๋ฉฐ, ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ž๋งˆ์ž ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต ์ž‘์—…์˜ ๋ถ€๋‹ด์ด ์ค„์–ด๋“ค๊ณ  ์šด์˜ ํšจ์œจ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2. ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์ž๋™ํ™”์˜ ํ–ฅ์ƒ

ECS๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ํƒœ์Šคํฌ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ, ๋น„์ •์ƒ์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์€ Ansible๋กœ๋Š” ์ˆ˜๋™ ์ž‘์—…์ด ํ•„์š”ํ–ˆ๋˜ ๋ถ€๋ถ„์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์–ด ์„œ๋น„์Šค ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

3. AWS ์„œ๋น„์Šค์™€์˜ ํ†ตํ•ฉ

ECS๋Š” AWS์˜ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค์™€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ์—ฐ๋™๋ฉ๋‹ˆ๋‹ค. ECR๊ณผ ํ†ตํ•ฉํ•ด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, CloudWatch๋ฅผ ํ™œ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ์™€ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ†ตํ•ฉ ๊ธฐ๋Šฅ์€ Ansible๋กœ๋Š” ์ถ”๊ฐ€์ ์ธ ์„ค์ •๊ณผ ์ž‘์—…์ด ํ•„์š”ํ–ˆ๋˜ ๋ถ€๋ถ„์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค.


EKS vs ECS

ECS๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ์ค‘ Kubernetes ๊ธฐ๋ฐ˜์˜ ๋ณต์žกํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋Š” EKS์˜ ์กด์žฌ๋ฅผ ํ™•์ธํ–ˆ์ง€๋งŒ, ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ณต์žกํ•œ ์„ค์ •๊ณผ ์ถ”๊ฐ€์ ์ธ ํ•™์Šต์ด ํ•„์š”ํ•œ EKS ๋Œ€์‹ , AWS์— ์ตœ์ ํ™”๋˜์–ด ๊ฐ„๋‹จํ•œ ์„ค์ •๋งŒ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ECS๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.



Pronmetheus & Grafana

์ƒ์„ธ ๋‚ด์šฉ

Prometheus & Grafana


Prometheus์™€ Grafana ์„ ํƒ ์ด์œ 

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ์„œ๋ฒ„๊ฐ€ ์ž์ฃผ ๋‹ค์šด๋˜๊ฑฐ๋‚˜ ECS ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐฐํฌ ์ค‘๋‹จ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์™€ ์ธ์Šคํ„ด์Šค์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์›์ธ์ด์—ˆ์ง€๋งŒ, ์ด๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์ง€ํ•˜๊ฑฐ๋‚˜ ์ •ํ™•ํžˆ ๋ถ„์„ํ•  ์ˆ˜ ์—†์—ˆ๊ณ  ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๋Œ€๋กœ ํ™•๋ณดํ•˜์ง€ ๋ชปํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐ์— ์–ด๋ ค์›€์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์šด์˜ ํšจ์œจ์„ฑ๊ณผ ๋น„์šฉ ๊ด€๋ฆฌ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์ด ์ƒ๊ฒจ์„œ Prometheus & Grafana๋ฅผ ์‚ฌ์šฉ ํ–ˆ์Šต๋‹ˆ๋‹ค


ECS ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์ธ์Šคํ„ด์Šค ๋ถ„์„

ASG๋กœ ๋ฐฐํฌ๋œ ์ธ์Šคํ„ด์Šค์— CAdvisor, Node Exporter๋ฅผ ์„ค์น˜ํ•ด ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ ํ–ˆ์Šต๋‹ˆ๋‹ค. Prometheus๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , Grafana๋ฅผ ํ†ตํ•ด ์‹œ๊ฐํ™”ํ•˜์—ฌ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ํ™•์ธ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์ž„๊ณ„์น˜๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ๊ฐ์ง€๋˜๋ฉด slack์œผ๋กœ ์•Œ๋žŒ์„ ๋ณด๋‚ด ์‹ ์†ํžˆ ์žฅ์• ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์ ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


ELK

์ƒ์„ธ ๋‚ด์šฉ

ELK 8.x ์„ค์น˜

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ELK Stack์„ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•ด, Elastic Agent์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ์ตœ์‹  ๋ฒ„์ „์ธ 8.x๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์ 

๊ธฐ์กด Filebeat ๋Œ€์‹  Elastic Agent๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๊ทธ ์ˆ˜์ง‘๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž‘์—…์„ ๋‹จ์ผ ์—์ด์ „ํŠธ๋กœ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Elastic Agent๋Š” JSON ํ˜•์‹์˜ ๊ตฌ์กฐํ™”๋œ ๋กœ๊ทธ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์—ˆ์œผ๋ฉฐ, ๋น„๊ตฌ์กฐํ™”๋œ ๋กœ๊ทธ ์ฒ˜๋ฆฌ์—๋Š” ์ถ”๊ฐ€์ ์ธ ์ „์ฒ˜๋ฆฌ ์ž‘์—…์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.


ALB ๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฌธ์ œ

  1. ALB ๋กœ๊ทธ์˜ ํ˜•์‹
    • ALB์˜ ๋กœ๊ทธ๋Š” ๊ฐ€๊ณต๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ ํ˜•ํƒœ๋กœ S3 ๋ฒ„ํ‚ท์— ์ €์žฅ๋จ.
    • Elastic Agent๋Š” ์ด๋Ÿฌํ•œ ๋น„๊ตฌ์กฐ์  ๋กœ๊ทธ๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๊ณ , Elasticsearch์— ์ ํ•ฉํ•œ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒ˜๋ฆฌ ์ž‘์—… ํ•„์š”.
  2. Logstash๋ฅผ ํ™œ์šฉํ•œ ์ „์ฒ˜๋ฆฌ
    • Logstash๋ฅผ ์‚ฌ์šฉํ•ด S3์— ์ €์žฅ๋œ ALB ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘.
    • ๋กœ๊ทธ๋ฅผ ํ•„์š”ํ•œ ํ˜•ํƒœ๋กœ ์ „์ฒ˜๋ฆฌ(ํŒŒ์‹ฑ ๋ฐ ํ•„ํ„ฐ๋ง)ํ•œ ํ›„ Elasticsearch๋กœ ์ „๋‹ฌ.

๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฐ ์ „์ฒ˜๋ฆฌ ๊ณผ์ •

  1. S3์—์„œ ALB ๋กœ๊ทธ ์ˆ˜์ง‘
    • Logstash๋ฅผ ํ†ตํ•ด S3 ๋ฒ„ํ‚ท์— ์ €์žฅ๋œ ALB ๋กœ๊ทธ๋ฅผ ์ฝ์–ด์˜ด.
  2. ๋กœ๊ทธ ์ „์ฒ˜๋ฆฌ
    • Logstash์˜ Grok ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ALB ๋กœ๊ทธ๋ฅผ ํŒŒ์‹ฑ.
    • ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ณ , Elasticsearch์— ์ ํ•ฉํ•œ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜.
  3. Elasticsearch๋กœ ์ „์†ก
    • ์ „์ฒ˜๋ฆฌ๋œ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ Elasticsearch๋กœ ์ „๋‹ฌํ•ด ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ฆ.

๊ฒฐ๋ก 

ELK 8.x๋ฅผ ์„ค์น˜ํ•˜๋ฉฐ Elastic Agent ๋„์ž…์„ ๊ฒ€ํ† ํ–ˆ์ง€๋งŒ, ๋น„๊ตฌ์กฐํ™”๋œ ๋กœ๊ทธ์˜ ์ „์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ๋Š” Logstash๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. Logstash๋ฅผ ์‚ฌ์šฉํ•ด S3์— ์ €์žฅ๋œ ALB ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๊ฑฐ์ณ Elasticsearch๋กœ ์ „๋‹ฌํ–ˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋น„๊ตฌ์กฐํ™”๋œ ALB ๋กœ๊ทธ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ELK์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.