[AWS][ECS] awsvpc 네트워크 모드로 서비스 배포시 참고
아래와 같이 ECS에는 4가지 네트워크 모드가 있다.
- Bridge (기본값)
- Docker의 기본 네트워크 모드.
- 컨테이너가 ECS 인스턴스의 브리지 네트워크를 사용합니다.
- 컨테이너 포트와 호스트 포트를 매핑해야 합니다.
- 주로 EC2 런타임에서 사용됩니다.
- Host
- 컨테이너가 ECS 인스턴스의 네트워크 스택을 직접 사용합니다.
- 호스트 포트를 컨테이너와 동일하게 사용합니다.
- 포트 충돌 주의 필요.
- 주로 고성능 네트워크가 필요한 경우에 사용.
- awsvpc
- 컨테이너에 고유한 Elastic Network Interface(ENI)와 프라이빗 IP 주소를 할당합니다.
- Fargate에서 필수로 사용됩니다.
- VPC 내에서 네트워크 구성이 간단하고 확장성이 좋음.
- None
- 컨테이너에 네트워크 인터페이스를 연결하지 않습니다.
- 자체 네트워크가 필요하지 않은 특수 용도(예: 데이터 처리)에 사용됩니다
기본적으로 서비스 배포시 네트워크로 bridge 모드로 많이 사용할 것이다.
awsvpc 모드로 사용할 때 몇가지 주위 할 점이 있다.
1. awsvpc 모드는 서비스 배포할 때 ENI와 프라이빗 IP주소를 각각 할당 한다.
따라서 사용하고 있는 EC2인스턴스 타입의 Max ENI개수와, IP주소 개수를 확인 해야 하며, ECS를 구성한 네트워크에 여유 IP가 남아 있는지 확인해야 한다. Rolling 배포 할 때 Max치를 계산 하지 않고 배포 하면 진행이 안될 수 있다. 배포하는 과정에서 ENI 최대 개수를 넘어 서는 경우 배포 옵션의 "maximumPercent", "minimumHealthyPercent" 옵션을 수정 해서 배포 할 필요가 있다.
2. awsvpc 모드는 bridge 모드와 다르게 호스트와 서비스간 dynamic 포트 매핑을 지원 하지 않는다.
그래서 서비스 생성할 때 컨테이너 port 번호와 호스트의 port를 동일 하게 맞춰 주어야 배포가 된다.
다른 서비스와 포트 충돌은 걱정 할 필요가 없다. 추가된 ENI와 IP로 서비스가 기동되어 IP가 다르므로 포트 충돌 위험이 없다.
3. awsvpc 모드로 배포되는 서비스와 연결 할 Target Group은 인스턴스 타입이 아닌 IP타입으로 생성 되어야 된다.
task definition에 network mode를 awsvpc 모드로 설정하고 instance 타입으로 생성된 tg를 연결하면 정상 통신이 되지 않는다.
4. fargate로 배포한다면 Security Group과 Subnet 지정도 정의 해 주어야 한다.