[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-django | Django ์ด๋ฏธ์ง, ๋ฉ๋ชจ๋ฆฌ 500MB, /app์ socket_volume์ ๋ง์ดํธ, ๋ก๊ทธ ํ์ฑํ |
| fc-nginx | Nginx ์ด๋ฏธ์ง, ๋ฉ๋ชจ๋ฆฌ 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๋ ๊ทธ ๊ฐ๋ ์ ํด๋ผ์ฐ๋ ์ค์ผ์คํธ๋ ์ด์ ์ผ๋ก ํ์ฅํ ๊ฒ์ด๋ค.
Comments powered by Disqus.