tl;dr;
DocumentにはAWS Management Consoleからできると書いてあるが,どこを探しても導線がないのでaws-cli
を使いましょう(知っている人はこっそりコメントを下さい)
やりたいこと
- 複数のTargetGroupをECSのサービスに登録したい.
- WebConsoleでできれば試してみたい.
- 公式 には2019年7月からサポートと書いてあるため実現できそう.
ユースケース
- 複数のTaskで運用しているサービスのロードバランサを各Taskごとに用意したい.
- 複数のロードバランサを1つのサービスに登録したい.
Web Consoleを眺める
ECSのサービスを作成する画面で,LoadBalanacerの設定画面があります.
ここでALBやNLBを選択すると,どのTargetGroupを選択する項が表れます.
同様の手順でTargetGroupを追加しようとしますができません.
どうやらWebConsoleでは,1つのTargetGroupのみしか設定できないようです.
awsのドキュメントを見てみる
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html には Web Consoleからできそうな感じで書いてありますが,できなさそうです.
このドキュメントを見るとcli
の話が書いてあるので,試してみます.
aws-cli
を用いる方法
先程のドキュメントのページをみるとどうやらこの形式で登録すれば良さそうです
"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
}
]
自分が登録したいtargetGroupArnを調べて以下のようなaws-cli
を用いたコマンドを実行します.細かなパラメータはこちらをみて各人設定してください.
aws ecs create-service \
--cluster my-cluster \
--service-name my-service-name \
--task-definition my-task \
--load-balancers '[{"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 }]' \
--desired-count 1 \
--launch-type EC2
これを実行すると,web consoleではできませんでしたが無事に複数のTargetGroupを登録できました!
まとめ
- web consoleでは未実装だけど実はできることがあったりするので,ドキュメントを読みましょう.
注意
- 既に作成されたECSのサービスにはTargetGroupは設定できません.
- サービスを作るときにしかできない操作です.