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 를 참고해 주세요.
  • 컨테이너 인스턴스가 종료되면 트렁크 탄력적 네트워크 인터페이스가 프로비저닝 해제되는 동안 인스턴스는 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 를 참고해 주세요.

전제 조건 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

더 알아보기 (Learn more)