タスクネットワーキングと awsvpc ネットワークモード - Amazon Elastic Container Service

タスクネットワーキングと awsvpc ネットワークモード

awsvpc ネットワークモードで利用できるタスクネットワーキング機能により、Amazon EC2 インスタンスと同じネットワーキングプロパティが Amazon ECS タスクに提供されます。awsvpc ネットワークモードを使用すると、コンテナネットワークを簡素化できるだけでなく、コンテナ化されたアプリケーションの相互通信や、コンテナ化されたアプリケーションと VPC 内のその他のサービスとの通信に対する統制力を強化できます。また、awsvpc ネットワークモードによりコンテナのセキュリティも強化されます。これは、セキュリティグループやネットワークモニタリングツールを、タスク内でより詳細なレベルで利用できるようになるためです。各タスクにはそれぞれ独自の Elastic Network Interface (ENI) が提供されるため、VPC フローログなどのその他の Amazon EC2 ネットワーキング機能を活用して、タスクとの間で送受信されるトラフィックを監視できるようになります。さらに、同じタスクに属するコンテナが、localhost インターフェイス経由で通信できるようになります。

タスク 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 のアタッチに関する情報は、Amazon ECS コンソールか、DescribeTasks API オペレーションで確認できます。タスクが停止した場合やサービスがスケールダウンした場合は、ENI がデタッチされて削除されます。

アカウント、IAM ユーザー、またはロールが awsvpcTrunking アカウント設定をオプトインし、ENI 密度が高いコンテナインスタンスを起動した場合、Amazon ECS はコンテナインスタンスの「トランク」ネットワークインターフェイスを作成およびアタッチします。トランクネットワークは Amazon ECS によって完全に管理されます。コンテナインスタンスを Amazon ECS クラスターから削除または登録解除するときに、トランク ENI は削除されます。awsvpcTrunking アカウント設定のオプトインの詳細については、「ENI 制限が引き上げられたコンテナインスタンスの操作」を参してください。

Considerations

awsvpc ネットワークモードを使用する場合の考慮事項がいくつかあります。

Linux オペレーティングシステムを使用するときは、考慮事項を次に示します:

  • 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 バージョン以降も必要です。

  • enableDnsHostnamesenableDnsSupport オプションの両方が 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 インスタンスには最大 3 つの ENI がアタッチされています。このインスタンスのプライマリネットワークインターフェイスも 1 つとしてカウントされるため、このインスタンスに追加でアタッチできる ENI は 2 つです。awsvpc ネットワークモードを使用する各タスクには ENI が必要なため、通常、このインスタンスタイプでは、このようなタスクを 2 つのみ実行できます。各インスタンスタイプのデフォルトの ENI の制限については、Linux Instancesの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 アカウント設定のオプトインの詳細については、「アカウント設定」を参してください。ENI トランキングの詳細については、「Elastic Network Interface のトランキング」を参照してください。

  • Amazon EC2 Linux インスタンスで awsvpc ネットワークモードを使用するタスクをホストする場合、タスク ENI にはパブリック IP アドレスが付与されません。インターネットにアクセスするには、NAT ゲートウェイを使用するよう設定されたプライベートサブネットでタスクを起動する必要があります。詳細については、Amazon VPC ユーザーガイド の「NAT ゲートウェイ」を参照してください。インバウンドのネットワークアクセスは、プライベート IP アドレスを使用した VPC 内か、VPC からロードバランサーを経由させる必要があります。パブリックサブネット内で起動されたタスクは、インターネットにアクセスできません。

  • Amazon ECS は、ユーザーの Amazon EC2 Linux インスタンスにアタッチする ENI だけで構成されます。ユーザーが手動で ENI をインスタンスにアタッチしている場合、Amazon ECS は、使用可能なネットワークアダプタアタッチメントが少なすぎるインスタンスへのタスクの配置を試みます。この場合タスクはタイムアウトし、PROVISIONING から DEPROVISIONING に移行し、その後 STOPPED に移行します。ENI は手動でインスタンスにアタッチしないことをお勧めします。

  • Amazon EC2 インスタンスは、awsvpc ネットワークモードでのタスク配置を検討する ecs.capability.task-eni 機能に登録する必要があります。1.15.0-4ecs-init バージョン以降を実行するインスタンスは、自動的にこの属性に登録されます。

  • Amazon EC2 Linux インスタンスに作成およびアタッチされた ENI は、手動でデタッチしたり、ユーザーのアカウントを使って変更したりすることはできません。これは、実行中のタスクに関連付けられている ENI が誤って削除されないようにするためです。タスクの ENI を解放するには、タスクを停止します。

  • タスクを実行するときや、awsvpcConfiguration ネットワークモードを使用するサービスを作成するときは、awsvpc に指定できるサブネットには 16 個、セキュリティグループには 5 個という制限があります。詳細については、Amazon Elastic Container Service API リファレンス の「AwsVpcConfiguration」を参照してください。

  • awsvpc ネットワークモードを使用してタスクが開始されると、タスク定義内のコンテナが開始される前に、各タスクに Amazon ECS コンテナエージェントによって追加の pause コンテナが作成されます。次に、amazon-ecs-cni-plugins CNI プラグインを実行して pause コンテナのネットワーク名前空間が設定されます。その後、エージェントによってタスク内の残りのコンテナが開始されます。こうすることで pause コンテナのネットワークスタックが共有されます。つまり、タスク内のすべてのコンテナは ENI の IP アドレスによってアドレス可能であり、localhost インターフェイス経由で相互に通信できます。

  • 使用するタスクを持つサービスawsvpcネットワークモードでは、Application Load Balancer と Network Load Balancer のみがサポートされます。Classic Load Balancer はサポートされません。また、このようなサービス用にターゲットグループを作成する場合は、ターゲットタイプとして ip ではなく、instance を選択する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2 Linux インスタンスではなく、ENI に関連付けられているためです。詳細については、「サービスの負荷分散」を参照してください。

  • たとえば、使用する DHCP オプションセットを変更するために VPC が更新され、その変更を VPC を使用しているタスクに反映させる場合は、それらのタスクを停止して新しいタスクを開始する必要があります。

