🐻
ブルー/グリーンデプロイでALBRequestCountPerTargetをターゲット値にしたスケーリングをする【くま】
ブルー/グリーンデプロイタイプでは、ターゲット追跡スケーリングポリシーの ALBRequestCountPerTarget メトリクスはサポートされません。
引用: ターゲットメトリクスを使用して Amazon ECS サービスをスケールする - Amazon Elastic Container Service
残念ながらサポートされていなかったので、
カスタムメトリクスを作成して、ブルー/グリーンデプロイでもALBRequestCountPerTargetに応じたスケーリングをしました。
ブルー/グリーンデプロイでのALBRequestCountPerTarget
- ブルー/グリーンデプロイでは、ALBに2つのターゲットグループを登録し、トラフィックの送信先を切り替えることで新しいバージョンをリリースします

- ALBRequestCountPerTargetは、ターゲット単位のリクエスト数を表すメトリクスであり、利用時には 対象のターゲットグループを明示的に指定する必要がある。
ALBRequestCountPerTarget メトリクスを使用するには、ResourceLabel パラメータを指定して、メトリクスに関連付けられているロードバランサーターゲットグループを識別する必要があります。
Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシー - Amazon EC2 Auto Scaling - ブルー/グリーンデプロイの場合に、ターゲットグループの切り替えの際に、メトリクスの参照先も切り替える必要がある。が、自動で切り替えてはくれない、、。
カスタムメトリクスでの対応
- 2つのターゲットグループそれぞれのALBRequestCountPerTargetを足した値をカスタムメトリクスとして作成。その値を参照し、オートスケーリングする用設定。
aws cliでの設定
configForRequestCountTargetTracking=$(cat << EOS
{
"TargetValue": 500,
"CustomizedMetricSpecification": {
"Metrics": [
# 以下2つの合計
{
"Id": "expr1m1",
"Expression": "m0 + m1",
"Label": "request-count-per-target-sum",
"ReturnData": true
},
# 1つ目のターゲットグループのRequestCountPerTarget
{
"Id": "m0",
"MetricStat": {
"Metric": {
"Namespace": "AWS/ApplicationELB",
"MetricName": "RequestCountPerTarget",
"Dimensions": [
{
"Name": "TargetGroup",
"Value": "${TARGET_GROUP_ARN_NAME_1}"
}
]
},
"Stat": "Sum"
},
"ReturnData": false
},
# 2つ目のターゲットグループのRequestCountPerTarget
{
"Id": "m1",
"MetricStat": {
"Metric": {
"Namespace": "AWS/ApplicationELB",
"MetricName": "RequestCountPerTarget",
"Dimensions": [
{
"Name": "TargetGroup",
"Value": "${TARGET_GROUP_ARN_NAME_2}"
}
]
},
"Stat": "Sum"
},
"ReturnData": false
}
]
},
"ScaleInCooldown": ${REQUEST_SCALE_IN_COOLDOWN},
"ScaleOutCooldown": ${REQUEST_SCALE_OUT_COOLDOWN}
}
EOS
)
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--resource-id service/${ECS_CLUSTER_NAME}/${ECS_SERVICE_NAME} \
--scalable-dimension ecs:service:DesiredCount \
--policy-type TargetTrackingScaling \
--policy-name "target-tracking-request" \
--region "${AWS_REGION}" \
--target-tracking-scaling-policy-configuration "${configForRequestCountTargetTracking}"
まとめ
- カスタムメトリクスは便利。すごい。
Discussion