Amazon ECS サービスで複数のロードバランサーを関連付ける

ECSにて実際にコンテナが動作するのはECSタスクという単位ですが、長期的にタスクを運用する場合にはECSサービスを利用することが推奨されています。
サービスでは必要とするタスク数を指定することで常に指定した数にタスクの実行数を保つことができる為保守面でかなり便利です。
そして、オプションとしてロードバランサーを設定することもできサービス管理下で動作しているタスクにトラフィックを分散させることが可能です。

現在マネジメントコンソールからでは、1つのターゲットグループしか指定することができませんがCLIやCloudFormation(以下Cfn)を使用すれば1つのサービスに対して複数(最大5つまでできるようです)のターゲットグループを指定することが可能です。

複数のターゲットグループを関連付けることで何が嬉しいかというと、ドキュメントに記載の例の通りで

  • 外部トラフィックと内部トラフィックで経路は分けたいが1つのコンテナで処理したい
  • 同じコンテナで複数ポートで異なるアプリケーションを提供している

などのケースで1つのサービスだけで実現できることです。

参考サイトではCFnを使って設定しているので今回はCLIを用いて設定します。

サービスを作成する際にload-balancersを複数指定するだけです。

aws ecs create-service \
--cluster {cluster_name} \
--service-name {service_name} \
--task-definition {task_defintion_arn} \
--load-balancers '[{"targetGroupArn": "TARGET1_ARN", "containerName": "CONTAINER1", "containerPort": 80}, {"targetGroupArn": "TARGET2_ARN", "containerName": "CONTAINER2", "containerPort": 8080}]' \
--network-configuration '{"awsvpcConfiguration": {"subnets": ["SUBNET1_ID", "SUBNET2_ID", "SUBNET3_ID"], "securityGroups": ["SECURITY_GROUP1_ID"]}}' \
--desired-count {task_count} \
--launch-type FARGATE \
--platform-version LATEST \
--enable-execute-command \
--scheduling-strategy REPLICA