1. Amazon ECS on Fargate 란?
AWS Fargate 는 EC2 인스턴스의 서버나 클러스터를 관리 할 필요 없이 서버리스 방식으로 Amazon ECS 에서 컨테이너를 실행할 수 있도록 만들어주는 서비스 입니다.
Amazon ECS on Fargate 를 사용하면 컨테이너를 실행하기 위해 가상 머신 서버의 클러스터를 프로비저닝하거나 구성하고, 관리할 필요가 없습니다. 또한 서버 사용량을 고려하여 유형을 선택하거나, 클러스터를 조정해야 할 시점을 고민하거나 클러스터 패킹을 최적화 할 필요가 없어지는 AWS 컨테이너 생성 및 관리 서비스 입니다.
2. Amazon ECS on Fargate Hands-on
- 실습 목표
ECR 에 Push 한 컨테이너 이미지를 이용하여 AWS Fargate 방식으로 ECS 를 생성해보고, 이를 ALB 와 연결한 뒤에 추가적으로 멀티 타겟그룹을 등록하는 것을 본 실습의 목표로 합니다.
- 실습 순서
- ECR 생성하고, 컨테이너 이미지 Push
- ECS 클러스터 생성 및 구성하기
- ALB 구성 및 생성
- ECS 서비스 배포하기
- 멀티 타겟그룹 등록하기
- 실습 구성
ECR 에 업로드한 이미지를 사용하여 ECS 클러스터 및 Service 를 생성하고, ALB와 연결하여 접속하도록 합니다.
1.ECR 생성하고, 컨테이너 이미지 Push
1) Docker 파일 및 html 파일을 작성 합니다.
2) Dockerfile 을 build 하여 Docker Image를 생성합니다.
docker images 명령어를 통해 build 한 이미지 확인합니다. nginx라는 레포지토리 이름에 test-nginx 라는 태그가 붙은 이미지가 생성된 것을 확인할 수 있습니다.
3) ECR 프라이빗 리포지토리 생성
앞서 생성한 이미지를 ECS 가 사용할 수 있도록 ECR 프라이빗 리포지토리를 생성합니다.
Access 를 제어하고, 외부에 공개되지 않도록 프라이빗 리포지토리 생성을 선택하고, 원하는 이름으로 리포지토리 이름을 지정하여 URI 를 생성합니다.
4) ECR 에 로그인하기
-연결하는 권한 정책 : AmazonEC2ContainerRegistryFullAccess
$ aws ecr get-login-password — region [ 해당 리전 ]
$ docker login -u AWS -p [토큰 값] [ ECR 리포지토리 URI]
5) ECR 에 이미지 Push
$ docker push [ECR URI] :[이미지태그]
콘솔의 ECR 프라이빗 리포지토리에 이미지가 Push 된 것을 확인 가능합니다.
2. ECS 클러스터 생성 및 구성하기
1) ECS 클러스터 생성하기
** 인프라 유형
– AWS Fargate : 서버나 클러스터 관리가 필요 없는 서버리스 방식으로 Amazon ECS 클러스터 생성
– Amazon EC2 : Amazon EC2 위에 Amazon ECS 클러스터 생성, 수동 구성으로 구성 및 관리가 필요하고, 변동 가능성이 적은 일관된 리소스 요구가 있는 워크로드에 적합
– ECS Anywhere : 고객의 기존 인프라에서 Amazon ECS 클러스터를 생성 가능
사용자가 직접 서버나 클러스터의 구성 및 관리할 필요가 없는 서버리스 방식의 AWS Fargate 로 ECS 생성 선택합니다.
2) ECS 작업 정의 ( ECS Task ) 구성하기
ECS 태스크 실행 시 역할을 할 IAM Role 을 우선 생성합니다.
신뢰할 수 있는 엔터티 유형에서 ECS 서비스 자체에 권한을 부여하기 위한 “AWS서비스” 선택합니다.
-연결할 권한 정책 : AmazonECSTaskExecutionRolePolicy
이제 ECS 태스크 정의 및 구성을 설정합니다.
이때, 컨테이너 이미지 URI 는 앞서 ECR 생성 후 Push 한 이미지의 URI 를 입력하고, 태스크 역할 및 태스크 실행 역할 은 앞서 생성한 IAM Role 을 입력합니다.
3. ALB 구성 및 생성
Private subnet에 위치하는 ECS 와 연결하여 외부의 트래픽 진입점이 될 ALB 를 생성합니다.
1) 타겟그룹 생성하기
2) ALB 생성하기
외부 트래픽의 진입점이 되는 ALB 이므로 스키마는 Internet-facing 으로 설정합니다.
리스너는 HTTP:80으로 설정하고, 앞서 생성한 타겟그룹 ( ecs-test-tg ) 에 트래픽을 전달하도록 설정합니다.
4. ECS 서비스 배포하기
1) ECS 서비스 생성하기
“2.클러스터 생성 및 구성하기” 에서 생성한 클러스터(kico-ecs-test)를 선택하고, 서비스를 생성합니다.
컴퓨팅 옵션은 직접 태스크를 실행하고 조정 관리하기 위하여 “시작유형” 으로 선택 합니다.
※ 클러스터 컴퓨팅 옵션
-용량 공급자 전략 : 인프라의 조정을 관리하기 위하여 태스크가 클러스터의 용량 공급자에 분배되는 방식을 결정함. Amazon ECS 워크로드가 실행되는 인프라에 따라 사용할 수 있는 용량 공급자 유형이 결정됨
참고 ) Amazon ECS Anywhere에서 외부 컨테이너 인스턴스를 사용하는 경우 용량 공급자를 사용할 수 없음.
-시작 유형 : 용량 공급자 전략을 사용하지 않고 직접 태스크를 시작
1) ECS 서비스 배포구성 및 네트워크 설정하기
서비스 유형은 원하는 복수의 작업 수를 배치하기 위하여 “복제본”을 선택합니다.
** 애플리케이션 유형
-서비스 : 중지 및 다시 시작할 수 있는 장기 실행 컴퓨팅 작업을 처리 하는 태스크 그룹을 시작
-태스크 : 실행하고 종료하는 독립 실행형 태스크
참고 ) 태스크를 선택할 경우 로드밸런서와 연결할 수 없음
** 서비스 유형
-복제본 : 클러스터 전체에 원하는 작업 수를 배치하고 유지 관리
-대몬(Daemon) : 각 컨테이너 인스턴스에 작업 사본 하나를 배치하고 유지 관리
2) ECS서비스 네트워크 연결하기
3) 로드밸런서와 ECS 서비스 연결하기
4) ECS 서비스 및 태스크 실행 확인하기
5. 멀티 타겟그룹 등록하기
하나의 ECS 클러스터에 여러 컨테이너가 생성되거나, 여러 포트를 사용하고 있다면 타겟 그룹을 분리하여 트래픽을 전달 해야 하는 경우가 발생합니다.
AWS 콘솔에서는 하나의 서비스에 하나의 타겟그룹을 등록 하는 것만 지원하고 있어 여러 개의 타겟 그룹을 연결하고 싶은 경우 aws cli 를 통해 별도의 설정을 해주어야 합니다.
1)새로운 타겟 그룹 추가 생성 및 로드밸런서 리스너 추가 설정하기
2) 작업을 진행 할 EC2 에 ECS 에 관한 권한 주기
-인라인 정책 권한 : ListServices, ListServicesByNamespace, UpdateServices
3) ECS update-service 작업 진행
EC2 인스턴스에 접속하여 aws cli 를 통해 ECS update-service 작업을 진행합니다.
** aws cli 버전은 v2 여야하고, cli 로그인하는 IAM 에 ECS 에 대한 권한이 있어야 ECS update-service 작업이 가능합니다.
$ aws ecs update-service –cluster [클러스터명] –service [ 서비스 네임 ] –cli-input-json file://input.json –region [ 해당리전 ]
4) 멀티 타겟그룹 등록 확인
3. 마무리
AWS Fargate 를 이용하여 ECS 를 생성할 때 복잡한 구성이나 별도의 서버를 생성할 필요 없이 네트워크만 잘 설정해 준다면 손쉽게 AWS 위에 컨테이너를 올릴 수 있는 실습이었습니다. 하지만 멀티 타겟그룹 등록과 같은 추가 설정이나 복잡한 다수의 서비스와 컨테이너 생성이 필요한 경우에는 생성 시 설정하는 옵션 값들의 의미와 기능을 정확하게 파악하고, 컨테이너의 네트워크 플로우를 정확히 인지하고 있어야 네트워크의 복잡도를 줄이고, 실패 없는 작업이 가능합니다.
참고자료
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/AWS_Fargate.html
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/cluster-capacity-providers.html
안녕하세요
2. ECS 클러스터 생성 및 구성하기
1) ECS 클러스터 생성하기
저는 이 부분에서 네트워킹 항목이 뜨지 않는데 이유가 무엇인지 모르겠습니다..