회사에서 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 |