メニュー
Amazon Elastic Container Service
開発者ガイド (API Version 2014-11-13)

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

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

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

タスクネットワーキングを使用するには、タスク定義で awsvpc ネットワークモードを指定します。次に、タスクの実行時またはサービスの作成時に、タスクを配置するサブネットを含むネットワーク設定と、関連する Elastic Network Interface にアタッチするセキュリティグループを指定します。タスクは、これらのサブネット内の有効なコンテナインスタンスに配置され、指定されたセキュリティグループは、タスク用にプロビジョニングされる Elastic Network Interface に関連付けられます。

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

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

ECS コンテナインスタンスには、タスクネットワーキングを有効にするために、コンテナエージェントのバージョン 1.15.0 以上が必要です。ただし、最新のコンテナエージェントのバージョンを使用することをお勧めします。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントの更新」を参照してください。Amazon ECS 対応 AMI を使用している場合、インスタンスでは、ecs-init パッケージの 1.15.0-4 バージョン以上が必要です。コンテナインスタンスがバージョン 2017.09.a 以降から起動される場合、コンテナエージェントおよび ecs-init の必要なバージョンが含まれます。詳細については、「Amazon ECS 対応 AMI」を参照してください。

重要

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

タスクネットワーキングを使用するには、タスク定義で awsvpc ネットワークモードを指定する必要があります。詳細については、「ネットワークモード」を参照してください。awsvpc ネットワークモードを指定するタスク定義を使用したタスクの実行時またはサービスの作成時は、配置を検討する PC サブネットと、タスクの Elastic Network Interface にアタッチするセキュリティグループを含むネットワーク設定を指定します。

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

aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

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

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

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

    注記

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

  • 現時点では、Amazon ECS 対応 AMI またはその他の ecs-init パッケージの Amazon Linux バリアントだけがタスクネットワーキングをサポートしています。Amazon ECS コンテナインスタンスには、タスクネットワーキングを有効にするために、コンテナエージェントのバージョン 1.15.0 以上が必要です。最新のコンテナエージェントのバージョンを使用することをお勧めします。

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

  • タスク定義の awsvpcConfiguration セクションでは、指定できるサブネットは 10 まで、セキュリティグループは 5 までの制限があります。

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

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

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

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