Amazon ECS Linux コンテナインスタンスのネットワークインターフェイスを増やす - Amazon Elastic Container Service

Amazon ECS Linux コンテナインスタンスのネットワークインターフェイスを増やす

注記

この機能は Fargate では使用できません。

awsvpc ネットワークモードを使用する各 Amazon ECS タスクには、独自の Elastic Network Interface (ENI) が割り当てられ、その ENI はそれをホストするコンテナインスタンスにアタッチされます。Amazon EC2 インスタンスにアタッチできるネットワークインターフェイスの数にはデフォルトの制限があり、プライマリネットワークインターフェイスも 1 つとしてカウントされます。例えば、デフォルトでは c5.large インスタンスには最大 3 つの ENI がアタッチされています。このインスタンスのプライマリネットワークインターフェイスも 1 つとしてカウントされるため、このインスタンスに追加でアタッチできる ENI は 2 つです。awsvpc ネットワークモードを使用する各タスクには ENI が必要なため、通常このインスタンスタイプでは、このようなタスクを 2 つだけ実行できます。

Amazon ECS は、サポートされている Amazon EC2 インスタンスタイプを使用して、ENI 密度が高いコンテナインスタンスの起動をサポートしています。これらのインスタンスタイプを使用し、awsvpcTrunking アカウント設定を有効にすると、新しく起動されたコンテナインスタンスで追加の ENI を利用できます。この設定により、各コンテナインスタンスにより多くのタスクを配置できます。awsvpcTrunking アカウント設定については、「アカウント設定による Amazon ECS 機能へのアクセス」を参照してください。

例えば、awsvpcTrunking を持つ c5.large インスタンスでは、ENI の制限が 12 に引き上げられています。コンテナインスタンスはプライマリネットワークインターフェイスを持ち、Amazon ECS はコンテナインスタンスの「トランク」ネットワークインターフェイスを作成およびアタッチします。したがって、この設定では、現在の 2 個ではなく 10 個のタスクをコンテナインスタンスで起動できます。

トランクネットワークインターフェイスは Amazon ECS によって完全に管理され、コンテナインスタンスを削除またはクラスターから登録解除するときに削除されます。詳細については、「Amazon EC2 インスタンス上のタスクのタスクネットワーキング」を参照してください。

考慮事項

ENI トランキング機能を使用する場合は、以下の点を考慮してください。

  • ENI の制限引き上げに対応しているのは、Amazon ECS に最適化された AMI の Linux バリアント、バージョン 1.28.1 以降のコンテナエージェントを備えたその他の Amazon Linux バリアント、バージョン 1.28.1-2 以降の ecs-init パッケージのみです。Amazon ECS に最適化された AMI の最新の Linux バリアントを使用する場合、これらの要件が満たされます。現時点では、Windows コンテナはサポートされていません。

  • awsvpcTrunking を有効にした後に起動した新しい Amazon EC2 インスタンスのみに、引き上げられた ENI 制限とトランクネットワークインターフェイスが適用されます。以前に起動されたインスタンスは、実行されたアクションに関係なく、これらの機能を受け取りません。

  • Amazon EC2 インスタンスでは、リソースベースの IPv4 DNS リクエストがオフになっている必要があります。このオプションを無効にする場合は、Amazon EC2 コンソールを使用した新しいインスタンスの作成時に [Enable resource-based IPV4 (A record) DNS requests] (リソースベースの IPV4 (A レコード) DNS リクエストを有効化) オプションを選択していないことを確認してください。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 インスタンスはサポートされません。これらを使用すると、クラスターへの登録に失敗します。

  • Amazon ECS タスクは、awsvpc ネットワークモードと EC2 起動タイプを使用する必要があります。Fargate 起動タイプを使用するタスクは、起動数に関係なく、常に専用の ENI が割り当てられるため、この機能は必要ありません。

  • Amazon ECS タスクは、コンテナインスタンスと同じ Amazon VPC で起動する必要があります。タスクが同じ VPC 内にない場合は属性エラーが発生し、タスクを開始することができません。

  • 新しいコンテナインスタンスを起動するときに、インスタンスは REGISTERING 状態に移行し、トランク Elastic Network Interface がインスタンスに対してプロビジョニングされます。登録に失敗した場合、インスタンスは REGISTRATION_FAILED 状態に移行します。失敗した登録のトラブルシューティングを行うには、コンテナインスタンスを記述して、失敗の原因を説明する statusReason フィールドを表示するようにします。その後、コンテナインスタンスは手動で登録解除または終了できます。コンテナインスタンスが正常に登録解除または終了すると、Amazon ECS はトランク ENI を削除します。

    注記

    Amazon ECS は、REGISTRATION_FAILED 状態に移行するインスタンスを監視できるコンテナインスタンスの状態変更イベントを発行します。詳細については、「Amazon ECS コンテナインスタンス状態変更イベント」を参照してください。

  • コンテナインスタンスが削除されると、インスタンスは DEREGISTERING 状態に移行し、トランク Elastic Network Interface が解放されます。次に、インスタンスは INACTIVE 状態に移行します。

  • ENI 制限が引き上げられたパブリックサブネットのコンテナインスタンスが停止した後再起動されると、インスタンスはパブリック IP アドレスを失い、コンテナエージェントは接続を失います。

  • awsvpcTrunking を有効にすると、コンテナインスタンスは VPC のデフォルトセキュリティグループを使用する追加の ENI が割り当てられ、Amazon ECS によって管理されます。

前提条件

ENI 制限が引き上げられたコンテナインスタンスを起動する前に、次の前提条件を満たす必要があります。

  • Amazon ECS のサービスにリンクされたロールを作成する必要があります。Amazon ECS のサービスにリンクされたロールは、Amazon ECS に、お客様に代わって他のAWSサービスを呼び出すアクセス権限を付与します。このロールは、クラスターを作成する際、または AWS Management Console でサービスを作成または更新すると、自動的に作成されます。詳細については、「Amazon ECS のサービスリンクロールの使用」を参照してください。サービスにリンクされたロールは、次の AWS CLI コマンドを使用して作成することもできます。

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • お客様のアカウントまたはコンテナインスタンスの IAM ロールは、awsvpcTrunking アカウント設定に有効化する必要があります。2 つのコンテナインスタンスロール (ecsInstanceRole) を作成することをお勧めします。そして、1 つのロールの awsvpcTrunking アカウント設定を有効にして、そのロールを ENI トランキングを必要とするタスクに使用することができます。コンテナインスタンスロールについては、「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。

前提条件が満たされると、サポートされているいずれかの Amazon EC2 インスタンスタイプを使用して新しいコンテナインスタンスを起動でき、インスタンスの ENI 制限が引き上げられています。サポートされているインスタンスタイプについては、Amazon ECS コンテナネットワークインターフェイスの増加でサポートされるインスタンスを参照してください。コンテナインスタンスで、バージョン 1.28.1 以降のコンテナエージェントと、バージョン 1.28.1-2 以降の ecs-init パッケージが必要です。Amazon ECS に最適化された AMI の最新の Linux バリアントを使用する場合、これらの要件が満たされます。詳細については、「Amazon ECS Linux コンテナインスタンスの起動」を参照してください。

重要

Amazon EC2 インスタンスでは、リソースベースの IPv4 DNS リクエストがオフになっている必要があります。このオプションを無効にする場合は、Amazon EC2 コンソールを使用した新しいインスタンスの作成時に [Enable resource-based IPV4 (A record) DNS requests] (リソースベースの IPV4 (A レコード) DNS リクエストを有効化) オプションを選択していないことを確認してください。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