

# Amazon ECS サービスに複数のターゲットグループを登録する
<a name="register-multiple-targetgroups"></a>

サービス定義で複数のターゲットグループを指定すると、Amazon ECS サービスは複数のロードバランサーからのトラフィックを送信し、複数のロードバランサーポートを公開できます。

複数のターゲットグループを指定してサービスを作成するには、Amazon ECS API、SDK、AWS CLI、または CloudFormation テンプレートを使用してサービスを作成する必要があります。サービスの作成後、AWS マネジメントコンソール に登録されているサービスとターゲットグループを表示できます。既存サービスのロードバランサー設定を変更するには、`[UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html)` を使用する必要があります。

次の形式を使用して、複数のターゲットグループをサービス定義で指定できます。サービス定義の完全な構文については、「[サービス定義テンプレート](sd-template.md)」を参照してください。

```
"loadBalancers":[
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456",
      "containerName":"container_name",
      "containerPort":container_port
   },
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321",
      "containerName":"container_name",
      "containerPort":container_port
   }
]
```

## 考慮事項
<a name="multiple-targetgroups-considerations"></a>

サービス定義で複数のターゲットグループを指定する際には、次の点を考慮する必要があります。
+ Application Load Balancer または Network Load Balancer を使用するサービスの場合、6 個以上のターゲットグループはアタッチできません。
+ サービス定義での複数のターゲットグループの指定は、次の条件でのみサポートされます。
  + サービスでは、Application Load Balancer またはNetwork Load Balancer を使用する必要があります。
  + サービスで (`ECS`) デプロイコントローラタイプを使用する必要があります。これは、Amazon ECS ネイティブ/ブルーグリーンデプロイ、またはローリング更新デプロイのいずれかです。
+ Fargate と EC2 の両方の起動タイプを使用するタスクを含むサービスでは、複数のターゲットグループの指定がサポートされます。
+ 複数のターゲットグループを指定するサービスを作成するときは、Amazon ECS サービスにリンクされたロールを作成する必要があります。ロールは、API リクエストの `role` パラメータを省略するか、CloudFormation の `Role` プロパティを省略することによって作成されます。詳細については、「[Amazon ECS のサービスリンクロールの使用](using-service-linked-roles.md)」を参照してください。

## サービス定義の例
<a name="multiple-targetgroups-examples"></a>

次に、サービス定義で複数のターゲットグループを指定するいくつかのユースケースの例を示します。サービス定義の完全な構文については、「[サービス定義テンプレート](sd-template.md)」を参照してください。

### 内部トラフィックと外部トラフィックに別々のロードバランサーを使用する
<a name="multiple-targetgroups-example1"></a>

次のユースケースでは、サービスは 2 つの別個のロードバランサーを使用します。1 つは内部トラフィック用、もう 1 つはインターネット向けトラフィック用で、同じコンテナとポートに対して使用します。

```
"loadBalancers":[
   //Internal ELB
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456",
      "containerName":"nginx",
      "containerPort":8080
   },
   //Internet-facing ELB
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321",
      "containerName":"nginx",
      "containerPort":8080
   }
]
```

### 同じコンテナの複数のポートを公開する
<a name="multiple-targetgroups-example1"></a>

次のユースケースでは、サービスは 1 つのロードバランサーを使用しますが、同じコンテナから複数のポートを公開します。例えば、Jenkins コンテナは、Jenkins ウェブインターフェイス用にポート 8080 を、API 用にポート 50000 を公開する場合があります。

```
"loadBalancers":[
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456",
      "containerName":"jenkins",
      "containerPort":8080
   },
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321",
      "containerName":"jenkins",
      "containerPort":50000
   }
]
```

### 複数のコンテナのポートを公開する
<a name="multiple-targetgroups-example3"></a>

次のユースケースでは、サービスは 1 つのロードバランサーと 2 つのターゲットグループを使用して、個別のコンテナからポートを公開します。

```
"loadBalancers":[
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456",
      "containerName":"webserver",
      "containerPort":80
   },
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321",
      "containerName":"database",
      "containerPort":3306
   }
]
```