suvera-dev πŸ₯¦

AWS λ°°ν¬μžλ™ν™” ꡬ좕 _ 4. ECS 생성 및 ELB μ—°κ²° / ECR image 배포 λ³Έλ¬Έ

Infra/CI CD

AWS λ°°ν¬μžλ™ν™” ꡬ좕 _ 4. ECS 생성 및 ELB μ—°κ²° / ECR image 배포

suvera 2023. 7. 14. 01:15

이번 ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

- ECS 생성 : Cluster, Service, Task Definition

- ELB 생성 , μ—°κ²°

- EC2 μΈμŠ€ν„΄μŠ€ 생성 : Auto Scaling Group

 


μ‹œμž‘ν•˜κΈ° 전에 κ°„λ‹¨νžˆ κ°œλ…μ„ μ •λ¦¬ν•˜κ³  λ„˜μ–΄κ°€μž. 

 

1. EC2 : 가상 μ„œλ²„μΈ EC2 μΈμŠ€ν„΄μŠ€λ₯Ό ν”„λ‘œλΉ„μ €λ‹ν•˜κ³  μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. EC2 μΈμŠ€ν„΄μŠ€λŠ” 가상 μ»΄ν“¨ν„°λ‘œ, λ‹€μ–‘ν•œ 운영 μ²΄μ œμ™€ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. EC2 μΈμŠ€ν„΄μŠ€λŠ” 가상 프라이빗 ν΄λΌμš°λ“œ(VPC) λ‚΄μ—μ„œ μ‹€ν–‰λ˜λ©°, 인터넷을 톡해 μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

2. Auto Scaling Group : μ˜€ν† μŠ€μΌ€μΌλ§ 그룹은 EC2 μΈμŠ€ν„΄μŠ€μ˜ κ·Έλ£Ήμž…λ‹ˆλ‹€. 이 그룹은 μ‚¬μš©μžκ°€ μ •μ˜ν•œ 쑰건에 따라 EC2 μΈμŠ€ν„΄μŠ€λ₯Ό μžλ™μœΌλ‘œ ν”„λ‘œλΉ„μ €λ‹ν•˜κ³  μ‘°μ •ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ°€μš©μ„±κ³Ό ν™•μž₯성을 보μž₯ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, νŠΈλž˜ν”½μ΄ μ¦κ°€ν•˜λ©΄ μ˜€ν† μŠ€μΌ€μΌλ§ 그룹은 ν•„μš”μ— 따라 EC2 μΈμŠ€ν„΄μŠ€λ₯Ό μžλ™μœΌλ‘œ μΆ”κ°€ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯을 μœ μ§€ν•©λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ νŠΈλž˜ν”½μ΄ κ°μ†Œν•˜λ©΄ μΈμŠ€ν„΄μŠ€λ₯Ό μžλ™μœΌλ‘œ 쀄여 λΉ„μš©μ„ μ ˆκ°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

⇒ μ‚¬μš©μžλŠ” μ˜ˆμƒμΉ˜ λͺ»ν•œ μ„œλΉ„μŠ€ λΆ€ν•˜μ— 효과적으둜 λŒ€μ‘ν•˜κ³ , μ΅œλŒ€ν•œ μ €λ ΄ν•œ λΉ„μš©μœΌλ‘œ μ•ˆμ •μ μ΄κ³  예츑 κ°€λŠ₯ν•œ μ„±λŠ₯을 μœ μ§€ν•  수 μžˆλ‹€.

 

3. ECS (Amazon Elastic Container Service): Amazon Elastic Container Service(ECS)λŠ” AWSμ—μ„œ μ œκ³΅ν•˜λŠ” κ΄€λ¦¬ν˜• μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ μ„œλΉ„μŠ€μž…λ‹ˆλ‹€. ECSλ₯Ό μ‚¬μš©ν•˜λ©΄ Docker μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μž‘μ—…μ„ λ‹¨μˆœν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ECSλŠ” ν΄λŸ¬μŠ€ν„°, μž‘μ—… μ •μ˜, μ„œλΉ„μŠ€ λ“±μ˜ κ°œλ…μ„ μ‚¬μš©ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ°°ν¬ν•˜κ³  ν™•μž₯ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. 

 

 


- EC2와  Fargate λ‘κ°œμ˜ 배포 λͺ¨λΈμ„ 지원 !

 

EC2 μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 경우:

  • ECS ν΄λŸ¬μŠ€ν„°: ECS ν΄λŸ¬μŠ€ν„°λŠ” EC2 μΈμŠ€ν„΄μŠ€μ˜ 논리적 κ·Έλ£Ήμž…λ‹ˆλ‹€. 이 ν΄λŸ¬μŠ€ν„°λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  EC2 μΈμŠ€ν„΄μŠ€λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€. ν΄λŸ¬μŠ€ν„°λŠ” μ—¬λŸ¬ 개의 EC2 μΈμŠ€ν„΄μŠ€λ‘œ ꡬ성될 수 있으며, 각 μΈμŠ€ν„΄μŠ€λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜λŠ” 호슀트 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • μž‘μ—… μ •μ˜(Task Definition): μž‘μ—… μ •μ˜λŠ” μ»¨ν…Œμ΄λ„ˆν™”λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 싀행에 ν•„μš”ν•œ 정보λ₯Ό μ •μ˜ν•˜λŠ” JSON νŒŒμΌμž…λ‹ˆλ‹€. μž‘μ—… μ •μ˜μ—λŠ” μ‹€ν–‰ν•  μ»¨ν…Œμ΄λ„ˆ 이미지, 포트 맀핑, ν™˜κ²½ λ³€μˆ˜ λ“±μ˜ 정보가 ν¬ν•¨λ©λ‹ˆλ‹€.
  • μ„œλΉ„μŠ€(Service): μ„œλΉ„μŠ€λŠ” ECS ν΄λŸ¬μŠ€ν„°μ—μ„œ μž‘μ—… μ •μ˜λ₯Ό 기반으둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μ„œλΉ„μŠ€λŠ” μ»¨ν…Œμ΄λ„ˆμ˜ κ°€μš©μ„±κ³Ό ν™•μž₯성을 κ΄€λ¦¬ν•˜λ©°, ν•„μš”μ— 따라 μžλ™μœΌλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯κ³Ό κ°€μš©μ„±μ„ μœ μ§€ν•©λ‹ˆλ‹€.

