Amazon ECS Linux 컨테이너 인스턴스 네트워크 인터페이스 늘리기
Amazon ECS Linux 컨테이너 인스턴스 네트워크 인터페이스 늘리기
참고 이 기능은 Fargate에서는 사용할 수 없어요.
awsvpc 네트워크 모드를 사용하는 각 태스크는 이를 호스팅하는 컨테이너 인스턴스에 연결되는 자체 탄력적 네트워크 인터페이스(ENI)를 받아요.
출처: 문서
본문
Amazon EC2 인스턴스에 연결할 수 있는 네트워크 인터페이스 수에는 기본 제한이 있으며, 기본 네트워크 인터페이스가 하나로 계산돼요. 예를 들어 기본적으로 c5.large 인스턴스에는 최대 3개의 ENI가 연결될 수 있어요. 인스턴스의 기본 네트워크 인터페이스가 하나로 계산되므로 인스턴스에 추가로 2개의 ENI를 연결할 수 있어요. awsvpc 네트워크 모드를 사용하는 각 태스크는 ENI를 요구하므로 이 인스턴스 유형에서는 일반적으로 그러한 태스크를 2개만 실행할 수 있어요.
Amazon ECS는 지원되는 Amazon EC2 인스턴스 유형을 사용해 ENI 밀도를 높인 컨테이너 인스턴스 시작을 지원해요. 이러한 인스턴스 유형을 사용하고 awsvpcTrunking 계정 설정을 켜면 새로 시작된 컨테이너 인스턴스에서 추가 ENI를 사용할 수 있어요. 이 구성은 각 컨테이너 인스턴스에 더 많은 태스크를 배치할 수 있게 해 줘요. 콘솔을 사용해 이 기능을 켜려면 Modifying Amazon ECS account settings 를 참고해 주세요. AWS CLI를 사용해 이 기능을 켜려면 Managing Amazon ECS account settings using the AWS CLI 를 참고해 주세요.
예를 들어 awsvpcTrunking 이 있는 c5.large 인스턴스는 ENI 제한이 12로 증가해요. 컨테이너 인스턴스에는 기본 네트워크 인터페이스가 있으며 Amazon ECS는 "트렁크(trunk)" 네트워크 인터페이스를 만들어 컨테이너 인스턴스에 연결해요. 따라서 이 구성으로 컨테이너 인스턴스에서 기존 2개 대신 10개의 태스크를 시작할 수 있어요.
트렁크 네트워크 인터페이스는 Amazon ECS가 완전히 관리하며 컨테이너 인스턴스를 클러스터에서 종료하거나 등록 해제할 때 삭제돼요. 자세한 내용은 Amazon ECS task networking options for EC2 를 참고해 주세요.
고려 사항 ENI 트렁킹 기능을 사용할 때 다음을 고려해 주세요.
- Amazon ECS-optimized AMI의 Linux 변형 또는 컨테이너 에이전트 버전 1.28.1 이상과
ecs-init패키지 버전 1.28.1-2 이상이 있는 다른 Amazon Linux 변형만 증가된 ENI 제한을 지원해요. Amazon ECS-optimized AMI의 최신 Linux 변형을 사용하면 이러한 요구 사항이 충족돼요. 현재 Windows 컨테이너는 지원되지 않아요. awsvpcTrunking를 활성화한 후 시작된 새 Amazon EC2 인스턴스만 증가된 ENI 제한과 트렁크 네트워크 인터페이스를 받아요. 이전에 시작된 인스턴스는 어떤 조치를 취해도 이러한 기능을 받지 못해요.- Amazon EC2 인스턴스는 리소스 기반 IPv4 DNS 요청이 꺼져 있어야 해요. 이 옵션을 비활성화하려면 Amazon EC2 콘솔에서 새 인스턴스를 만들 때 Enable resource-based IPV4 (A record) DNS requests 옵션을 선택 해제해 주세요. AWS CLI를 사용해 이 옵션을 비활성화하려면 다음 명령을 사용해 주세요.
aws ec2 modify-private-dns-name-options --instance-id i-xxxxxxx --no-enable-resource-name-dns-a-record --no-dry-run - 공유 서브넷의 Amazon EC2 인스턴스는 지원되지 않아요. 사용하면 클러스터에 등록하는 데 실패해요.
- 태스크는
awsvpc네트워크 모드와 EC2를 사용해야 해요. Fargate를 사용하는 태스크는 몇 개를 시작하든 항상 전용 ENI를 받으므로 이 기능이 필요하지 않아요. - 태스크는 컨테이너 인스턴스와 동일한 Amazon VPC에서 시작되어야 해요. 태스크가 동일한 VPC 내에 있지 않으면 속성 오류로 시작에 실패해요.
- 새 컨테이너 인스턴스를 시작할 때 인스턴스에 트렁크 탄력적 네트워크 인터페이스가 프로비저닝되는 동안 인스턴스는
REGISTERING상태로 전환돼요. 등록이 실패하면 인스턴스는REGISTRATION_FAILED상태로 전환돼요. 실패한 등록은 컨테이너 인스턴스를 설명해 실패 이유를 설명하는statusReason필드를 확인해 문제를 해결할 수 있어요. 그런 다음 컨테이너 인스턴스를 수동으로 등록 해제하거나 종료할 수 있어요. 컨테이너 인스턴스가 성공적으로 등록 해제되거나 종료되면 Amazon ECS가 트렁크 ENI를 삭제해요.- 참고: Amazon ECS는
REGISTRATION_FAILED상태로 전환되는 인스턴스를 모니터링할 수 있는 컨테이너 인스턴스 상태 변경 이벤트를 생성해요. 자세한 내용은 Amazon ECS container instance state change events 를 참고해 주세요.
- 참고: Amazon ECS는
- 컨테이너 인스턴스가 종료되면 트렁크 탄력적 네트워크 인터페이스가 프로비저닝 해제되는 동안 인스턴스는
DEREGISTERING상태로 전환돼요. 그런 다음 인스턴스는INACTIVE상태로 전환돼요. - ENI 제한이 증가된 퍼블릭 서브넷의 컨테이너 인스턴스가 중지된 후 다시 시작되면 인스턴스는 퍼블릭 IP 주소를 잃고 컨테이너 에이전트는 연결을 잃어요.
awsvpcTrunking를 활성화하면 컨테이너 인스턴스는 VPC의 기본 보안 그룹을 사용하고 Amazon ECS가 관리하는 추가 ENI를 받아요.- 기본 VPC에는 각 가용 영역에 퍼블릭 서브넷, 인터넷 게이트웨이, DNS 확인을 활성화하는 설정이 함께 제공돼요. 서브넷은 기본 경로 테이블이 인터넷 목적의 서브넷 트래픽을 인터넷 게이트웨이로 보내므로 퍼블릭 서브넷이에요. 목적지
0.0.0.0/0에서 인터넷 게이트웨이로의 경로를 제거하면 기본 서브넷을 프라이빗 서브넷으로 만들 수 있어요. 그러나 이렇게 하면 해당 서브넷에서 실행되는 컨테이너 인스턴스는 인터넷에 액세스할 수 없어요. 서브넷 안팎으로 들어오는 트래픽을 제어하려면 보안 그룹 규칙을 추가하거나 삭제할 수 있어요. 자세한 내용은 Amazon Virtual Private Cloud User Guide 의 Security group rules 를 참고해 주세요.
- 기본 VPC에는 각 가용 영역에 퍼블릭 서브넷, 인터넷 게이트웨이, DNS 확인을 활성화하는 설정이 함께 제공돼요. 서브넷은 기본 경로 테이블이 인터넷 목적의 서브넷 트래픽을 인터넷 게이트웨이로 보내므로 퍼블릭 서브넷이에요. 목적지
전제 조건 ENI 제한이 증가된 컨테이너 인스턴스를 시작하기 전에 다음 전제 조건이 완료되어야 해요.
- Amazon ECS용 서비스 연결 역할(service-linked role)이 생성되어야 해요. Amazon ECS 서비스 연결 역할은 Amazon ECS에 내 대신 다른 AWS 서비스를 호출할 권한을 제공해요. 이 역할은 클러스터를 만들거나 AWS Management Console에서 서비스를 만들거나 업데이트할 때 자동으로 생성돼요. 자세한 내용은 Using service-linked roles for Amazon ECS 를 참고해 주세요. 다음 AWS CLI 명령으로 서비스 연결 역할을 만들 수도 있어요.
aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com - 내 계정 또는 컨테이너 인스턴스 IAM 역할이
awsvpcTrunking계정 설정을 활성화해야 해요. 컨테이너 인스턴스 역할(ecsInstanceRole)을 2개 만들 것을 권장해요. 그런 다음 한 역할에awsvpcTrunking계정 설정을 활성화하고 ENI 트렁킹이 필요한 태스크에 그 역할을 사용할 수 있어요. 컨테이너 인스턴스 역할에 대한 정보는 Amazon ECS container instance IAM role 을 참고해 주세요.
전제 조건이 충족된 후 지원되는 Amazon EC2 인스턴스 유형 중 하나로 새 컨테이너 인스턴스를 시작할 수 있으며, 인스턴스는 증가된 ENI 제한을 갖게 돼요. 지원되는 인스턴스 유형 목록은 Supported instances for increased Amazon ECS container network interfaces 를 참고해 주세요. 컨테이너 인스턴스에는 컨테이너 에이전트 버전 1.28.1 이상과 ecs-init 패키지 버전 1.28.1-2 이상이 있어야 해요. Amazon ECS-optimized AMI의 최신 Linux 변형을 사용하면 이러한 요구 사항이 충족돼요. 자세한 내용은 Launching an Amazon ECS Linux container instance 를 참고해 주세요.
중요 Amazon EC2 인스턴스는 리소스 기반 IPv4 DNS 요청이 꺼져 있어야 해요. 이 옵션을 비활성화하려면 Amazon EC2 콘솔을 사용해 새 인스턴스를 만들 때 Enable resource-based IPV4 (A record) DNS requests 옵션이 선택 해제되어 있는지 확인해 주세요. AWS CLI를 사용해 이 옵션을 비활성화하려면 다음 명령을 사용해 주세요.
aws ec2 modify-private-dns-name-options --instance-id i-xxxxxxx --no-enable-resource-name-dns-a-record --no-dry-run
AWS CLI로 ENI 제한이 증가된 컨테이너 인스턴스 보기
각 컨테이너 인스턴스에는 트렁크 네트워크 인터페이스라고 하는 기본 네트워크 인터페이스가 있어요. 다음 명령을 사용해 트렁크 네트워크 인터페이스가 있음을 나타내는 ecs.awsvpc-trunk-id 속성을 조회해 ENI 제한이 증가된 컨테이너 인스턴스를 나열해 주세요.
list-attributes(AWS CLI)
aws ecs list-attributes \
--target-type container-instance \
--attribute-name ecs.awsvpc-trunk-id \
--cluster cluster_name \
--region us-east-1
Get-ECSAttributeList(AWS Tools for Windows PowerShell)
Get-ECSAttributeList -TargetType container-instance -AttributeName ecs.awsvpc-trunk-id -Region us-east-1