Amazon ECS タスクにネットワークインターフェイスを割り当てる
awsvpc
ネットワークモードで利用できるタスクネットワーキング機能により、Amazon EC2 インスタンスと同じネットワーキングプロパティが Amazon ECS タスクに提供されます。awsvpc
ネットワークモードを使用すると、コンテナネットワークが簡素化されます。また、アプリケーション間およびそのアプリケーションと VPC 内の他のサービスとの相互通信をより強力にコントロールできます。awsvpc
ネットワークモードによりコンテナのセキュリティも強化されます。これは、セキュリティグループやネットワークモニタリングツールを、タスク内でより詳細なレベルで利用できるためです。VPC フローログなどの各種 Amazon EC2 ネットワーキング機能により、タスクが送受信するトラフィックをモニタリングできます。さらに、同じタスクに属するコンテナが、localhost
インターフェイス経由で通信できるようになります。
タスク向け Elastic Network Interface (ENI) は、Amazon ECS のフルマネージド型機能です。Amazon ECS により ENI が作成され、指定されたセキュリティグループが関連付けられているホスト Amazon EC2 インスタンスにアタッチされます。タスクは、Amazon EC2 インスタンスがプライマリネットワークインターフェイスで実行する場合と同じ方法で、ENI を介してネットワークトラフィックを送受信します。各タスクの ENI には、デフォルトでプライベート IPv4 アドレスが割り当てられます。VPC がデュアルスタックモードに対応していて、IPv6 CIDR ブロックを備えたサブネットを使用する場合、タスクの ENI も IPv6 アドレスを受け取ります。各タスクは、ENI を 1 つだけ持つことができます。
これらの ENI は、アカウントの Amazon EC2 コンソールに表示されます。アカウント側では ENI をデタッチしたり変更したりすることはできません。これは、実行中のタスクに関連付けられている ENI が誤って削除されないようにするためです。タスクの ENI のアタッチに関する情報は、Amazon ECS コンソールか、DescribeTasks API オペレーションで確認できます。タスクが停止した場合やサービスがスケールダウンした場合は、ENI がデタッチされて削除されます。
ENI 密度を上げる必要がある場合は、awsvpcTrunking
アカウント設定を使用してください。また Amazon ECS は、コンテナインスタンスのトランクネットワークインターフェイスを作成およびアタッチします。トランクネットワークは Amazon ECS によって完全に管理されます。コンテナインスタンスを Amazon ECS クラスターから削除または登録解除するときに、トランク ENI は削除されます。awsvpcTrunking
アカウント設定の詳細については、「前提条件」を参照してください。
タスク定義の networkMode
パラメータで awsvpc
を指定します。詳細については、「ネットワークモード」を参照してください。
次に、タスクの実行時またはサービスの作成時に、タスクを配置する 1 つ以上のサブネットと、ENI にアタッチする 1 つ以上のセキュリティグループを含む networkConfiguration
パラメータを使用します。詳細については、「ネットワーク構成」を参照してください。タスクは、これらのサブネットとして、同じアベイラビリティーゾーン内の適切な Amazon EC2 インスタンスに配置されます。また、指定されたセキュリティグループが、タスク用にプロビジョニングされた ENI に関連付けられます。
Linux に関する考慮事項
Linux オペレーティングシステムを使用する場合は、以下の点を考慮してください。
-
awsvpc
モードで p5.48xlarge インスタンスを使用する場合、インスタンスで複数のタスクを実行することはできません。 -
awsvpc
ネットワークモード使用するタスクとサービスには、Amazon ECS サービスにリンクされたロールが必要です。このロールにより、ユーザーに代わってその他の AWS サービスを呼び出す許可を、Amazon ECS に付与できるようになります。このロールは、クラスターの作成、またはサービスの作成や更新を AWS Management Console から行う際に、自動的に作成されます。詳細については、「Amazon ECS のサービスリンクロールの使用」を参照してください。サービスにリンクされたロールは、次の AWS CLI コマンドを使用して作成することもできます。aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
-
Amazon EC2 Linux インスタンスでは、
awsvpc
ネットワークモードを使用するタスクを実行するには、コンテナエージェントのバージョン1.15.0
以降が必要です。Amazon ECS 最適化 AMI を使用している場合、インスタンスには、少なくともecs-init
パッケージの1.15.0-4
バージョン以降も必要です。 -
enableDnsHostnames
とenableDnsSupport
オプションの両方が VPC で有効になっている場合、Amazon ECS は Amazon が提供する (内部) DNS ホスト名でタスクのホスト名を設定します。これらのオプションが有効でない場合、タスクの DNS ホスト名にはランダムな名前が付けられます。VPC の DNS 設定の詳細については、「Amazon VPC ユーザーガイド」の「VPC の DNS 属性を変更する」を参照してください。 -
awsvpc
ネットワークモードを使用する Amazon ECS タスクには、それぞれ独自の Elastic Network Interface (ENI) が提供されます。この ENI は、ENI をホストする Amazon EC2 インスタンスにアタッチされています。Amazon EC2 Linux インスタンスにアタッチできるネットワークインターフェイスの数には、デフォルトのクォータが設定されます。そのクォータに対して、プライマリネットワークインターフェイスは 1 個としてカウントされます。例えば、c5.large
インスタンスのデフォルトでは、アタッチ可能な ENI の数は最大 3 個までです。このインスタンスのプライマリネットワークインターフェイスも、1 個としてカウントされます。さらに 2 つの ENI をインスタンスにアタッチできます。awsvpc
ネットワークモードを使用する各タスクには ENI が必要なため、通常このインスタンスタイプでは、このようなタスクを 2 つのみ実行できます。各インスタンスタイプのデフォルトの ENI 制限については、「Amazon EC2 ユーザーガイド」の「インスタンスタイプのネットワークインターフェイスあたりの IP アドレス数」を参照してください。 -
Amazon ECS では、高い ENI 密度がサポートされているインスタンスタイプを使用して、Amazon EC2 Linux インスタンスを起動します。
awsvpcTrunking
アカウント設定にオプトインし、これらのインスタンスタイプを使用して Amazon EC2 Linux インスタンスをクラスターに登録すると、対象のインスタンスで ENI のクオータが引き上げられます。これらの、クォータが引き上げられたインスタンスを使用することで、各 Amazon EC2 Linux インスタンスにさらに多くのタスクを配置できます。高い ENI 密度をトランキング機能で使用するには、Amazon EC2 インスタンスにコンテナエージェントのバージョン1.28.1
以降が必要です。Amazon ECS 最適化 Linux AMI を使用している場合には、インスタンスにecs-init
パッケージの1.28.1-2
バージョン以降も必要です。awsvpcTrunking
アカウント設定のオプトインの詳細については、「アカウント設定による Amazon ECS 機能へのアクセス」を参照してください。ENI トランキングの詳細については、「Amazon ECS Linux コンテナインスタンスのネットワークインターフェイスを増やす」を参照してください。 -
Amazon EC2 Linux インスタンスで
awsvpc
ネットワークモードを使用するタスクをホストする場合、タスク ENI にはパブリック IP アドレスが付与されません。インターネットにアクセスするには、NAT ゲートウェイを使用するよう設定されたプライベートサブネットでタスクを起動する必要があります。詳細については、「Amazon VPC ユーザーガイド」の「NAT ゲートウェイ」を参照してください。インバウンドのネットワークアクセスは、プライベート IP アドレスを使用する VPC 内からのものか、その VPC からロードバランサーを経由させルーティングされたものである必要があります。パブリックサブネット内で起動されたタスクは、インターネットにアクセスできません。 -
Amazon ECS は、ユーザーの Amazon EC2 Linux インスタンスにアタッチする ENI のみを認識します。ENI をインスタンスに手動でアタッチした場合は、十分なネットワークアダプタを持たないインスタンスに対しても、Amazon ECS がタスクの追加を試みる可能性があります。これはタスクでのタイムアウトを引き起こし、ステータスがプロビジョニング解除へ、さらに停止状態へと移行する可能性があります。インスタンスに対する ENI の手動によるアタッチは推奨されません。
-
Amazon EC2 インスタンスは、
awsvpc
ネットワークモードでのタスク配置を検討するecs.capability.task-eni
機能に登録する必要があります。ecs-init
の1.15.0-4
バージョン以降を実行するインスタンスは、自動的にこの属性に登録されます。 -
Amazon EC2 Linux インスタンスに作成およびアタッチされた ENI は、手動でデタッチしたり、ユーザーのアカウントを使って変更したりすることはできません。これは、実行中のタスクに関連付けられている ENI が誤って削除されないようにするためです。タスクの ENI を解放するには、タスクを停止します。
-
タスクを実行するときや、
awsvpc
ネットワークモードを使用するサービスを作成するときは、awsVpcConfiguration
に指定できるサブネットには 16 個、セキュリティグループには 5 個という制限があります。詳細については、Amazon Elastic Container Service API リファレンス の「AwsVpcConfiguration」を参照してください。 -
awsvpc
ネットワークモードを使用してタスクが開始されると、タスク定義内のコンテナが開始される前に、各タスクに Amazon ECS コンテナエージェントによって追加のpause
コンテナが作成されます。次に、amazon-ecs-cni-pluginsCNI プラグインを実行して pause
コンテナのネットワーク名前空間が設定されます。その後、エージェントによってタスク内の残りのコンテナが開始されます。こうすることでpause
コンテナのネットワークスタックが共有されます。つまり、タスク内のすべてのコンテナは ENI の IP アドレスによってアドレス可能であり、localhost
インターフェイス経由で相互に通信できます。 -
サービスに含まれるタスクに、
awsvpc
ネットワークモードを使用するものがある場合は、Application Load Balancer と Network Load Balancer のみがサポートされます。このようなサービス用にターゲットグループを作成する場合は、ターゲットタイプとしてip
を選択する必要があります。instance
を使用しません。これは、awsvpc
ネットワークモードを使用するタスクは、Amazon EC2 Linux インスタンスではなく、ENI に関連付けられているためです。詳細については、「ロードバランサーを使用して Amazon ECS サービストラフィックを分散する」を参照してください。 -
使用中の DHCP オプション設定を変更するように VPC が更新された場合も、既存のタスクにこれらの変更を適用することはできません。これらのネットワーク設定を安全に変更するためには、変更内容を適用して新しいタスクを開始し、それらの動作が正常なことを確認した上で、既存のタスクを停止します。
Windows に関する考慮事項
Windows オペレーティングシステムを使用するときは、考慮事項を次に示します:
-
Amazon ECS 最適化 Windows Server 2016 AMI を使用するコンテナインスタンスは、
awsvpc
ネットワークモードを使用するタスクをホストしません。Amazon ECS 最適化 Windows Server 2016 AMI、およびawsvpc
ネットワークネットワークモ ードをサポートする Windows AMI を含むクラスターを使用する場合、awsvpc
ネットワークモードを使用するタスクは Windows 2016 Server インスタンスでは起動されません。代わりに、awsvpc
ネットワークモードがサポートされるインスタンスで起動されます。 -
Amazon EC2 Windows インスタンスでは、
awsvpc
ネットワークモードを使用する Windows コンテナに CloudWatch メトリクスを使用するには、バージョン1.57.1
以降のコンテナエージェントが必要です。 -
awsvpc
ネットワークモード使用するタスクとサービスには、Amazon ECS サービスにリンクされたロールが必要です。このロールにより、ユーザーに代わってその他の AWS サービスを呼び出す許可を、Amazon ECS に付与できるようになります。このロールは、クラスターを作成する際、または AWS Management Console でサービスを作成または更新すると、自動的に作成されます。詳細については、「Amazon ECS のサービスリンクロールの使用」を参照してください。サービスにリンクされたロールは、次の AWS CLI コマンドを使用して作成することもできます。aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
-
Amazon EC2 Windows インスタンスでは、
awsvpc
ネットワークモードを使用するタスクを実行するには、コンテナエージェントのバージョン1.54.0
以降が必要です。インスタンスをブートストラップするときは、awsvpc
ネットワークモードに必要なオプションを設定する必要があります。詳しくは、「Amazon ECS Windows コンテナインスタンスをブートストラップしてデータを渡す」を参照してください。 -
VPC で
enableDnsHostnames
とenableDnsSupport
オプションの両方が有効になっている場合、Amazon ECS は、Amazon が提供する (内部) DNS ホスト名を使用してタスクのホスト名を設定します。これらのオプションが有効になっていない場合は、タスクの DNS ホスト名はランダムな名前に設定されます。VPC の DNS 設定の詳細については、「Amazon VPC ユーザーガイド」の「VPC の DNS 属性を変更する」を参照してください。 -
awsvpc
モードを使用する Amazon ECS タスクには、それぞれ独自の Elastic Network Interface (ENI) が提供されます。この ENI は、ENI をホストする Amazon EC2 Windows インスタンスにアタッチされています。Amazon EC2 Windows インスタンスへのアタッチが可能な、ネットワークインターフェイスの数には、デフォルトでクォータが設定されます。このクォータに対して、プライマリネットワークインターフェイスは 1 個としてカウントされます。例えば、c5.large
インスタンスのデフォルトでは、最大 3 個までの ENI がアタッチできます。このインスタンスのプライマリネットワークインターフェイスも、それら ENI の内の 1 個としてカウントされます。さらに 2 つの ENI をインスタンスにアタッチできます。awsvpc
ネットワークモードを使用する各タスクには ENI が必要なため、通常、このインスタンスタイプでは、このようなタスクを 2 つのみ実行できます。各インスタンスタイプのデフォルトの ENI 制限については、「Amazon EC2 ユーザーガイド」の「インスタンスタイプのネットワークインターフェイスあたりの IP アドレス数」を参照してください。 -
Amazon EC2 Windows インスタンスで
awsvpc
ネットワークモードを使用するタスクをホストする場合、タスク ENI にはパブリック IP アドレスが付与されません。インターネットにアクセスするには、NAT ゲートウェイを使用するよう設定されたプライベートサブネットで、タスクを起動します。詳細については、「Amazon VPC ユーザーガイド」の「NAT ゲートウェイ」を参照してください。インバウンドのネットワークアクセスは、プライベート IP アドレスを使用する VPC 内からのものか、VPC 内のロードバランサーを経由してルーティングされたものである必要があります。パブリックサブネット内で起動されたタスクは、インターネットにアクセスできません。 -
Amazon ECS は、Amazon EC2 Windows インスタンスにアタッチした ENI だけを認識します。ENI をインスタンスに手動でアタッチした場合は、十分なネットワークアダプタを持たないインスタンスに対しても、Amazon ECS がタスクの追加を試みる可能性があります。これはタスクでのタイムアウトを引き起こし、ステータスがプロビジョニング解除へ、さらに停止状態へと移行する可能性があります。インスタンスに対する ENI の手動によるアタッチは推奨されません。
-
Amazon EC2 Windows インスタンスは、
awsvpc
ネットワークモードでのタスク配置を検討するecs.capability.task-eni
機能に登録する必要があります。 -
Amazon EC2 Windows インスタンスに作成およびアタッチされた ENI は、手動で変更したり、デタッチしたりはできません。これは、実行中のタスクに関連付けられている ENI を、誤って削除してしまわないようにするためです。タスクの ENI を解放するには、タスクを停止します。
-
awsvpc
ネットワークモードを使用するタスクの実行時、もしくはサービスの作成時は、最大 16 個までのサブネットと 5 個までのセキュリティグループをawsVpcConfiguration
内で指定できます。詳細については、Amazon Elastic Container Service API リファレンス の「AwsVpcConfiguration」を参照してください。 -
awsvpc
ネットワークモードを使用してタスクが開始されると、タスク定義内のコンテナが開始される前に、各タスクに Amazon ECS コンテナエージェントによって追加のpause
コンテナが作成されます。次に、amazon-ecs-cni-pluginsCNI プラグインを実行して pause
コンテナのネットワーク名前空間が設定されます。その後、エージェントによってタスク内の残りのコンテナが開始されます。こうすることでpause
コンテナのネットワークスタックが共有されます。つまり、タスク内のすべてのコンテナは ENI の IP アドレスによってアドレス可能であり、localhost
インターフェイス経由で相互に通信できます。 -
サービスに含まれるタスクに、
awsvpc
ネットワークモードを使用するものがある場合は、Application Load Balancer と Network Load Balancer のみがサポートされます。このようなサービス用にターゲットグループを作成する場合は、ターゲットタイプとしてinstance
ではなく、ip
を選択する必要があります。これは、awsvpc
ネットワークモードを使用するタスクは、Amazon EC2 Windows インスタンスではなく、ENI に関連付けられているためです。詳細については、「ロードバランサーを使用して Amazon ECS サービストラフィックを分散する」を参照してください。 -
使用中の DHCP オプション設定を変更するように VPC が更新された場合も、既存のタスクにこれらの変更を適用することはできません。これらのネットワーク設定を安全に変更するためには、変更内容を適用して新しいタスクを開始し、それらの動作が正常なことを確認した上で、既存のタスクを停止します。
-
EC2 Windows 構成で
awsvpc
ネットワークモードを使用する場合、以下はサポートされません。-
デュアルスタック設定
-
IPv6
-
ENI トランキング
-
デュアルスタックモードでの VPC の使用
デュアルスタックモードで VPC を使用する場合、タスクは IPv4 または IPv6、あるいはその両方を経由して通信できます。IPv4 と IPv6 アドレスは、互いに独立しています。そのため、VPC 内で IPv4 と IPv6 のルーティングとセキュリティを別々に設定する必要があります。VPC をデュアルスタックモード用に設定する方法については、「Amazon VPC ユーザーガイド」の「既存の VPC を IPv4 から IPv6 に移行する」を参照してください。
VPC でインターネットゲートウェイまたは送信専用インターネットゲートウェイを設定した場合は、その VPC をデュアルスタックモードで使用できます。この設定により、IPv6 アドレスが割り当てられたタスクは、インターネットゲートウェイまたは送信専用インターネットゲートウェイを介して、インターネットへのアクセスが可能になります。NAT ゲートウェイはオプションです。詳細については、Amazon VPC ユーザーガイドの「インターネットゲートウェイ」および「Egress-only インターネットゲートウェイ」を参照してください。
以下の条件が満たされた場合、Amazon ECS タスクには IPv6 アドレスが割り当てられます。
-
タスクをホストしている Amazon EC2 インスタンスは、バージョン
1.45.0
以降のコンテナエージェントを使用しています。インスタンスが使用しているエージェントのバージョンを確認し、必要に応じて更新する方法については、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。 -
dualStackIPv6
アカウント設定が有効になります。詳細については、「アカウント設定による Amazon ECS 機能へのアクセス」を参照してください。 -
タスクは
awsvpc
ネットワークモードを使用しています。 -
VPC とサブネットは、IPv6 に対して有効になっています。この設定には、指定されたサブネットで作成されたネットワークインターフェイスが含まれます。VPC をデュアルスタックモードに設定する方法の詳細については、「Amazon VPC ユーザーガイド」 の「既存の VPC を IPv4 から IPv6 に移行する」および「Modify the IPv6 addressing attribute for your subnet」(サブネットの IPv6 アドレス属性を変更する) を参照してください。