ECS オートスケーリング
記事
Terraform の設定
オートスケーリングの設定をTerraformで記述する例を以下に示します。この例では、CPU使用率に基づいてECS Fargateサービスのタスク数を自動的にスケーリングするように設定します。
必要なリソース
TerraformでECSサービスのオートスケーリングを設定するには、以下のリソースを定義します。
aws_appautoscaling_target: スケーリングの対象となるECSサービスとタスク数を指定します。aws_appautoscaling_policy: 実際のスケーリングロジック(CPU使用率、目標値など)を定義します。aws_cloudwatch_metric_alarm: (オプション) 詳細な条件でスケーリングを制御する場合に使用します。ターゲット追跡スケーリングポリシーは内部でこれを生成するため、通常は明示的に定義する必要はありません。
Terraform コード例
以下のコードブロックは、aws_ecs_serviceリソースで定義されたECSサービスに対して、CPU使用率が50%になるようにタスク数を調整するオートスケーリング設定の例です。
# ECSサービスを定義 (この例では、既存サービスを想定)
# resource "aws_ecs_service" "main" {
# name = "my-ecs-service"
# ...
# }
# 1. オートスケーリングの対象を定義
resource "aws_appautoscaling_target" "ecs_target" {
service_namespace = "ecs"
resource_id = "service/my-cluster/my-ecs-service" # サービス名に合わせて変更
scalable_dimension = "ecs:service:DesiredCount"
min_capacity = 1 # 最小タスク数
max_capacity = 10 # 最大タスク数
}
# 2. ターゲット追跡スケーリングポリシーを定義
resource "aws_appautoscaling_policy" "cpu_scaling_policy" {
name = "cpu-utilization-scaling-policy"
service_namespace = "ecs"
resource_id = aws_appautoscaling_target.ecs_target.resource_id
scalable_dimension = aws_appautoscaling_target.ecs_target.scalable_dimension
policy_type = "TargetTrackingScaling"
target_tracking_scaling_policy_configuration {
predefined_metric_specification {
predefined_metric_type = "ECSServiceAverageCPUUtilization"
}
target_value = 50.0 # CPU使用率の目標値(%)
scale_in_cooldown = 300 # スケールイン(タスク減少)のクールダウン期間(秒)
scale_out_cooldown = 60 # スケールアウト(タスク増加)のクールダウン期間(秒)
}
}
コードの解説
-
aws_appautoscaling_target:service_namespace: オートスケーリング対象のAWSサービスを指定します。ECSの場合はecsです。resource_id:service/クラスター名/サービス名の形式で指定します。scalable_dimension: スケーリングする対象のプロパティを指定します。ECSサービスのタスク数の場合はecs:service:DesiredCountです。min_capacity,max_capacity: サービスのタスク数の最小値と最大値を設定します。
-
aws_appautoscaling_policy:policy_type: スケーリングポリシーのタイプをTargetTrackingScalingに設定します。target_tracking_scaling_policy_configuration: ターゲット追跡スケーリングの詳細設定を記述します。predefined_metric_specification: あらかじめ定義されたCloudWatchメトリクスを指定します。CPU使用率の場合はECSServiceAverageCPUUtilizationを使います。target_value: 目標とするCPU使用率をパーセントで指定します。scale_in_cooldown,scale_out_cooldown: タスクの増減が頻繁に起こるのを防ぐためのクールダウン期間を秒単位で設定します。
このコードをmain.tfなどのファイルに記述し、terraform applyを実行することで、ECSサービスに自動スケーリング設定が適用されます。