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%になるようにタスク数を調整するオートスケーリング設定の例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 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サービスに自動スケーリング設定が適用されます。