Windows オペレーティングシステムを使用するときは、考慮事項を次に示します:

  • Amazon ECS 最適化 Windows Server 2016 AMI を使用するコンテナインスタンスは、awsvpc ネットワークモードを使用するタスクをホストできません。Amazon ECS 最適化 Windows Server 2016 AMIs および awsvpc ネットワークネットワークモ ードをサポートしていない Windows AMIs を含むクラスターがある場合、awsvpc ネットワークモードを使用するタスクは Windows 2016 Server インスタンスで起動しませんが、awsvpc ネットワークモードをサポートするインスタンスで起動します。 

  • 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 EC2 ユーザーデータを使用して Windows コンテナインスタンスをブートストラップする」を参照してください。

  • enableDnsHostnamesenableDnsSupport オプションの両方が VPC で有効になっている場合、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 がアタッチされています。このインスタンスのプライマリネットワークインターフェイスも 1 つとしてカウントされるため、このインスタンスに追加でアタッチできる ENI は 2 つです。awsvpc ネットワークモードを使用する各タスクには ENI が必要なため、通常、このインスタンスタイプでは、このようなタスクを 2 つのみ実行できます。各インスタンスタイプのデフォルトの ENI の制限については、Amazon EC2 User Guide for Windows Instances の「各インスタンスタイプのネットワークインターフェイスごとの IP アドレス」を参照してください。

  • Amazon EC2 Windows インスタンスで awsvpc ネットワークモードを使用するタスクをホストする場合、タスク ENI にはパブリック IP アドレスが付与されません。インターネットにアクセスするには、NAT ゲートウェイを使用するよう設定されたプライベートサブネットでタスクを起動する必要があります。詳細については、Amazon VPC ユーザーガイド の「NAT ゲートウェイ」を参照してください。インバウンドのネットワークアクセスは、プライベート IP アドレスを使用した VPC 内か、VPC からロードバランサーを経由させる必要があります。パブリックサブネット内で起動されたタスクは、インターネットにアクセスできません。

  • Amazon ECS は、ユーザーの Amazon EC2 Windows インスタンスにアタッチする ENI だけで構成されます。ユーザーが手動で ENI をインスタンスにアタッチしている場合、Amazon ECS は、使用可能なネットワークアダプタアタッチメントが少なすぎるインスタンスへのタスクの配置を試みます。この場合タスクはタイムアウトし、PROVISIONING から DEPROVISIONING に移行し、その後 STOPPED に移行します。ENI は手動でインスタンスにアタッチしないことをお勧めします。

  • Amazon EC2 Windows インスタンスは、awsvpc ネットワークモードでのタスク配置を検討する ecs.capability.task-eni 機能に登録する必要があります。

  • Amazon EC2 Windows インスタンスに作成およびアタッチされた ENI は、手動でデタッチしたり、ユーザーのアカウントを使って変更したりすることはできません。これは、実行中のタスクに関連付けられている ENI が誤って削除されないようにするためです。タスクの ENI を解放するには、タスクを停止します。

  • タスクを実行するときや、awsvpcConfiguration ネットワークモードを使用するサービスを作成するときは、awsvpc に指定できるサブネットには 16 個、セキュリティグループには 5 個という制限があります。詳細については、Amazon Elastic Container Service API リファレンス の「AwsVpcConfiguration」を参照してください。

  • awsvpc ネットワークモードを使用してタスクが開始されると、タスク定義内のコンテナが開始される前に、各タスクに Amazon ECS コンテナエージェントによって追加の pause コンテナが作成されます。次に、amazon-ecs-cni-plugins CNI プラグインを実行して pause コンテナのネットワーク名前空間が設定されます。その後、エージェントによってタスク内の残りのコンテナが開始されます。こうすることで pause コンテナのネットワークスタックが共有されます。つまり、タスク内のすべてのコンテナは ENI の IP アドレスによってアドレス可能であり、localhost インターフェイス経由で相互に通信できます。

  • 使用するタスクを持つサービスawsvpcネットワークモードでは、Application Load Balancer と Network Load Balancer のみがサポートされます。Classic Load Balancer はサポートされません。また、このようなサービス用にターゲットグループを作成する場合は、ターゲットタイプとして ip ではなく、instance を選択する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2 Windows インスタンスではなく、ENI に関連付けられているためです。詳細については、「サービスの負荷分散」を参照してください。

  • たとえば、使用する DHCP オプションセットを変更するために VPC が更新され、その変更を VPC を使用しているタスクに反映させる場合は、それらのタスクを停止して新しいタスクを開始する必要があります。

  • 以下は、awsvpc Windows 設定の ネットワークモードの使用時はサポートされていません。

    • デュアルスタック設定

    • IPv6

    • ENI トランキング

