[AWS 파헤치기] #7 ECS 작업정의(task-definition)하기
AWS ECS에는 일전에 다루었던 Cluster 외에도 Service와 Task라는 개념이 존재한다.
우선 테스크란, ECS에서 우리가 생성한 컨테이너를 구동하는 최소 단위이다. 그렇다고 "컨테이너=테스크"라는 의미는 아니며 n개의 컨테이너 묶음을 하나의 Task로 지정할 수 있다.
예를 들어 우리가 하나의 웹 서비스를 구성하기 위해 was, db, redis 각각의 컨테이너를 사용한다고 가정해보자 이런 경우에 docker-compose를 사용해 하나의 묶음으로 배포할 수 있다. 테스크 또한 비슷하게 생각할 수 있다. 우리가 실행하고자 하는 컨테이너를 묶음으로 만들어 하나의 배포 단위로 만들 수 있다.
직접 테스크 정의를 해보자
1. 새 작업 정의 생성
우선 좌측 메뉴의 작업 정의로 이동해 "새 작업 정의" 버튼을 클릭!
2. 테스크 기본 정보 입력
작업 정의 생성에 들어가면 가장 먼저 보이는 부분은 "작업의 이름"과 "작업 역할" 그리고 "네트워크 모드"를 선택할 수 있다. 작업 이름은 그냥 식별할 수 있는 이름으로 진행하면 되고, 작업 역할은 IAM을 통해 사용 가능한 Role를 설정하는 것으로 보이는데 설정하지 않아도 크게 문제는 없었다. 눈여겨 볼만한 것은 network mode이다. ECS에서는 host, bridge, awsvpc, none 총 4가지의 네트워크 모드를 제공한다.
host와 bridge 그리고 none의 network 모드는 기존에 docker에서도 사용하던 방식이니 자세한 설명은 하지 않고 여기서 처음보는게 awsvpc인데 ECS에서는 EC2 인스턴스와 같은 네트워크 속성을 제공한다. awsvpc를 통해 컨테이너는 ENI 및 기본 프라이빗 IP 주소를 갖게 된다. 자세한 내용은 AWS 공식 문서를 참고하면 좋을것 같다.
3. 작업 실행 역할과 작업 크기
작업 크기는 테스트를 구동하는 과정에서 사용할 수 있는 시스템 리소스를 설정하는 부분인 것 같은데.. 정확한 내용은 문서를 읽어봐도 잘 이해가 가지 않았다. EC2를 사용하여 컨테이너를 운용하는 경우에는 설정에 대해서는 선택사항이다.
4. 컨테이너 설정
기본 컨테이너 설정은 컨테이너 이름과 참조할 이미지 url 주소를 입력해줍니다.
다음, 프라이빗 레지스트리 인증을 사용하기 위해서는 해당 체크박스 선택 후 인증정보를 넣어주면 된다.
메모리 제한(MiB)의 경우 컨테이너에서 사용할 수 있는 메모리를 제한한다. 포트 매핑의 경우 호스트와 컨테이너 사이의 사용할 포트를 입력한다. ECS의 경우 AWS alb와 연결하여 사용할 때 dynamic port mapping을 사용할 수 있다.
dynamic port mapping을 사용하는 경우 호스트 포트를 0번으로 설정하면 에페메랄 포트(32768-61000) 범위의 포트가 자동으로 할당되며 alb에 설정해놓은 target group의 포트는 무시된다.
컨테이너 설정 부분에는 이 외에도 참 다양한 설정 내용이 존재하니 자세한 내용은 작업 정의 파라메터 공식 문서를 참조 바란다.
5. 테스크 리비전
테스크 정의를 완료하고 나면 가장 처음에 설정한 "작업 정의 이름"의 테스크가 생성되며 각각의 테스크는 리비전으로 관리된다. 이렇게 생성된 테스크와 리비전을 통해 이후 서비스를 통해 배포될 테스크에 대한 관리를 진행할 수 있다.
위에서 알아본 설정들이 테스크를 정의하는 가장 기본적인 설정들이다. 추가적으로 여러 가지 옵션들을 사용하면 좀 더 입맛에 맞는 컨테이너 설정들이 가능합니다. 아직 ECS를 통해 실제 서비스 운용을 해보지 않았기에 ECS는 어떤 개념들을 가지고 있고 기본적인 설정들이 무엇인지 알아보았습니다. 잘못되거나 정확하지 않은 내용이 있다면 말씀 부탁드립니다.
그럼 ECS의 테스크 정의에 대한 내용은 여기까지 살펴보도록 하겠습니다.
탕빠이!