목차
지난 번에 ECS 개념을 정리하였는데 프로젝트에 들어가기전에 EC2 Instance와 Fargate 배포 방식을 테스트 해보겠다. 이번 포스팅해서는 EC2 Instance로 앱을 배포하는 테스트를 진행해 보겠다.
ECS 배포 테스트 순서
- Cluster 생성
- Task Definiton 생성
- ALB 생성
- Service 생성
- Load Balancer를 통한 테스트 확인
사전준비
- VPC x 1 , Public subnet x 2, Private Subnet x 2
- NAT Gateway, Internet Gateway
- ECR Image Push
Cluster 생성

먼저, 테스트를 EC2 인스턴스 기반으로 진행할 것이므로 Amazon EC2 인스턴스를 선택한다. 이후 Auto Scaling Group을 생성하여 인스턴스 수를 관리하도록 하겠다. 인스턴스 유형은 Docker 이미지의 크기와 애플리케이션의 요구 사항에 맞춰 설정하면 되는데, 나는 상대적으로 가벼운 이미지를 사용하므로 기본적으로 t2.micro 인스턴스를 선택했다.
마지막으로, ECS에서 인스턴스를 관리할 수 있도록 필요한 인스턴스 역할을 생성하고 이를 선택해준다.

서브넷은 private subnet을 선택하고, 퍼블릭 IP는 서브넷 설정에 대한 사용으로 선택했다. 보안 그룹은 전부다 열어준 상태에서 테스트를 진행하였다.

ECS와 EKS에서는 Container Insights의 기능이 있다. Container Insights는 컨테이너 재시작 오류 같은 진단 정보를 제공하여 문제를 격리하고 신속하게 해결할 수 있도록 도와준다. Cloudwatch를 통해 확인할 수 있으므로 컨테이너 관리에 있어 매우 유용한 기능이다. 현 실습에선 사용하지 않도록 하겠다.

Cluster를 생성 하였다니 다음과 같이 컨테이너 인스턴스가 두개 생성된 것을 확인 할 수있다. 다음은 Task Definition을 생성해보겠다.
Task Definition 생성

다음은 Task에 Infrastructure Requirements 작성해 준다. 작업 정의 생성에 들어가면 가장 중요한 부분은 네트워크 모드 이다. ECS에서는 host, bridge, awsvpc, none 총 4가지의 네트워크 모드를 제공한다. EC2로 생성하기 때문에 default를 선택하겠다. default는 Bridge 네트워크이다. 다음은 컨테이너에 따라 CPU나 메모리를 알맞게 할당해주면된다. 현재는 가벼운컨테이너를 사용하므로 1vCPU, 3GB사향만 할당하도록 하겠다.
- Bridge 참고 URL: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/networking-networkmode-bridge.html
- host 참고 URL : https://docs.aws.amazon.com/AmazonECS/latest/developerguide/networking-networkmode-host.html
- awsvpc 참고 URL: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html

ECR에 올린 이미지 URl을 등록하여 컨테이너를 하나 제작해 준다. 주의할 점은 Bridge 모드에서는 동적 할당 방식과 정적 할당 방식이 있는데 정적 할당 방식을 사용할 경우 호스트 포트를 지정해주어야한다. 반대로 동적 할당방식에는 호스트포트를 지정해주지 않아도 된다.
정적 할당 방식을 사용할 경우 각 호스트에서 태스크의 인스턴스화를 하나 이상 실행할 수 없기 때문에 주의해야한다.
ALB 생성

Public subnet에 매핑시켜 외부와 통신을 가능하게 한다.

컨테이너 포트는 4000이기 때문에 타겟그룹을 4000으로 매핑해준다.
이후 ALB에 Target Group에 선택해준후 생성하도록 하겠습니다.
Service 생성

기존에 만든 Task Defintion을 적용시켜주고 Replica를 2개로 설정해준다. 이렇게 설정해두면 Task를 따로 생성하지 않아도 Service가 Task Defintion을 참조하여 인스턴스에 적절하게 Task를 배치해준다.

배포 방식은 롤링 업데이트로 진행하도록 하겠다.

기존에 만들었던 ALB를 그대로 선택해주면 된다. alb연결까지 마친 후 서비스를 생성해준다. 이외에도 태스크 배치, 오토스케일링 등 다양한 옵션들을 설정 할 수 있다. Cluster에서도 오토 스케일링 을 설정할 수 있었는데 Cluster는 EC2 Instance를 대상으로 오토스케일링을 진행하고 Service에서는 Task를 대상으로 오토스케일링을 진행합니다. Bridge 모드 에서 Task 대상으로 오토스케일링을 할 경우는 동적 할당 방식을 이용해야 한다.
Service를 생성후 Task가 만들어질때까지 어느정도 시간이 소요된다.
Load Balancer를 통한 테스트 확인

다음과 같이 Service가 Task를 배포한 모습을 볼 수 있다. ALB를 통해 정상적으로 배포가 되어있는지 확인해보록 하겠다.

정상적으로 배포된 모습을 확인할 수 있다.
'AWS' 카테고리의 다른 글
| [AWS] MediaConvert + lambda를 이용한 Vod 스트리밍 파일 업로드 (0) | 2024.12.31 |
|---|---|
| [AWS] Image Resizing 파이프라인 구축 (0) | 2024.12.31 |
| [AWS] Cloudfront + S3 정적 웹사이트 배포 (0) | 2024.12.31 |
| [AWS] Cloudtrail vs Config (0) | 2024.11.20 |
| [AWS] ECS 개념 (0) | 2024.11.11 |