AWS Fargateλ₯Ό μ‚¬μš©ν•˜λŠ” 경우:

  • AWS Fargate: AWS FargateλŠ” μ„œλ²„λ¦¬μŠ€ μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ ν™˜κ²½μœΌλ‘œ, EC2 μΈμŠ€ν„΄μŠ€λ₯Ό 직접 ν”„λ‘œλΉ„μ €λ‹ν•˜κ±°λ‚˜ 관리할 ν•„μš” 없이 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Fargateλ₯Ό μ‚¬μš©ν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆμ— ν• λ‹Ήλœ λ¦¬μ†ŒμŠ€λ§Œ μ§€λΆˆν•˜λ©΄ λ˜λ―€λ‘œ λ”μš± νŽΈλ¦¬ν•©λ‹ˆλ‹€. ECS ν΄λŸ¬μŠ€ν„°μ™€ μž‘μ—… μ •μ˜ κ°œλ…μ€ EC2 μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ™€ λ™μΌν•˜κ²Œ μ μš©λ©λ‹ˆλ‹€.

 


 

4. Load Balancer : μ„œλ²„μ— κ°€ν•΄μ§€λŠ” νŠΈλž˜ν”½μ„ μ—¬λŸ¬λŒ€μ˜ μ„œλ²„μ—κ²Œ κ· λ“±ν•˜κ²Œ λΆ„μ‚°μ‹œμΌœμ£ΌλŠ” 역할을 ν•˜λŠ” 것

μ„œλ²„κ°€ ν•˜λ‚˜μΌ λ•Œ νŠΈλž˜ν”½μ΄ 적으면 μ„œλ²„λŠ” λ¬΄μ‚¬νžˆ 응닡을 해쀄 κ²ƒμž…λ‹ˆλ‹€.

ν•˜μ§€λ§Œ νŠΈλž˜ν”½μ΄ μ„œλ²„ ν•œκ°œλ‘œλŠ” 감당할 수 μ—†λŠ” 양이 λ˜λŠ” μˆœκ°„ μ„œλ²„λŠ” λ‹€μš΄λ  것이고, μ„œλΉ„μŠ€ λ˜ν•œ μž‘λ™μ„ 멈좜 κ²ƒμž…λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” 크게 두 가지 방법이 μžˆλŠ”λ°μš”.

μ„œλ²„μ˜ μΈμŠ€ν„΄μŠ€ μ„±λŠ₯을 μ˜¬λ¦¬λŠ” μŠ€μΌ€μΌ-μ—…(Scale-up) κ³Ό μ„œλ²„λ₯Ό μ—¬λŸ¬λŒ€λ‘œ λ‚˜λˆ μ„œ νŠΈλž˜ν”½μ„ μ²˜λ¦¬ν•˜λŠ” μŠ€μΌ€μΌ-아웃(Scale-out) λ°©μ‹μ΄ μžˆμŠ΅λ‹ˆλ‹€. μ˜€λŠ˜ ν¬μŠ€νŒ…ν•˜λŠ” 이 λ‘œλ“œ λ°ΈλŸ°μ„œλŠ” λ°”λ‘œ μŠ€μΌ€μΌ-아웃 λ°©μ‹μž…λ‹ˆλ‹€.

그리고 λ‘œλ“œ λ°ΈλŸ°μ„œλŠ” μ§€μ†μ μœΌλ‘œ  IPμ£Όμ†Œκ°€ λ°”λ€ŒκΈ° 떄문에 도메인 기반으둜 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€.

 

μž₯점 )

  • λΉ„μš© 절감
  • 무쀑단 μ„œλΉ„μŠ€ 제곡

 

- HTTP, HTTPS λ₯Ό μ΄μš©ν•œ μ›Ή μ„œλ²„λ₯Ό λ„μšΈ 것 → ALB

ALB

