[AWS] ECS 컨테이너 서비스 구축하기 (With EC2)

Jeongtae Kim·2023년 3월 7일
2

AWS

목록 보기
3/13
post-thumbnail

오늘은 ECS 컨테이너 서비스를 EC2를 이용하여 구축해보겠습니다.

1. Cluster 생성

저는 'ecs-cluster' 라는 이름으로 Cluster을 생성하겠습니다. ALB만 Public Subnet에 구축할 것이므로 Private Subnet만 선택하겠습니다.

Infrastructure는 'Amazon EC2 instances' 를 선택하고 Autoscaling Group을 이곳에서 생성하겠습니다. instance type은 't3.small' 이고, 최소 2개의 인스턴스를 생성하고 최대 3개의 인스턴스를 생성하게 했습니다.

이제 Create를 누르면 Cluster가 생성됩니다.

2. Task Definition 생성

Task Definition은 Docker Container의 정보를 정의하는 것입니다. 이름은 'ecs-task-definition' 이라고 했고, 컨테이너 이름은 'ecs-container' 로 정했습니다. 컨테이너 이미지는 ECR에서 가져오겠습니다. 컨테이너 포트는 80번입니다.

추가로, 컨테이너 health check 명령을 정해주겠습니다.

앱 환경을 'Amazon EC2 instances' 로 선택하고, 가벼운 컨테이너이므로 0.5 vCPU, 0.5 GB를 할당했습니다.

여기서 Task role은 다른 AWS 서비스(S3, SQS 등)을 호출하기 위해 사용합니다. 저는 사용하지 않기 때문에 None으로 설정하겠습니다. Task execution role은 ECR에서 이미지를 가져오거나 Cloudwatch에 로그를 보내는 등의 역할을 합니다. IAM role이 있으면 선택하고, 없으면 Create new role 을 선택하여 생성합니다. EC2를 사용하기 때문에 Network mode는 bridge를 선택합니다.

3. Service 생성

Task Definition에서 정의된 대로 배포된 Container Set을 Task라 부르고, Task들의 Life Cycle을 관리하는 부분을 Service라고 합니다. 자세한 ECS 개념 설명 링크를 남기겠습니다.
Service를 생성하면 Task도 같이 생성되기 때문에 Task를 따로 생성할 필요는 없습니다.

먼저, Compute configuration은 처음에 Cluster 생성할 때 같이 생성했던 Autoscaling Group으로 정하겠습니다.

Deployment configuration에서 Application type으로 Service 를 선택하고 Family에서 전에 만든 Task definition인 ecs-task-definition 을 선택합니다. Service 이름은 'ecs-service' 로 하겠습니다.

추가로, Load balancing 옵션에서 Target group이 비어있는 ALB를 선택해주겠습니다.

이제 Create 를 누르고 기다리면 Service가 생성됩니다.

여기서 끝나면 좋겠지만, ALB Target group을 보니 unhealthy가 떠있더라고요...
알고보니, cluster 생성할 때 같이 생성되는 Autoscaling group의 보안 그룹이 default라 ALB가 작동이 안 되었습니다. 그렇기 때문에, 따로 보안 그룹을 만들어서 기존 인스턴스와 Launch Template에 보안 그룹을 적용하셔야 합니다.

보안 그룹까지 적용하셨으면 ALB에 Healthy가 뜨고, 접속이 정상적으로 됩니다.

포스팅 마치겠습니다. 감사합니다.

profile
유용할지도 모른다.

0개의 댓글