column
コラム
サービスに複数のターゲットグループを登録する際の制約
ターゲットグループの追加が劇的に簡単になるため、私としては待望のアップデートでした。
しかし、ターゲットグループが複数登録されているサービスにはデプロイ方法に制約があります。
- サービス定義での複数のターゲットグループの指定は、次の条件でのみサポートされます。
- サービスでは、Application Load Balancer またはNetwork Load Balancer を使用する必要があります。
- サービスでローリング更新 (ECS) のデプロイコントローラータイプを使用する必要があります。
サービスとDeployment Groupの対応関係の整理
これは、Deployment Groupとサービスが1対1で対応しているためです。
![](https://cloud.bigtreetc.com/rpawp/wp-content/uploads/2022/04/BlueGreenDeploy_s-300x213.png)
![](https://cloud.bigtreetc.com/rpawp/wp-content/uploads/2022/04/Rolling-Update_s-300x239.png)
デプロイ方法の3つの選択肢
![](https://cloud.bigtreetc.com/rpawp/wp-content/uploads/2022/04/multi_service_s-300x262.png)
![](https://cloud.bigtreetc.com/rpawp/wp-content/uploads/2022/04/Lambda_Event_s-1-300x192.png)
実装
Deployment Groupの設定では、片方のALBを設定します。
その他のCodePipeline, CodeDeploy, CodeBuildについての設定は記載を省略します。
環境変数は以下の通り設定しました。
import boto3 import json import os import socket def lambda_handler(event, context): client = boto3.client('elbv2') INTERNET_TG_ARN = os.environ['INTERNET_TG_ARN'] INTERNAL_TG_ARN = os.environ['INTERNAL_TG_ARN'] new_ips = client.describe_target_health(TargetGroupArn=INTERNAL_TG_ARN)['TargetHealthDescriptions'] old_ips = client.describe_target_health(TargetGroupArn=INTERNET_TG_ARN)['TargetHealthDescriptions'] print(new_ips) print(old_ips) new_targets = list(map(lambda x: {'Id': x['Target']['Id'], 'Port': 80}, new_ips)) client.register_targets( TargetGroupArn=INTERNET_TG_ARN, Targets=new_targets ) old_targets = list(map(lambda x:{'Id': x['Target']['Id'], 'Port': 80}, old_ips)) client.deregister_targets( TargetGroupArn=INTERNET_TG_ARN, Targets=old_targets) return { 'statusCode': 200, 'body': json.dumps('Target Updated') }
やや無理やりではありますが、1つのALBへのBlue/Greenデプロイが完了した際にLambdaでもう一つのALBにもデプロイすることで、2つのALBへの疑似Blue/Greenデプロイを実現できました。
-
PICK UP
ピックアップ
-
ピックアップコンテンツがありません
-
RANKING
人気の記事
-
-
1
【SSM】SSM Inventory vol.1 …
【SSM】SSM Inventory vol.1 マルチアカウント構成でのSSM…
2022/10/31
-
2
望雲彼方に ~クラウド移行その2(インフラエンジニ…
望雲彼方に ~クラウド移行その2(インフラエンジニア編)~
2020/06/12
-
3
ECSを理解する(第1回)
ECSを理解する(第1回)
2020/06/26
-
4
[ECS/Fargate/IaC] EventBr…
[ECS/Fargate/IaC] EventBridgeからECSコンテナに引…
2022/03/28
-
5
新入社員に払い出すIAMユーザーの権限を考えてみる
新入社員に払い出すIAMユーザーの権限を考えてみる
2023/03/21
-
-
ARCHIVE
アーカイブ
-
- July 2024 (1)
- January 2024 (1)
- December 2023 (2)
- June 2023 (2)
- May 2023 (1)
- April 2023 (1)
- March 2023 (2)
- February 2023 (2)
- January 2023 (1)
- December 2022 (2)
- October 2022 (2)
- September 2022 (2)