AWS SQS をキューサービスとして利用し、ワーカー処理は AWS ECS のコンテナで実行する際に、SQS のキューの数に応じてオートスケーリングさせたい場合の設定方法メモです。つまり、キューがいっぱい積まれたら ECS のタスクを増やすし、減って来たらタスクを終了させるということです。とても簡単に設定できます。
今回の設定方法は AWS サポートの方に親切にアドバイスいただきました。とても分かりやすいサポートで感謝しております。
ターゲット追跡スケーリングポリシーの設定
ECS のサービスではオートスケーリングの設定が可能ですが、今回利用するターゲット追跡スケーリングポリシーはコンソール画面からは設定ができません。aws CLI コマンドを利用します。
aws application-autoscaling put-scaling-policy \
--policy-name <ポリシー名> \
--service-namespace ecs \
--resource-id service/<クラスタ名>/<サービス名> \
--scalable-dimension ecs:service:DesiredCount \
--policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration file://target-tracking.json
target-tracking.json
の例です。今回は適当に TargetValue
に 5 を指定しています。これは SQS のキュー数( ApproximateNumberOfMessagesVisible
)が平均で 5 になるように調整してくれるという意味です。ここは状況や要件に応じて色々と調整する必要があります。
{
"TargetValue": 5,
"CustomizedMetricSpecification": {
"MetricName": "ApproximateNumberOfMessagesVisible",
"Namespace": "AWS/SQS",
"Dimensions": [
{
"Name": "QueueName",
"Value": "<SQS キュー名>"
}
],
"Statistic": "Average",
"Unit": "Count"
},
"ScaleOutCooldown": 300,
"ScaleInCooldown": 300,
"DisableScaleIn": false
}
上記設定で実行をすると ECS のコンソール画面にも設定値が表示されます。
そして CloudWatch Alarm もスケールイン・スケールアウト両方のアラームが自動で作成されます。便利ですね。
ちなみに、自動作成されるアラームは 3 data points / 15 data points と設定されていて、これを手動で編集することは推奨されていないようです。
ターゲット追跡スケーリングポリシー用に サービスの Auto Scaling によって管理されている CloudWatch アラームを編集または削除しないでください。スケーリングポリシーを削除すると、サービスの Auto Scaling によって自動的にアラームが削除されます。