Eloy's devlog
docker   docker-compose   AWS   Fargate   ECS   Task-definition

Docker compose 에서 ECS 리소스 정의하기

summary

docker compose 파일에서 컨테이너의 리소스를 정의한다.

ECS 리소스 변경 필요성

AWS ECS를 통해 컨테이너 오케스트레이션을 이용해 서비스를 실행하다 보면 실행되는 컨테이너의 리소스가 부족한 경우가 생길 수 있다. 필자의 경우에는 frontend 서비스 컨테이너에서 react를 실행할 때 메모리 부족으로 인해 서비스가 지속적으로 뻗는 상황이 발생하였다. 따라서 컨테이너의 cpu 및 memory를 늘릴 필요가 있었다.

이를 위해 먼저, 실행되고 있는 ECS의 리소스가 어떻게 되는지 먼저 확인해보자.

ECS의 리소스 확인

컨테이너 서비스(ECS)의 리소스는 시작유형이 Fargate인 경우, task definition에서 정의된다. AWS 콘솔에서 [ECS - 작업정의 - 작업]에서 리소스의 사이즈를 확인 할 수 있다. docker compose를 통해 AWS cloudformation으로 convert하는 경우, 기본 작업정의의 리소스 사이즈는 다음과 같다.

compose 파일에서 task definition 작업 크기 지정

docker compose convert 시의 리소스 사이즈를 설정하는 것은 compose 파일에서 deploy.resources.limits.cpus / deploy.resources.limits.memory 를 통해 설정할 수 있다.

services:
  YOUR_SERVICE_NAME:
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: '2Gb'

이를 통해 Task definition의 작업 크기를 지정할 수 있다. 한 가지 주의 할 점은 공식문서에는 cpu 설정을 cpu에서 할 수 있다고 하지만 실제로는 cpus 를 통해 설정할 수 있다.

cloudformation-change-set-resources

docker compose convert를 통해 생성된 chage-set의 템를릿을 보면 task definition 에 cpu, memory 설정이 된 겉을 확인할 수 있다.

task-definition-resource-size-on-console

change set 이 적용되면 콘솔에서도 내용을 확인할 수 있다.

end

AWS 컨테이너 오케스트레이션 환경에서 컨테이너의 리소스 사이즈를 조정하는 방법에 대해 알아보았다. 만약 서비스가 리소스 부족으로 인해 뻗는다면 작업 크기를 늘려서 실행시켜보자. 다음 포스팅에서는 ECS에 추가적인 AWS 정책을 연결하는 방법에 대해 알아보겠다.