ALB의 κ²½μš°λŠ” λ„€νŠΈμ›Œν¬ λ ˆμ΄μ–΄7의 ν”„λ‘œν† μ½œμ— λŒ€ν•œ λΆ€ν•˜λ§Œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ELB와 λ‹€λ₯΄κ²Œ κ²½λ‘œλ‚˜ ν¬νŠΈλ“±μ— 따라 λ‹€λ₯Έ νƒ€κ²Ÿκ·Έλ£ΉμœΌλ‘œ 맡핑할 수 μžˆμŠ΅λ‹ˆλ‹€. ν¬νŠΈ λ‹¨μœ„λ‘œ 연결해쀄 수 있기 떄문에 λ„μ»€μ—μ„œ μœ μš©ν•˜κ²Œ μž‘λ™ν•  수 있고 ν•˜λ‚˜μ˜ λŒ€μƒκ·Έλ£Ήμ— 더 λ§Žμ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό 넣을 수 μžˆμ–΄ λΉ„μš©μ„ μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. EC2 μΈμŠ€ν„΄μŠ€, AWS λžŒλ‹€, IPλ‘œλ„ 연결이 κ°€λŠ₯ν•˜κ³  νŠΉμ •ν•œ μš”μ²­μ— λŒ€ν•΄μ„œλŠ” μ„œλ²„μ—†μ΄ 응닡메세지λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

ELB의 경우 λ„€νŠΈμ›Œν¬ λ ˆμ΄μ–΄ 4와 λ„€νŠΈμ›Œν¬ λ ˆμ΄μ–΄7에 λŒ€ν•œ λΆ€ν•˜λ₯Ό μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 μ„œλ²„μ˜ κΈ°λ³Έμ£Όμ†Œκ°€ λ°”λ€Œλ©΄ λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό μƒˆλ‘œ μƒμ„±ν•΄μ•Όν•˜λ©° ν•˜λ‚˜μ˜ μ£Όμ†Œμ— ν•˜λ‚˜μ˜ νƒ€κ²Ÿκ·Έλ£ΉμœΌλ‘œ λ³΄λ‚΄κ²Œ λ©λ‹ˆλ‹€. λ”°λΌμ„œ νƒ€κ²Ÿκ·Έλ£Ήμ΄ λ§Žμ•„μ§ˆμˆ˜λ‘ 더 λ§Žμ€ 수의 λ‘œλ“œλ°ΈλŸ°μ„œκ°€ ν•„μš”ν•˜κ³  λΉ„μš©λ„ 그만큼 더 λ“€μ•„κ°€κ²Œ λ©λ‹ˆλ‹€.

 


1. EC2 μΈμŠ€ν„΄μŠ€ SSH 접근을 μœ„ν•œ ν‚€νŽ˜μ–΄ 생성

EC2 - λ„€νŠΈμ›Œν¬ 및 λ³΄μ•ˆ - ν‚€νŽ˜μ–΄ 

이름 : ec2-key

 

 

2. ECS Cluster 생성

- μƒˆλ‘œμš΄ ν™˜κ²½μ—μ„œλŠ” μ§€μ›λ˜μ§€ μ•ŠλŠ” κΈ°λŠ₯이 μžˆμ–΄μ„œ κΈ°μ‘΄ μ½˜μ†”λ‘œ μ „ν™˜ν•΄μ€€λ‹€. 

- μ™Όμͺ½ 상단에 μŠ€μœ„μΉ˜ λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ λœλ‹€.

 

- ν΄λŸ¬μŠ€ν„° 생성

 

2번째 Linux + λ„€νŠΈμ›Œν‚Ή 선택

 

이름 : ecs-cluster

 

ν”„λ‘œλΉ„μ €λ‹ λͺ¨λΈ : μ˜¨λ””λ§¨λ“œ μΈμŠ€ν„΄μŠ€ 

μœ ν˜• : t3.medium !!! ( t2λŠ” insufficient memory μ—λŸ¬κ°€ λ‚œλ‹€κ³  함. t3.micro도 μ•ˆλ˜λ„€μš©. λŒ€μ‹  과금 주의. )

개수 : 2

EC2 AMI ID : Linuxe 2 AMI

λ³Όλ₯¨ 크기 : 30

ν‚€ νŽ˜μ–΄ : ec2-key

 

 

 

- VPC : HLI-VPC

- μ„œλΈŒλ„· : Public Subnet 2a / 2b (  private에 EC2λ₯Ό λ‘λŠ” 경우 인터넷 κ²Œμ΄νŠΈμ›¨μ΄λ₯Ό 타고 λ‚˜κ°ˆ μˆ˜κ°€ μ—†μœΌλ―€λ‘œ NATλ₯Ό μƒμ„±ν•΄μ€˜μ•Όν•¨. )

- 퍼블릭 IP μžλ™ ν• λ‹Ή : ν™œμ„±ν™”λ¨

- λ³΄μ•ˆκ·Έλ£Ή : ecs-ec2-sg

IAM에 ecsInstanceRole을 κ°–κ³  있음

 

생성 μ™„λ£Œ !

 

 

 

3. ELB 생성

- μ„œλΉ„μŠ€μ™€ μž‘μ—…μ„ μƒμ„±ν•΄μ•Όν•˜λŠ”λ°, μž‘μ—… μ •μ˜μ—μ„œ λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό μ„ νƒν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— λ¨Όμ € μƒμ„±ν•΄λ³΄μž.

- EC2 μ½˜μ†” -> λ‘œλ“œλ°ΈλŸ°μ„œ -> 생성 

 

HTTP, HTTPS λ₯Ό μ΄μš©ν•œ μ›Ή μ„œλ²„λ₯Ό λ„μšΈ 것이기 λ•Œλ¬Έμ— ALBλ₯Ό μ„ νƒν•œλ‹€. μžμ„Έν•œ μ„€λͺ…은 μœ„μ— κ°œλ… 뢀뢄에 μžˆλ‹€ !

 

