

# Amazon ECS Linux コンテナインスタンスのネットワークインターフェイスを増やす
<a name="container-instance-eni"></a>

**注記**  
この機能は Fargate では使用できません。

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

Amazon ECS は、サポートされている Amazon EC2 インスタンスタイプを使用して、ENI 密度が高いコンテナインスタンスの起動をサポートしています。これらのインスタンスタイプを使用し、`awsvpcTrunking` アカウント設定を有効にすると、新しく起動されたコンテナインスタンスで追加の ENI を利用できます。この設定により、各コンテナインスタンスにより多くのタスクを配置できます。コンソールを使用して機能を有効にするには、「[Amazon ECS アカウント設定の変更](ecs-modifying-longer-id-settings.md)」を参照してください。AWS CLI を使用して機能を有効にするには、「[AWS CLI を使用した Amazon ECS アカウント設定の管理](account-setting-management-cli.md)」を参照してください。

例えば、`awsvpcTrunking` を持つ `c5.large` インスタンスでは、ENI の制限が 12 に引き上げられています。コンテナインスタンスはプライマリネットワークインターフェイスを持ち、Amazon ECS はコンテナインスタンスの「トランク」ネットワークインターフェイスを作成およびアタッチします。したがって、この設定では、現在の 2 個ではなく 10 個のタスクをコンテナインスタンスで起動できます。

トランクネットワークインターフェイスは Amazon ECS によって完全に管理され、コンテナインスタンスを削除またはクラスターから登録解除するときに削除されます。詳細については、「[EC2 の Amazon ECS タスクネットワークオプション](task-networking.md)」を参照してください。

## 考慮事項
<a name="eni-trunking-considerations"></a>

ENI トランキング機能を使用する場合は、以下の点を考慮してください。
+ ENI の制限引き上げに対応しているのは、Amazon ECS に最適化された AMI の Linux バリアント、バージョン `1.28.1` 以降のコンテナエージェントを備えたその他の Amazon Linux バリアント、バージョン `1.28.1-2` 以降の ecs-init パッケージのみです。Amazon ECS に最適化された AMI の最新の Linux バリアントを使用する場合、これらの要件が満たされます。現時点では、Windows コンテナはサポートされていません。
+ `awsvpcTrunking` を有効にした後に起動した新しい Amazon EC2 インスタンスのみに、引き上げられた ENI 制限とトランクネットワークインターフェイスが適用されます。以前に起動されたインスタンスは、実行されたアクションに関係なく、これらの機能を受け取りません。
+ Amazon EC2 インスタンスでは、リソースベースの IPv4 DNS リクエストがオフになっている必要があります。このオプションを無効にする場合、Amazon EC2 コンソールをで新しいインスタンスを作成する際に、**[Enable resource-based IPV4 (A record) DNS requests](リソースベースの IPV4 (A レコード) DNS リクエストを有効化)** オプションの選択を外します。AWS CLI を使ってこのオプションを無効にするには、次のコマンドを使用します。

  ```
  aws ec2 modify-private-dns-name-options --instance-id {{i-xxxxxxx}} --no-enable-resource-name-dns-a-record --no-dry-run
  ```
+ 共有サブネットの Amazon EC2 インスタンスはサポートされません。これらを使用すると、クラスターへの登録に失敗します。
+ タスクは、`awsvpc` ネットワークモードと EC2 を使用する必要があります。Fargate を使用するタスクは、起動数に関係なく、常に専用の ENI が割り当てられるため、この機能は必要ありません。
+ タスクは、コンテナインスタンスと同じ Amazon VPC で起動する必要があります。タスクが同じ VPC 内にない場合は属性エラーが発生し、タスクを開始することができません。
+ 新しいコンテナインスタンスを起動するときに、インスタンスは `REGISTERING` 状態に移行し、トランク Elastic Network Interface がインスタンスに対してプロビジョニングされます。登録に失敗した場合、インスタンスは `REGISTRATION_FAILED` 状態に移行します。失敗した登録のトラブルシューティングを行うには、コンテナインスタンスを記述して、失敗の原因を説明する `statusReason` フィールドを表示するようにします。その後、コンテナインスタンスは手動で登録解除または終了できます。コンテナインスタンスが正常に登録解除または終了すると、Amazon ECS はトランク ENI を削除します。
**注記**  
Amazon ECS は、`REGISTRATION_FAILED` 状態に移行するインスタンスを監視できるコンテナインスタンスの状態変更イベントを発行します。詳細については、「[Amazon ECS コンテナインスタンス状態変更イベント](ecs_container_instance_events.md)」を参照してください。
+ コンテナインスタンスが削除されると、インスタンスは `DEREGISTERING` 状態に移行し、トランク Elastic Network Interface が解放されます。次に、インスタンスは `INACTIVE` 状態に移行します。
+ ENI 制限が引き上げられたパブリックサブネットのコンテナインスタンスが停止した後再起動されると、インスタンスはパブリック IP アドレスを失い、コンテナエージェントは接続を失います。
+ `awsvpcTrunking` を有効にすると、コンテナインスタンスは VPC のデフォルトセキュリティグループを使用する追加の ENI が割り当てられ、Amazon ECS によって管理されます。

  デフォルト VPC には、各アベイラビリティーゾーンのパブリックサブネット、インターネットゲートウェイ、および DNS 解決を有効にするための設定があります。サブネットはパブリックサブネットです。メインルートテーブルがインターネット用のサブネットのトラフィックをインターネットゲートウェイに送信するためです。デフォルトサブネットをプライベートサブネットにするには、送信元 0.0.0.0/0 からインターネットゲートウェイへのルートを削除します。ただし、この操作を行った場合、そのサブネットで実行されているすべてのコンテナインスタンスがインターネットにアクセスできなくなります。セキュリティグループルールを追加または削除して、サブネットに出入りするトラフィックを制御できます。詳細については、「*Amazon Virtual Private Cloud ユーザーガイド*」の「[セキュリティグループのルール](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)」を参照してください。

