Amazon ECS タスクにネットワークインターフェイスを割り当てる - Amazon Elastic Container Service

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

  • 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 インスタンスのデフォルトでは、アタッチ可能な 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-init1.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-plugins CNI プラグインを実行して 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 で enableDnsHostnamesenableDnsSupport オプションの両方が有効になっている場合、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-plugins CNI プラグインを実行して 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 アドレス属性を変更する) を参照してください。