Post

[Docker] AWS ECS ๋ฐฐํฌ ์‹ค์Šต(AWS ECS)

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Amazon ECS(Elastic Container Service)๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•œ๋‹ค. ๋กœ์ปฌ์˜ Docker Compose๋ฅผ ๋„˜์–ด, ์‹ค์ œ ์„œ๋น„์Šค๋กœ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ๋‹ค๋ฃฌ๋‹ค. Nginx + Django๋กœ ๊ตฌ์„ฑํ•œ 2-Tier ์›น ์„œ๋น„์Šค๋ฅผ ECS์— ์˜ฌ๋ฆฐ๋‹ค.

ECS๋ž€? Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํด๋ผ์šฐ๋“œ์—์„œ ์‰ฝ๊ฒŒ ์‹คํ–‰ยท๊ด€๋ฆฌํ•˜๋Š” ์™„์ „ ๊ด€๋ฆฌํ˜• ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„œ๋น„์Šค. Fargate(์„œ๋ฒ„๋ฆฌ์Šค)ยทํ™•์žฅ์„ฑยท๊ณ ๊ฐ€์šฉ์„ฑยทCloudWatch ๋กœ๊น…ยทELB ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ œ๊ณตํ•œ๋‹ค.


1. ECS ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ ์š”์†Œ

ECS๋Š” ํด๋Ÿฌ์Šคํ„ฐ โ†’ ์„œ๋น„์Šค โ†’ ์ž‘์—…(Task) โ†’ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ณ„์ธต์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ์‰ฝ๋‹ค.

flowchart TD
    Cluster["๐Ÿ—‚๏ธ ํด๋Ÿฌ์Šคํ„ฐ<br/>(์‹คํ–‰ ํ™˜๊ฒฝ ๊ทธ๋ฃน)"]
    Service["๐Ÿ” ์„œ๋น„์Šค<br/>(์›ํ•˜๋Š” ๊ฐœ์ˆ˜ ์œ ์ง€ยทLB)"]
    Task["๐Ÿ“‹ ์ž‘์—… ์ •์˜<br/>(์ด๋ฏธ์ง€ยทCPUยท๋ฉ”๋ชจ๋ฆฌ)"]
    C1["๐Ÿ“ฆ ์ปจํ…Œ์ด๋„ˆ"]
    Cluster --> Service --> Task --> C1
๊ตฌ์„ฑ ์š”์†Œ์—ญํ• 
ํด๋Ÿฌ์Šคํ„ฐ(Cluster)์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋…ผ๋ฆฌ ๊ทธ๋ฃน(EC2/Fargate)
์ž‘์—… ์ •์˜(Task Definition)์ด๋ฏธ์ง€ยทCPUยท๋ฉ”๋ชจ๋ฆฌยท๋„คํŠธ์›Œํฌ ๋“ฑ ์‹คํ–‰ ์„ค์ •
์„œ๋น„์Šค(Service)์ž‘์—…์„ ์›ํ•˜๋Š” ์ˆ˜๋งŒํผ ์œ ์ง€ยทํ™•์žฅยทLB
์ปจํ…Œ์ด๋„ˆ ์ธ์Šคํ„ด์ŠคEC2 ๊ธฐ๋ฐ˜ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์‹คํ–‰ EC2
ECS ์—์ด์ „ํŠธ์ธ์Šคํ„ด์Šค์—์„œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ยท์ƒํƒœ ๊ด€๋ฆฌ

๐Ÿ’ก ์ž‘์—… ์ •์˜ = ์„ค๊ณ„๋„, ์„œ๋น„์Šค = ์šด์˜์ž๋กœ ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž‘์—… ์ •์˜๋Š” โ€œ๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ• ์ง€โ€๋ฅผ ์ ๊ณ , ์„œ๋น„์Šค๋Š” ๊ทธ ์ž‘์—…์„ โ€œ๋ช‡ ๊ฐœ๋กœ, ์–ด๋–ป๊ฒŒ ์œ ์ง€ํ• ์ง€โ€๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.


2. ์‚ฌ์ „ ์ค€๋น„ โ€” ECR ์ด๋ฏธ์ง€ push

์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ECR์— ์˜ฌ๋ ค๋‘”๋‹ค.

1
2
3
4
aws ecr create-repository --repository-name fc-django
aws ecr create-repository --repository-name fc-nginx
aws ecr get-login-password | docker login --username AWS --password-stdin <ECR์ฃผ์†Œ>
# NginxยทDjango ์ด๋ฏธ์ง€ ๋นŒ๋“œ โ†’ tag โ†’ push

3. ์ž‘์—… ์ •์˜ ์ƒ์„ฑ (2tier-task)

EC2 ์‹œ์ž‘ ์œ ํ˜•์œผ๋กœ ์ž‘์—… ์ •์˜๋ฅผ ๋งŒ๋“ค๊ณ , ๋ณผ๋ฅจ socket_volume์„ ๊ณต์œ ํ•ด ๋‘ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ์„ค์ •
fc-djangoDjango ์ด๋ฏธ์ง€, ๋ฉ”๋ชจ๋ฆฌ 500MB, /app์„ socket_volume์— ๋งˆ์šดํŠธ, ๋กœ๊ทธ ํ™œ์„ฑํ™”
fc-nginxNginx ์ด๋ฏธ์ง€, ๋ฉ”๋ชจ๋ฆฌ 500MB, ํฌํŠธ 80:80, fc-django ๋ณผ๋ฅจ ๊ณต์œ 

