Amazon ECS サービスに複数のターゲットグループを登録する
サービス定義で複数のターゲットグループを指定すると、Amazon ECS サービスは複数のロードバランサーからのトラフィックを送信し、複数のロードバランサーポートを公開できます。
複数のターゲットグループを指定してサービスを作成するには、Amazon ECS API、SDK、AWS CLI、または AWS CloudFormation テンプレートを使用してサービスを作成する必要があります。サービスの作成後、AWS Management Console に登録されているサービスとターゲットグループを表示できます。既存サービスのロードバランサー設定を変更するには、UpdateService
を使用する必要があります。
次の形式を使用して、複数のターゲットグループをサービス定義で指定できます。サービス定義の完全な構文については、「サービス定義テンプレート」を参照してください。
"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
} ]
考慮事項
サービス定義で複数のターゲットグループを指定する際には、次の点を考慮する必要があります。
-
Application Load Balancer または Network Load Balancer を使用するサービスの場合、6 個以上のターゲットグループはアタッチできません。
-
サービス定義での複数のターゲットグループの指定は、次の条件でのみサポートされます。
-
サービスでは、Application Load Balancer またはNetwork Load Balancer を使用する必要があります。
-
サービスでローリング更新 (
ECS
) のデプロイコントローラータイプを使用する必要があります。
-
-
Fargate と EC2 の両方の起動タイプを使用するタスクを含むサービスでは、複数のターゲットグループの指定がサポートされます。
-
複数のターゲットグループを指定するサービスを作成するときは、Amazon ECS サービスにリンクされたロールを作成する必要があります。ロールは、API リクエストの
role
パラメータを省略するか、AWS CloudFormation のRole
プロパティを省略することによって作成されます。詳細については、「Amazon ECS のサービスリンクロールの使用」を参照してください。
サービス定義の例
次に、サービス定義で複数のターゲットグループを指定するいくつかのユースケースの例を示します。サービス定義の完全な構文については、「サービス定義テンプレート」を参照してください。
内部トラフィックと外部トラフィックに別々のロードバランサーを使用する
次のユースケースでは、サービスは 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 } ]
同じコンテナの複数のポートを公開する
次のユースケースでは、サービスは 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 } ]
複数のコンテナのポートを公開する
次のユースケースでは、サービスは 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 } ]