생성 λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ ELB의 μž‘λ™ 방식도 μ„€λͺ…이 λ˜μ–΄μžˆλ‹€. 

 

이름 : lb-test둜 μ„€μ •

λ„€νŠΈμ›Œν¬ λ§€ν•‘μ—μ„œλŠ” 

기쑴에 계속 μ„ νƒν–ˆλ˜ HLI-VPC 선택, public μ„œλΈŒλ„· 2개λ₯Ό 맀핑 !

이전에 생성해둔 lb λ³΄μ•ˆκ·Έλ£Ή 선택 !

-> λ¦¬μŠ€λ„ˆμ— λŒ€ν•΄ μ •μ˜ν•œ κ·œμΉ™μ— 따라 λ‘œλ“œ λ°ΈλŸ°μ„œκ°€ λ“±λ‘λœ λŒ€μƒμœΌλ‘œ μš”μ²­μ„ λΌμš°νŒ…ν•˜λŠ” 방법이 κ²°μ •λœλ‹€κ³  μ ν˜€μžˆλ‹€.  μˆ˜μ‹  λ¦¬μŠ€λ„ˆμ— λΌμš°νŒ…ν•˜κΈ° μœ„ν•΄μ„œλŠ” λŒ€μƒ 그룹이 μžˆμ–΄μ•Όν•˜λ―€λ‘œ, μ•„λž˜ νŒŒλž€μƒ‰μœΌλ‘œ λ˜μ–΄μžˆλŠ” λŒ€μƒκ·Έλ£Ή 생성을 λˆŒλŸ¬μ€€λ‹€. 

μΈμŠ€ν„΄μŠ€λ₯Ό 선택해주고,

λŒ€μƒ κ·Έλ£Ή μ„ΈνŒ…μ€ μ•„λž˜μ™€ 같이 μ§„ν–‰ν–ˆλ‹€.

 

μ•„κΉŒ 전에 μƒμ„±ν•œ EC2 μΈμŠ€ν„΄μŠ€λ₯Ό λŒ€μƒμœΌλ‘œ λ“±λ‘ν•˜κΈ° μœ„ν•΄ -> μ•„λž˜μ— 보λ₯˜ μ€‘μΈκ²ƒμœΌλ‘œ 포함을 클릭 !

 

λŒ€μƒ κ·Έλ£Ή 생성 ν›„ λ‹€μ‹œ λ‘œλ“œλ°ΈλŸ°μ„œ μ„ΈνŒ… ν™”λ©΄μœΌλ‘œ λŒμ•„μ˜¨λ‹€.

 

μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄ μƒμ„±ν•œ λŒ€μƒκ·Έλ£Ήμ„ 선택할 수 μžˆλ‹€.

 

 

4. μž‘μ—… μ •μ˜ ( Task Definition ) 생성

ECS -> μž‘μ—…μ •μ˜ -> 생성

이름 : ecs-task-def

μ—­ν•  : ecsTaskExecutionRole

λ„€νŠΈμ›Œν¬ λͺ¨λ“œ : λΈŒλ¦¬μ§€

 

μ•„λž˜ μ»¨ν…Œμ΄λ„ˆ μΆ”κ°€ λ²„νŠΌ 클릭 

이름 : container-test

이미지 : 리포지토리에 μžˆλŠ” 이미지 URL μž…λ ₯

ν¬νŠΈλ§€ν•‘ : 호슀트 포트 0, μ»¨ν…Œμ΄λ„ˆ 포트 80 

 

μž‘μ—… μ •μ˜ 생성 μ™„λ£Œ !

 

 

 

5. μ„œλΉ„μŠ€ ( Service) 생성

ν΄λŸ¬μŠ€ν„° μ•„λž˜μ— μ„œλΉ„μŠ€  생성 λ²„νŠΌ !

 

μ„œλΉ„μŠ€ μœ ν˜• : 

- ReplicaλŠ” μ„€μ •ν•œ μž‘μ—… 개수만큼 taskλ₯Ό λ³΅μ œν•œλ‹€λŠ” 의미

- Daemon 은 ν΄λŸ¬μŠ€ν„°μ— μ—°κ²°λœ μΈμŠ€ν„΄μŠ€ 1κ°œλ‹Ή ν•˜λ‚˜μ˜ task만 μ‹€ν–‰ν•œλ‹€λŠ” 의미

​

 

- Replica , 2 : λ“±λ‘λœ taskλ₯Ό 볡제 ν•΄μ„œ 2개의 taskλ₯Ό μ‹€ν–‰ν•œλ‹€λŠ” 의미 !

 

 

배포 방식 : 둀링 μ—…λ°μ΄νŠΈ

배치 ν…œν”Œλ¦Ώ : AZ κ· ν˜• λΆ„μ‚°

 


 

λ‘œλ“œλ°ΈλŸ°μ„œ μ—°κ²° -> λ‘œλ“œ λ°ΈλŸ°μ„œμ— μΆ”κ°€ λ²„νŠΌ 

- ν”„λ‘œλ•μ…˜ λ¦¬μŠ€λ„ˆ 포트 : 80:HTTP

- λŒ€μƒ κ·Έλ£Ή 이름 : 이전에 λ§Œλ“€μ—ˆλ˜ κ·Έλ£Ή 선택 

 

