Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

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

awsvpc ネットワークモードで利用できるタスクネットワーキング機能により、Amazon EC2 インスタンスと同じネットワーキングプロパティが Amazon ECS タスクに提供されます。タスク定義で awsvpc ネットワークモードを使用すると、このタスク定義から起動されるすべてのタスクが、独自の Elastic Network Interface (ENI)、プライマリプライベート IP アドレス、および内部 DNS ホスト名を取得します。タスクネットワーキング機能により、コンテナネットワークを簡素化できるだけでなく、コンテナ化されたアプリケーションの相互通信や、コンテナ化されたアプリケーションと VPC 内のその他のサービスとの通信に対する統制力を強化できます。

注記

タスクで使用可能な他のネットワークモードの詳細については、「ネットワークモード」を参照してください。

また、タスクネットワーキングによりコンテナのセキュリティも強化されます。これは、セキュリティグループやネットワークモニタリングツールを、タスク内でより詳細なレベルで利用できるようになるためです。各タスクにはそれぞれ独自の ENI が提供されるため、VPC フローログなど Amazon EC2 のその他のネットワーキング機能を活用して、タスクとの間で送受信されるトラフィックをモニタリングできるようになります。さらに、同じタスクに属するコンテナが、localhost インターフェイス経由で通信できるようになります。ある時点でタスクに関連付けられている ENI は 1 つだけです。

作成されるタスク ENI は、Amazon ECS によって完全に管理されます。Amazon ECS は ENI を作成し、指定されたセキュリティグループが関連付けられているコンテナインスタンスにアタッチします。タスクは、Amazon EC2 インスタンスがプライマリネットワークインターフェイスで実行する場合と同じ方法で、ENI でネットワークトラフィックを送受信します。これらの ENI はアカウントの Amazon EC2 コンソールに表示されますが、手動でデタッチしたり、ユーザーのアカウントを使って変更したりすることはできません。これは、実行中のタスクに関連付けられている ENI が誤って削除されないようにするためです。タスクの ENI のアタッチに関する情報は、Amazon ECS コンソールか、DescribeTasks API オペレーションで確認できます。タスクが停止した場合やサービスがスケールダウンした場合は、ENI がデタッチされて削除されます。

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

タスクネットワーキングに関する考慮事項

タスクネットワーキングを使用する場合の考慮事項を紹介します。

  • awsvpc ネットワークモード使用するタスクとサービスには、Amazon ECS サービスにリンクされたロールが必要です。このロールにより、ユーザーに代わってその他の AWS サービスを呼び出す権限を、Amazon ECS に付与できるようになります。このロールは、クラスターを作成する際、または AWS マネジメントコンソール でサービスを作成または更新すると、自動的に作成されます。詳細については、「Amazon ECS のサービスにリンクされたロールの使用」を参照してください。サービスにリンクされたロールは、次の AWS CLI コマンドを使用して作成することもできます。

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • Amazon ECS では、ENI 密度が高い、サポートされている Amazon EC2 インスタンスタイプを使用してコンテナインスタンスを起動することができます。これらのインスタンスタイプを使用し、awsvpcTrunking アカウント設定にオプトインすると、新しく起動されたコンテナインスタンスでは ENI の制限が引き上げられています。この設定により、各コンテナインスタンスにより多くのタスクを配置できます。awsvpcTrunking アカウント設定のオプトインの詳細については、「アカウント設定」を参してください。ENI トランキングの詳細については、「Elastic Network Interface のトランキング」を参照してください。

  • Amazon ECS コンテナインスタンスには、タスクネットワーキングを有効にするために、コンテナエージェントのバージョン 1.15.0 以上が必要です。高い ENI 密度をトランキング機能で活用するには、コンテナインスタンスで、コンテナエージェントのバージョン 1.28.1 以降が必要です。ただし、最新のコンテナエージェントのバージョンを使用することをお勧めします。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントの更新」を参照してください。Amazon ECS-optimized AMI を使用している場合、インスタンスにはバージョン 1.15.0-4 以降 (ENI トランキング機能の場合は 1.28.1-2 以降) の ecs-init パッケージが必要です。詳細については、「Amazon ECS-optimized AMI」を参照してください。

  • 現時点では、Amazon ECS-optimized AMI の Linux バリアントまたはその他の ecs-init パッケージの Amazon Linux バリアントだけがタスクネットワーキングをサポートしています。

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

    注記

    上記の制限は Fargate 起動タイプを使用するタスクには適用されません。これらのタスクでパブリック IP アドレスを受け取るように設定できます。

  • awsvpc ネットワークモードを使用する Amazon ECS タスクには、それぞれ独自の ENI が提供されます。この ENI は、ENI をホストするコンテナインスタンスにアタッチされています。Amazon EC2 インスタンスにアタッチできるネットワークインターフェイスの数にはデフォルトの制限があり、プライマリネットワークインターフェイスも 1 つとしてカウントされます。たとえば、デフォルトでは c5.large インスタンスには最大 3 つの ENI がアタッチされています。このインスタンスのプライマリネットワークインターフェイスも 1 つとしてカウントされるため、このインスタンスに追加でアタッチできる ENI は 2 つです。awsvpc ネットワークモードを使用する各タスクには ENI が必要なため、通常、このインスタンスタイプでは、このようなタスクを 2 つのみ実行できます。各インスタンスタイプのデフォルトの ENI の制限については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「各インスタンスタイプのネットワークインターフェイスごとの IP アドレス」を参照してください。

  • Amazon ECS は、サポートされている Amazon EC2 インスタンスタイプを使用して、ENI 密度が高いコンテナインスタンスの起動をサポートします。これらのインスタンスタイプを使用し、awsvpcTrunking アカウント設定にオプトインすると、新しく起動されたコンテナインスタンスで追加の EMI を利用できます。この設定により、各コンテナインスタンスの awsvpc ネットワークモードを使用して、より多くのタスクを配置できます。この機能を使用すると、awsvpcTrunking が有効になっている c5.large インスタンスでは、ENI 制限が 12 に引き上げられます。コンテナインスタンスはプライマリネットワークインターフェイスを持ち、Amazon ECS はコンテナインスタンスの「トランク」ネットワークインターフェイスを作成およびアタッチします。したがって、この設定では、現在の 2 個ではなく 10 個のタスクをコンテナインスタンスで起動できます。詳細については、「Elastic Network Interface のトランキング」を参照してください。

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

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

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

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

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

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

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

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

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