Amazon ECS on AWS Fargate 생성 시 unvalid request provided: Create TaskDefinition: Fargate only supports network mode ?awsvpc? 문제 해결

Amazon ECS on AWS Fargate 생성 시 unvalid request provided: Create TaskDefinition: Fargate only supports network mode ?awsvpc? 문제를 해결하는 방법에 대해서 정리해 봤습니다.
2024.05.04

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Amazon ECS on AWS Fargate 생성 시 unvalid request provided: Create TaskDefinition: Fargate only supports network mode ?awsvpc? 문제를 해결하는 방법에 대해서 정리해 봤습니다.

문제 발생

CloudFormation 스택을 생성하는 도중 다음과 같은 에러가 발생했습니다.

Resource handler returned message: "Invalid request provided: Create TaskDefinition: Fargate only supports network mode ?awsvpc?. (Service: AmazonECS; Status Code: 400; Error Code: ClientException; Request ID: xxxxxxxxxxx; Proxy: null)" (RequestToken: xxxxxxxxxxx, HandlerErrorCode: InvalidRequest)

에러 메시지를 살펴보면, Fargate에서 네트워크 모드는 awsvpc만 사용 가능하다는 에러 메시지입니다.

여기서 네트워크 모드에 대해 설명하자면 다음과 같습니다.

  • 브리지 : 가상 네트워크 브리지를 사용하여 호스트와 컨테이너의 네트워킹 사이에 레이어를 만듭니다. 이렇게하면 호스트 포트를 컨테이너 포트에 다시 매핑하는 포트 매핑을 만들 수 있습니다. 매핑은 정적 또는 동적일 수 있습니다. 하지만 각 호스트에서 태스크의 인스턴스화를 하나 이상 실행할 수 없습니다. 이는 정적 포트 매핑이 단일 컨테이너 만 포트 80에 매핑 할 수 있기 때문 입니다. 포트 매핑에 호스트 포트를 지정하지 않으면 Docker가 임시 포트 범위에서 사용되지 않는 임의의 포트를 선택하여 컨테이너의 공용 호스트 포트로 할당하도록 할 수 있습니다.
  • 호스트 : 컨테이너는 기본 호스트 Amazon EC2 인스턴스의 IP 주소를 사용하여 ex)포트 3000에서 트래픽을 수신, 각 호스트에서 태스크의 인스턴스화를 하나 이상 실행할 수 없습니다.
  • awsvpc : Amazon ECS는 각 작업에 대해 ENI (엘라스틱 네트워크 인터페이스) 를 생성 및 관리하며, 각 작업은 VPC 내에서 자체 프라이빗 IP 주소를 받습니다. 이 ENI는 기본 호스트 ENI와 별개입니다. Amazon EC2 인스턴스에서 여러 작업을 실행하는 경우 각 작업의 ENI도 별개입니다.
  • 없음 : 포트 매핑 불가, 외부와 연결 X

Fargate의 경우 EC2 인스턴스를 생성하는 것이 아니라 컨테이너만으로 서비스가 움직이기 때문에 컨테이너 본인이 ENI를 관리할 필요가 있습니다. 그렇기 때문에 각 작업에 대해 ENI를 생성하고 관리할 수 있는 awsvpc 모드를 Fargate에서 사용해야 합니다.

문제 해결

NetworkMode: awsvpc

네트워크 모드를 awsvpc로 변경합니다.

이후 다시 CloudFormation 스택을 생성해 보면, 성공적으로 Fargate가 생성되는 것을 확인할 수 있습니다.

마지막으로 로드 밸런서의 DNS로 접속해 보면, 웹 페이지도 문제없이 열리는 것을 확인할 수 있습니다.

본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 kis2702@naver.com로 보내주시면 감사하겠습니다.