μ„œλΉ„μŠ€λ„ 생성 μ™„λ£Œ !

 

EC2 μ½˜μ†”μ—μ„œ λŒ€μƒκ·Έλ£Ήμ— 가보면 ECS-EC2 μΈμŠ€ν„΄μŠ€ 2κ°œκ°€ μ—°κ²°λ˜μ–΄ 있고, ν¬νŠΈλŠ” 호슀트 동적 포트 맀핑을 ν•œ 것을 λ³Ό 수 μžˆλ”° ! 

( μ—νŽ˜λ©”λž„ 포트 32768 ~ 61000 λŒ€μ˜ μž„μ˜ 포트 )

 

 

6.  배포 λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° !

μ„œλΉ„μŠ€ : Replica μœ ν˜•μœΌλ‘œ 1개의 μ„œλΉ„μŠ€κ°€ μ•‘ν‹°λΈŒ μƒνƒœ, 2개의 μž‘μ—…μ΄ μ‹€ν–‰λ˜κ³  있음. 

 

EC2 μ½˜μ†” -> λ‘œλ“œλ°ΈλŸ°μ„œ -> μƒμ„Έμ—μ„œ ν•˜λ‹¨μ˜ DNS 이름을 λ³΅μ‚¬ν•΄μ„œ λΈŒλΌμš°μ €μ— λΆ™μ—¬λ„£μ–΄λ³΄μž !

배포가 된 것을 확인할 수 μžˆλ‹€ !

 

* μž‘μ—… μ •μ˜ μƒμ„±μ‹œ μ°Έκ³  

 

- λ„€νŠΈμ›Œν¬ λͺ¨λ“œ μ˜΅μ…˜μ—λŠ” λΈŒλ¦¬μ§€, 호슀트, awsvpc, none κ°€ μžˆλ‹€. 

 

1. λΈŒλ¦¬μ§€ : 가상 λ„€νŠΈμ›Œν¬ λΈŒλ¦¬μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜ΈμŠ€νŠΈμ™€ μ»¨ν…Œμ΄λ„ˆμ˜ λ„€νŠΈμ›Œν‚Ή 사이에 λ ˆμ΄μ–΄λ₯Ό λ§Œλ“¬. 

호슀트 포트λ₯Ό μ»¨ν…Œμ΄λ„ˆ ν¬νŠΈμ— λ‹€μ‹œ λ§€ν•‘ν•˜λŠ” 포트 맀핑을 λ§Œλ“€ 수 있음. 

정적 포트 맀핑

정적 포트 맀핑을 μ‚¬μš©ν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆ ν¬νŠΈμ— 맀핑할 호슀트 포트λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ 예λ₯Ό μ‚¬μš©ν•˜μ—¬ 호슀트의 포트 80이 μ»¨ν…Œμ΄λ„ˆμ˜ 포트 3000 μ— λ§€ν•‘λ©λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆν™”λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό ν†΅μ‹ ν•˜λ €λ©΄ 포트80 λ‘œ νŠΈλž˜ν”½μ„ Amazon EC2 μΈμŠ€ν„΄μŠ€μ˜ IP μ£Όμ†Œλ‘œ λ³΄λƒ…λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆν™”λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ΄€μ μ—μ„œ 보면 포트 3000의 μΈλ°”μš΄λ“œ νŠΈλž˜ν”½μ΄ ν‘œμ‹œλ©λ‹ˆλ‹€.

 

νŠΈλž˜ν”½ 포트만 λ³€κ²½ν•˜λ €λŠ” 경우 정적 포트 맀핑이 μ ν•©ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이것은 μ—¬μ „νžˆ ​​hostλ„€νŠΈμ›Œν¬ λͺ¨λ“œ λ₯Ό μ‚¬μš©ν•˜λŠ” 것과 λ™μΌν•œ 단점이 μžˆμŠ΅λ‹ˆλ‹€. 각 ν˜ΈμŠ€νŠΈμ—μ„œ νƒœμŠ€ν¬ μΈμŠ€ν„΄μŠ€ν™”λ₯Ό ν•˜λ‚˜λ§Œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 정적 포트 맀핑을 μ‚¬μš©ν•˜λ©΄ 단일 μ»¨ν…Œμ΄λ„ˆλ§Œ 포트 80에 맀핑할 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ λ‹€μŒ λ‹€μ΄μ–΄κ·Έλž¨κ³Ό 같이 동적 포트 맀핑과 ν•¨κ»˜ bridgeλ„€νŠΈμ›Œν¬ λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€

λ™μ ν¬νŠΈλ§€ν•‘

 

포트 λ§€ν•‘μ—μ„œ 호슀트 포트λ₯Ό μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ Dockerκ°€ μž„μ‹œ 포트 λ²”μœ„μ—μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μž„μ˜μ˜ 포트λ₯Ό μ„ νƒν•˜κ³  이λ₯Ό μ»¨ν…Œμ΄λ„ˆμ˜ 곡용 호슀트 포트둜 ν• λ‹Ήν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