์‹œ์ž‘ ์ข…์†: fc-nginx๊ฐ€ fc-django์— ์˜์กด(START)ํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

๐Ÿ’ก Nginx๊ฐ€ Django์™€ ๋ณผ๋ฅจ(์†Œ์ผ“)์„ ๊ณต์œ ํ•˜๋Š” ๊ตฌ์กฐ๋‹ค. Nginx๊ฐ€ ์ •์  ์š”์ฒญ์€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋™์  ์š”์ฒญ์€ ์†Œ์ผ“์œผ๋กœ Django์— ๋„˜๊ธด๋‹ค. ๊ทธ๋ž˜์„œ ๋‘ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ™์€ ๋ณผ๋ฅจ์„ ๋ด์•ผ ํ•˜๊ณ , ์‹œ์ž‘ ์ˆœ์„œ(Django ๋จผ์ €)๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.


4. ์„œ๋น„์Šค ์ƒ์„ฑ (2tier-svc)

ํด๋Ÿฌ์Šคํ„ฐ(ecs-cluster)์—์„œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์ž‘์—…์„ 2๊ฐœ(REPLICA) ์œ ์ง€ํ•˜๋„๋ก ํ•œ๋‹ค.

ํ•ญ๋ชฉ๊ฐ’
์‹œ์ž‘ ์œ ํ˜•EC2
์„œ๋น„์Šค ์œ ํ˜•REPLICA
์ž‘์—… ๊ฐœ์ˆ˜2
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ธฐ์กด ecs-alb(์ปจํ…Œ์ด๋„ˆ fc-nginx, ํฌํŠธ 80)
์ƒํƒœ ๊ฒ€์‚ฌ ์œ ์˜ˆ300์ดˆ

์•ฝ 20์ดˆ ํ›„ ์„œ๋น„์Šค ์ƒํƒœ๊ฐ€ RUNNING์ด ๋˜๊ณ , ์ปจํ…Œ์ด๋„ˆ 2๊ฐœ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•œ๋‹ค.


5. ์ ‘์† & ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(ecs-alb)์˜ DNS ์ฃผ์†Œ๋กœ ๋ธŒ๋ผ์šฐ์ € ์ ‘์†ํ•ด ์„œ๋น„์Šค๋ฅผ ํ™•์ธํ•œ๋‹ค.

โš ๏ธ 504 ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด ecs-sg-instance ๋ณด์•ˆ ๊ทธ๋ฃน์— 3000๋ฒˆ ํฌํŠธ(Django) ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ALB โ†’ Nginx๊นŒ์ง€๋Š” ์—ฐ๊ฒฐ๋์ง€๋งŒ, ๋’ค์˜ Django ํฌํŠธ๊ฐ€ ๋ง‰ํ˜€ ๊ฒŒ์ดํŠธ์›จ์ด ํƒ€์ž„์•„์›ƒ์ด ๋‚˜๋Š” ์ƒํ™ฉ์ด๋‹ค.


๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
6
Amazon ECS
โ”œโ”€ ๊ฐœ๋…   ๊ด€๋ฆฌํ˜• ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(Fargate/EC2)
โ”œโ”€ ๊ตฌ์กฐ   ํด๋Ÿฌ์Šคํ„ฐ > ์„œ๋น„์Šค > ์ž‘์—… ์ •์˜ > ์ปจํ…Œ์ด๋„ˆ
โ”œโ”€ ์ค€๋น„   ECR์— ์ด๋ฏธ์ง€ push
โ”œโ”€ ๋ฐฐํฌ   ์ž‘์—… ์ •์˜(2์ปจํ…Œ์ด๋„ˆยท๋ณผ๋ฅจ๊ณต์œ ) โ†’ ์„œ๋น„์Šค(2 replicaยทALB)
โ””โ”€ ํ™•์ธ   ALB DNS ์ ‘์† (504 ์‹œ 3000 ํฌํŠธ ๊ฐœ๋ฐฉ)
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
ECS๊ด€๋ฆฌํ˜• ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
์ž‘์—… ์ •์˜์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์„ค๊ณ„๋„
์„œ๋น„์Šค์ž‘์—… ๊ฐœ์ˆ˜ ์œ ์ง€ยทLB ์—ฐ๋™

ECS์˜ ํ•ต์‹ฌ์€ ์ž‘์—… ์ •์˜(๋ฌด์—‡์„)์™€ ์„œ๋น„์Šค(๋ช‡ ๊ฐœยท์–ด๋–ป๊ฒŒ)๋ฅผ ๋‚˜๋ˆ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํด๋ผ์šฐ๋“œ์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Compose๊ฐ€ ๋กœ์ปฌ ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฉด, ECS๋Š” ๊ทธ ๊ฐœ๋…์„ ํด๋ผ์šฐ๋“œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์œผ๋กœ ํ™•์žฅํ•œ ๊ฒƒ์ด๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.