IT/AWS

[AWS] ECS Fargate 도입기

어린이개발자 2024. 11. 27. 21:01

회사에서 AWS lightsail 을 주로 사용하다가 비용 감소 및 관리 효율화 목적으로 ECS Fargate 로의 전환을 시도했다. 

그 과정에서 수많은 시행착오를 겪었고 이를 공유하여 도움이 되었으면 하는 마음에서 글을 쓰고자 한다.

 

@ VPC 영역 

 

1. Subnet

- VPC 에 Public Subnet 2개, Private Subnet 2개를 각각 생성한다. (기존에 생성된 Subnet 존재 시 활용 가능 / IPv4 CIDR 설정 시 VPC 의 IPv4 CIDR 고려 필요)

- Public 과 Private 설정에 따라 활용 목적이 다르다.

- VPC 에 가용영역이 4개 존재했고, 2개의 가용영역(c,d)에 각각 Public, Private Subnet 을 1개씩 배치하였다. 

 

2. Routing Table

- VPC 생성 시 기본으로 생성되는 Routing Table (→ Public Subnet 을 연결) 외에 Private Subnet 들만을 연결할 Routing Table 을 추가 생성한다.

- Public Subnet 을 연결할 Routing Table 에는 Internet Gateway 를 생성하여 연결한다.

- Private Subnet 을 연결할 Routing Table 에는 NAT Gateway 를 생성하여 연결한다.

 

3. NAT Gateway

- 1. 에서 생성한 Public Subnet 중 2번째 Subnet 을 NAT Gateway 에 연결한다.

- Elastic IP 를 생성 후 NAT Gateway 에 할당한다. → Outbound IP 에 해당하며, 외부 서비스 연동 시 사용된다.

 

@ EC2 영역

 

4. Application Load Balancer (ALB)

- Scheme > Internet-facing 을 선택한다.

- 가용 영역에서 Public Subnet 을 연결하여 설정한다.

- 보안 그룹에서는 핵심이 되는 포트(80, 443 등)를 개방했다.

- 대상 그룹

  > 80, 443 Port 에 대해 Listener 를 추가한다.

 

5. 대상 그룹

- Target Type → IP addresses 로 선택한다.

- Protocol : HTTP / Port : 80 / Health-check : “/” 로 설정한다.

 

@ ECR 영역

 

6. Repository 생성 후 Image 추가

- Github Action 으로 작성된 스크립트를 실행 (Trigger : Git Master Branch 에 Merge) 하면 Repository 에 실행하고자 하는 웹 애플리케이션의 Image 가 자동으로 추가된다.

- 추후 ECS Task 정의 시에 해당 이미지의 URI 를 사용한다.

 

@ ECS 영역

 

7. Task Definition 설정

- Launch type

  > AWS Fargate

- Operating system/Architecture

  > Linux/X86_64

- Network mode

  > awsvpc

- Task role

  > ecsTaskExecutionRole

- Task execution role

  > ecsTaskExecutionRole

- ECR 에서 Pull 하고자 하는 Image URI 를 태그 정보까지 정확히 입력한다.

- Container Port → 80 / Protocol → TCP / App protocol → HTTP 설정

- Log collection 설정 통해, Amazon CloudWatch 에서 해당 웹 애플리케이션의 로그를 자세히 확인 가능하다.

 

8. Service

- Cluster 생성을 전제로 한다.

- Compute options

  > Launch type → FARGATE / Platform version → 1.4.0 (LATEST 대신 선택)

- Application type

  > Service

- Networking 에서 Subnet 을 Private Subnet 만을 선택한다. (NAT Gateway 를 사용할 것이므로)

- Public IP 옵션을 Turned off 설정하는 것이 중요하다.

- 위에서 생성한 ALB, Listener, Target Group 를 연결한다.

- Load balancing > Health check grace period 값을 “240”으로 설정

  > Health check 시 문제 발생하면, 해당 옵션 변경 검토 필요

 

9. Route 53 에서 생성한 도메인에 위에서 생성한 ALB 을 연결하여 사용한다.

 

최종적으로 ECS Fargate Service 의 Task 가 정상적으로 Running 상태라면 완료된 것이다 !

'IT > AWS' 카테고리의 다른 글

[AWS] EC2 Nginx 무중단 배포  (0) 2024.12.05
[AWS] DynamoDB 연동기  (1) 2024.11.29