예λ₯Ό λ“€μ–΄ μ»¨ν…Œμ΄λ„ˆμ˜ 3000ν¬νŠΈμ—μ„œ μˆ˜μ‹  λŒ€κΈ°ν•˜λŠ” Node.js μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ—λŠ” Amazon EC2 호슀트 47760와 같은 μž„μ˜μ˜ 높은 번호 ν¬νŠΈκ°€ 할당될 수 μžˆμŠ΅λ‹ˆλ‹€ . μ΄λ ‡κ²Œ ν•˜λ©΄ ν˜ΈμŠ€νŠΈμ—μ„œ ν•΄λ‹Ή μ»¨ν…Œμ΄λ„ˆμ˜ μ—¬λŸ¬ 볡사본을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 각 μ»¨ν…Œμ΄λ„ˆλŠ” ν˜ΈμŠ€νŠΈμ—μ„œ 자체 포트λ₯Ό ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆμ˜ 각 볡사본은 3000ν¬νŠΈμ—μ„œ νŠΈλž˜ν”½μ„ μˆ˜μ‹ ν•©λ‹ˆλ‹€ . κ·ΈλŸ¬λ‚˜ μ΄λŸ¬ν•œ μ»¨ν…Œμ΄λ„ˆλ‘œ νŠΈλž˜ν”½μ„ λ³΄λ‚΄λŠ” ν΄λΌμ΄μ–ΈνŠΈλŠ” μž„μ˜λ‘œ ν• λ‹Ήλœ 호슀트 포트λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

더보기

포트 맀핑에 호슀트 포트 0κ³Ό μ»¨ν…Œμ΄λ„ˆ 포트 80의 의미

→ λ„€νŠΈμ›Œν¬ λͺ¨λ“œ : λΈŒλ¦¬μ§€

→ ν˜ΈμŠ€νŠΈμ™€ μ»¨ν…Œμ΄λ„ˆ 사이에 λ„€νŠΈμ›Œν‚Ήμ„ μœ„ν•œ λ ˆμ΄μ–΄λ₯Ό λ§Œλ“€κ³ , 호슀트 포트λ₯Ό λ‹€μ‹œ μ»¨ν…Œμ΄λ„ˆ 포트둜 λ§€ν•‘ν•˜λŠ” ν¬νŠΈλ§€ν•‘μ„ λ§Œλ“œλŠ” 방식.

호슀트 포트λ₯Ό 0( μ—†μŒ )으둜 μ§€μ •ν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆμ˜ 호슀트 ν¬νŠΈκ°€ λ™μ μœΌλ‘œ 생성됨

μ΄λŸ¬ν•œ 동적 포트 맀핑을 μ‚¬μš©ν•  경우, μ—νŽ˜λ©”νƒˆ 포트 ( 32768~ 61000) λ²”μœ„μ˜ ν¬νŠΈκ°€ μžλ™μœΌλ‘œ ν• λ‹Ήλ˜λ©° μ΄λ•Œ alb에 μ„€μ • ν•΄ 놓은 νƒ€κ²Ÿ 그룹의 ν¬νŠΈλŠ” λ¬΄μ‹œλœλ‹€.

μ»¨ν…Œμ΄λ„ˆ 포트 80은, ν˜ΈμŠ€νŠΈλ‘œλΆ€ν„° λ‹€μ‹œ μ»¨ν…Œμ΄λ„ˆ 포트둜 λ§€ν•‘ν• λ•Œ 80μ—λ§Œ λ§€ν•‘ν•˜λ„λ‘ 정적 포트 맀핑을 μ„€μ •ν•˜λŠ” 것을 의미 !!

호슀트 포트 : 동적 포트 λ§€ν•‘μœΌλ‘œ ꡬ성

μ»¨ν…Œμ΄λ„ˆ 포트 : 정적 ν¬νŠΈλ§€ν•‘μœΌλ‘œ ꡬ성

2. 호슀트 : 호슀트 λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆμ˜ λ„€νŠΈμ›Œν‚Ήμ΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜λŠ” κΈ°λ³Έ ν˜ΈμŠ€νŠΈμ— 직접 μ—°κ²°λ©λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬ λͺ¨λ“œλ₯Ό μ‚¬μš© ν•˜λ©΄ hostμ»¨ν…Œμ΄λ„ˆλŠ” κΈ°λ³Έ ν˜ΈμŠ€νŠΈ Amazon EC2 μΈμŠ€ν„΄μŠ€μ˜ IP μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν¬νŠΈ 3000μ—μ„œ νŠΈλž˜ν”½μ„ μˆ˜μ‹ ν•©λ‹ˆλ‹€.

 

이 λ„€νŠΈμ›Œν¬ λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” λ°λŠ” μƒλ‹Ήν•œ 단점이 μžˆμŠ΅λ‹ˆλ‹€. 각 ν˜ΈμŠ€νŠΈμ—μ„œ μž‘μ—… μΈμŠ€ν„΄μŠ€ν™”λ₯Ό ν•˜λ‚˜λ§Œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 첫 번째 μž‘μ—…λ§Œ Amazon EC2 μΈμŠ€ν„΄μŠ€μ˜ ν•„μˆ˜ ν¬νŠΈμ— 바인딩할 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. hostλ„€νŠΈμ›Œν¬ λͺ¨λ“œ λ₯Ό μ‚¬μš©ν•  λ•Œ μ»¨ν…Œμ΄λ„ˆ 포트λ₯Ό λ‹€μ‹œ 맀핑할 방법도 μ—†μŠ΅λ‹ˆλ‹€ . 예λ₯Ό λ“€μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ νŠΉμ • 포트 번호λ₯Ό μˆ˜μ‹ ν•΄μ•Ό ν•˜λŠ” 경우 포트 번호λ₯Ό 직접 λ‹€μ‹œ 맀핑할 수 μ—†μŠ΅λ‹ˆλ‹€. λŒ€μ‹  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ성을 λ³€κ²½ν•˜μ—¬ 포트 μΆ©λŒμ„ 관리해야 ν•©λ‹ˆλ‹€.

 