タスクネットワーキングの有効化

タスクで awsvpc ネットワークモードを使用するには、タスク定義で指定する必要があります。詳細については、「ネットワークモード」を参照してください。次に、タスクの実行時またはサービスの作成時に、タスクを配置する 1 つ以上のサブネットを含むネットワーク設定と、関連する ENI にアタッチする 1 つ以上のセキュリティグループを指定します。タスクは、同じアベイラビリティーゾーン内でこれらのサブネットとして Amazon EC2 インスタンスに配置され、指定されたセキュリティグループは、タスク用にプロビジョニングされる ENI に関連付けられます。

デュアルスタックモードでの VPC の使用

デュアルスタックモードで VPC を使用する場合、タスクは IPv4 または IPv6、あるいはその両方を経由して通信できます。IPv4 アドレスと IPv6 アドレスは互いに独立しています。また VPC で IPv4 と IPv6 のルーティングとセキュリティを設定する必要があります。VPC をデュアルスタックモードに設定する方法の詳細については、Amazon VPC ユーザーガイドの「IPv6 への移行」を参照してください。

デュアルスタックモードで VPC を使用する利点の 1 つは、IPv6 アドレスが割り当てられたタスクは、VPC がインターネットゲートウェイまたは出力専用インターネットゲートウェイのいずれかを使用して設定されている限り、インターネットにアクセスできることです。NAT ゲートウェイは必要ありません。詳細については、Amazon VPC ユーザーガイドの「インターネットゲートウェイ」および「Egress-only インターネットゲートウェイ」を参照してください。

次の条件が満たされた場合、Amazon ECS タスクには IPv6 アドレスが割り当てられます。

  • タスクをホストしている Amazon EC2 インスタンスは、バージョン 1.45.0 以降のコンテナエージェントを使用しています。インスタンスが使用しているエージェントのバージョンを確認し、必要に応じて更新する方法については、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。

  • dualStackIPv6 アカウント設定が有効になります。詳細については、「アカウント設定」を参照してください。

  • タスクは awsvpc ネットワークモードを使用しています。

  • VPC とサブネットは IPv6 に設定されており、指定されたサブネットで作成されたネットワークインターフェイスには IPv6 アドレスを割り当てる必要があります。VPC をデュアルスタックモードに設定する方法の詳細については、Amazon VPC ユーザーガイド の「IPv6 への移行」および「サブネットの IPv6 アドレス属性を変更する」を参照してください。