## 前提条件
<a name="eni-trunking-launching"></a>

ENI 制限が引き上げられたコンテナインスタンスを起動する前に、次の前提条件を満たす必要があります。
+ Amazon ECS のサービスにリンクされたロールを作成する必要があります。Amazon ECS のサービスにリンクされたロールは、Amazon ECS に、お客様に代わって他のAWSサービスを呼び出すアクセス権限を付与します。このロールは、クラスターを作成する際、または AWS マネジメントコンソール でサービスを作成または更新すると、自動的に作成されます。詳細については、「[Amazon ECS のサービスリンクロールの使用](using-service-linked-roles.md)」を参照してください。サービスにリンクされたロールは、次の AWS CLI コマンドを使用して作成することもできます。

  ```
  aws iam [create-service-linked-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-service-linked-role.html) --aws-service-name ecs.amazonaws.com
  ```
+ お客様のアカウントまたはコンテナインスタンスの IAM ロールは、`awsvpcTrunking` アカウント設定に有効化する必要があります。2 つのコンテナインスタンスロール (`ecsInstanceRole`) を作成することをお勧めします。そして、1 つのロールの `awsvpcTrunking` アカウント設定を有効にして、そのロールを ENI トランキングを必要とするタスクに使用することができます。コンテナインスタンスロールについては、「[Amazon ECS コンテナインスタンスの IAM ロール](instance_IAM_role.md)」を参照してください。

前提条件が満たされると、サポートされているいずれかの Amazon EC2 インスタンスタイプを使用して新しいコンテナインスタンスを起動でき、インスタンスの ENI 制限が引き上げられています。サポートされているインスタンスタイプについては、「[Amazon ECS コンテナネットワークインターフェイスの増加でサポートされるインスタンス](eni-trunking-supported-instance-types.md)」を参照してください。コンテナインスタンスで、バージョン `1.28.1` 以降のコンテナエージェントと、バージョン `1.28.1-2` 以降の ecs-init パッケージが必要です。Amazon ECS に最適化された AMI の最新の Linux バリアントを使用する場合、これらの要件が満たされます。詳細については、「[Amazon ECS Linux コンテナインスタンスの起動](launch_container_instance.md)」を参照してください。

**重要**  
Amazon EC2 インスタンスでは、リソースベースの IPv4 DNS リクエストがオフになっている必要があります。このオプションを無効にする場合は、Amazon EC2 コンソールを使用した新しいインスタンスの作成時に **[Enable resource-based IPV4 (A record) DNS requests]** (リソースベースの IPV4 (A レコード) DNS リクエストを有効化) オプションを選択していないことを確認してください。AWS CLI を使ってこのオプションを無効にするには、次のコマンドを使用します。  

```
aws ec2 modify-private-dns-name-options --instance-id {{i-xxxxxxx}} --no-enable-resource-name-dns-a-record --no-dry-run
```

**AWS CLI を使用して、ENI 制限が引き上げられたコンテナインスタンスを表示するには**

各コンテナインスタンスにはデフォルトのネットワークインターフェイスがあり、これはトランクネットワークインターフェイストランクと呼ばれます。トランクネットワークインターフェイスがあることを示す `ecs.awsvpc-trunk-id` 属性のクエリを実行して、ENI 制限が引き上げられたコンテナインスタンスを一覧表示するには、次のコマンドを使用します。
+ [list-attributes](https://docs.aws.amazon.com/cli/latest/reference/ecs/list-attributes.html) (AWS CLI)

  ```
  aws ecs list-attributes \
        --target-type container-instance \
        --attribute-name ecs.awsvpc-trunk-id \
        --cluster {{cluster_name}} \
        --region {{us-east-1}}
  ```
+ [Get-ECSAttributeList](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ECSAttributeList.html) (AWS Tools for Windows PowerShell)

  ```
  Get-ECSAttributeList -TargetType container-instance -AttributeName ecs.awsvpc-trunk-id -Region {{us-east-1}}
  ```