3. awsvpc:

awsvpcλ„€νŠΈμ›Œν¬ λͺ¨λ“œμ—μ„œ Amazon ECS λŠ” κ° μž‘μ—…μ— λŒ€ν•œ ENI(탄λ ₯적 λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€)λ₯Ό 생성 및 κ΄€λ¦¬ν•˜κ³  각 μž‘μ—…μ€ VPC λ‚΄μ—μ„œ 자체 프라이빗 IP μ£Όμ†Œλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. μ΄ ENIλŠ” κΈ°λ³Έ 호슀트 ENI와 λ³„κ°œμž…λ‹ˆλ‹€. Amazon EC2 μΈμŠ€ν„΄μŠ€κ°€ μ—¬λŸ¬ μž‘μ—…μ„ μ‹€ν–‰ν•˜λŠ” 경우 각 μž‘μ—…μ˜ ENI도 λΆ„λ¦¬λ©λ‹ˆλ‹€. 

 

μ•žμ˜ μ˜ˆμ—μ„œ Amazon EC2 μΈμŠ€ν„΄μŠ€λŠ” ENI에 ν• λ‹Ήλ©λ‹ˆλ‹€. ENIλŠ” 호슀트 μˆ˜μ€€μ—μ„œ λ„€νŠΈμ›Œν¬ 톡신에 μ‚¬μš©λ˜λŠ” EC2 μΈμŠ€ν„΄μŠ€μ˜ IP μ£Όμ†Œλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. κ° μž‘μ—…μ—λŠ” ν•΄λ‹Ή ENI와 개인 IP μ£Όμ†Œλ„ μžˆμŠ΅λ‹ˆλ‹€. κ° ENIκ°€ λΆ„λ¦¬λ˜μ–΄ 있기 λ•Œλ¬Έμ— 각 μ»¨ν…Œμ΄λ„ˆλŠ” 80νƒœμŠ€ν¬ ENI의 ν¬νŠΈμ— 바인딩할 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 포트 번호λ₯Ό 좔적할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. 80λŒ€μ‹  μž‘μ—… ENI의 IP μ£Όμ†Œμ— μžˆλŠ” ν¬νŠΈλ‘œ νŠΈλž˜ν”½μ„ 보낼 수 μžˆμŠ΅λ‹ˆλ‹€ .

 

4. μ—†μŒ : 포트 맀핑 λΆˆκ°€ , 외뢀와 μ—°κ²° X

 

 

* μ°Έκ³  : 배포 μ „λž΅ - Rolling, Blue/Green, Canary

1. Rolling

  • Rolling λ°°ν¬λŠ” μ„œλ²„λ₯Ό ν•œ λŒ€μ”© ꡬ λ²„μ „μ—μ„œ μƒˆ λ²„μ „μœΌλ‘œ κ΅μ²΄ν•΄κ°€λŠ” μ „λž΅μ΄λ‹€. μ„œλΉ„μŠ€ 쀑인 μ„œλ²„ ν•œ λŒ€λ₯Ό μ œμ™Έμ‹œν‚€κ³  κ·Έ μžλ¦¬μ— μƒˆ λ²„μ „μ˜ μ„œλ²„λ₯Ό μΆ”κ°€ν•œλ‹€. μ΄λ ‡κ²Œ ꡬ λ²„μ „μ—μ„œ μƒˆ λ²„μ „μœΌλ‘œ νŠΈλž˜ν”½μ„ μ μ§„μ μœΌλ‘œ μ „ν™˜ν•œλ‹€. 이와 같은 방식은 μ„œλ²„ 수의 μ œμ•½μ΄ μžˆμ„ 경우 μœ μš©ν•˜λ‚˜ 배포 쀑 μΈμŠ€ν„΄μŠ€μ˜ μˆ˜κ°€ κ°μ†Œ λ˜λ―€λ‘œ μ„œλ²„ 처리 μš©λŸ‰μ„ 미리 κ³ λ €ν•΄μ•Ό ν•œλ‹€.

2. Blue/Green

  • Blue/Green λ°°ν¬λŠ” μ‹  버전을 λ°°ν¬ν•˜κ³  일제히 μ „ν™˜ν•˜μ—¬ λͺ¨λ“  연결을 μ‹  버전을 λ°”λΌλ³΄κ²Œ ν•˜λŠ” μ „λž΅μ΄λ‹€. ꡬ 버전, μ‹  버전 μ„œλ²„λ₯Ό λ™μ‹œμ— λ‚˜λž€νžˆ κ΅¬μ„±ν•˜μ—¬ 배포 μ‹œμ μ— νŠΈλž˜ν”½μ΄ 일제히 μ „ν™˜λ˜λ©° λΉ λ₯Έ 둀백이 κ°€λŠ₯ν•˜κ³ , μš΄μ˜ν™˜κ²½μ— 영ν–₯을 주지 μ•Šκ³  μ‹€μ œ μ„œλΉ„μŠ€ ν™˜κ²½μœΌλ‘œ μ‹  버전 ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•˜λ‹€. 단, 이런 ꡬ성은 μ‹œμŠ€ν…œ μžμ›μ΄ λ‘λ°°λ‘œ ν•„μš”ν•˜μ—¬ λΉ„μš©μ΄ 더 많이 λ°œμƒν•œλ‹€. 

3. Canary

  • 'Canary'λΌλŠ” μš©μ–΄μ˜ 어원을 μ•Œλ©΄ 이해가 더 쉽닀. CanaryλŠ” μΉ΄λ‚˜λ¦¬μ•„ λΌλŠ” μƒˆλ₯Ό μΌμ»«λŠ” 말인데, 이 μƒˆλŠ” μΌμ‚°ν™”νƒ„μ†Œ 및 μœ λ…κ°€μŠ€μ— 맀우 λ―Όκ°ν•˜λ‹€κ³  ν•œλ‹€. κ·Έλž˜μ„œ κ³Όκ±° 광뢀듀이 이 μƒˆλ₯Ό μ˜†μ— 두고 κ΄‘μ‚°μ—μ„œ 일을 ν•˜λ‹€κ°€ μΉ΄λ‚˜λ¦¬μ•„κ°€ κ°‘μžκΈ° 죽게 되면 λŒ€ν”Όλ₯Ό ν–ˆλ‹€κ³  ν•œλ‹€. Canary λ°°ν¬λŠ” μΉ΄λ‚˜λ¦¬μ•„ μƒˆμ²˜λŸΌ μœ„ν—˜μ„ λΉ λ₯΄κ²Œ 감지할 수 μžˆλŠ” 배포 기법이닀. μ§€μ •ν•œ μ„œλ²„ λ˜λŠ” νŠΉμ • userμ—κ²Œλ§Œ λ°°ν¬ν–ˆλ‹€κ°€ 정상적이면 전체λ₯Ό λ°°ν¬ν•œλ‹€. μ„œλ²„μ˜ νŠΈλž˜ν”½μ˜ 일뢀λ₯Ό μ‹  λ²„μ „μœΌλ‘œ λΆ„μ‚°ν•˜μ—¬ 였λ₯˜ μ—¬λΆ€λ₯Ό 확인할 수 있고, 이런 μ „λž΅μ€ A/B ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•˜λ©°, μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§μ— μœ μš©ν•˜λ‹€. νŠΈλž˜ν”½μ„ λΆ„μ‚°μ‹œν‚¬ λ•ŒλŠ” λΌμš°νŒ…μ„ λžœλ€ν•˜κ²Œ ν•  수 있고, μ‚¬μš©μžλ‘œ λΆ„λ₯˜ν•  수 μžˆλ‹€. 

 

[μš”μ•½]

 

- Blue/Green: ν…ŒμŠ€νŠΈν•΄λ³΄κ³  νŠΈλž˜ν”½μ„ ν•œλ²ˆμ— μ „ν™˜ν•¨. 둀백이 빠름

   - λ™μΌν•œ μ–‘μ˜ instance둜 이루어진 μƒˆλ‘œμš΄ Server Group을 생성

   - μ‹ κ·œ Server Group이 μ •μƒμƒνƒœκ°€ 되면 LBλŠ” μ‹ κ·œ Server Group에 νŠΈλž˜ν”½μ„ 뢄산함. 

   * Blue ꡬ역은 μ‹€μ œ μš΄μ˜μ„œλ²„μ΄κ³ , Green κ΅¬μ—­μ—μ„œ μ‹ κ·œλ²„μ „ ν…ŒμŠ€νŠΈλ₯Ό ν•˜κ³ , λ¬Έμ œκ°€ μ—†μœΌλ©΄ Blue ꡬ역에 ν–₯ν•˜λ˜ Request λ₯Ό Green κ΅¬μ—­μœΌλ‘œ ν–₯ν•˜κ²Œν•¨. 그러면 이제 Green ꡬ역이 μ‹€ μš΄μ˜μ„œλ²„κ°€ 되고 Blue ꡬ역은 ν…ŒμŠ€νŠΈμ„œλ²„κ°€ 됨. (ꡬ역 swap)

- Rolling: Blue/Green κ³Ό λ™μΌν•˜λ‚˜ 단, μΈμŠ€ν„΄μŠ€λ³„ λ˜λŠ” κ·Έλ£Ήλ³„λ‘œ Rolling

- Canary: νŠΈλž˜ν”½μ„ λΆ„μ‚°μ‹œμΌœ μ „ν™˜ν•¨

   - κ°€μž₯ μž‘μ€ 개수의 μΈμŠ€ν„΄μŠ€λ₯Ό κ΅μ²΄μ‹œν‚€κ³ 

   - μƒˆλ‘œμš΄ λ²„μ „μœΌλ‘œ νŠΈλž˜ν”½μ„ λΆ„μ‚°μ‹œν‚¨λ‹€ (1~5%)

   - μƒˆλ‘œμš΄ 버전에 μ΄μŠˆκ°€ μ—†μ„λ•ŒκΉŒμ§€ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜κ³ 

   - νŠΉμ •μ‹œκ°„κΉŒμ§€ μ΄μŠˆκ°€ μ—†μœΌλ©΄ 배포λ₯Ό λŠ˜λ €κ°„λ‹€.

 

 

Comments