[アップデート] CloudWatch Application Signals の推奨 SLO が API からも作成できるようになりました

[アップデート] CloudWatch Application Signals の推奨 SLO が API からも作成できるようになりました

2026.04.22

いわさです。

CloudWatch Application Signals の SLO(Service Level Objective)機能では、アプリケーションの可用性やレイテンシーに対する目標値を定義し、信頼性を継続的に監視出来ます。
ただ、SLO を作成する際にはレイテンシーの閾値(何ミリ秒以下にするか)やゴール(目標達成率を何%にするか)をユーザー自身で決める必要がありました。

これが2026年3月のアップデートで、過去 30 日間のサービスメトリクスを分析してこれらの値を提案してくれる「推奨 SLO」機能がコンソールに追加されています。
既に以下の記事で紹介されています。

https://dev.classmethod.jp/articles/cloudwatch-application-signals-adds-slo-capabilities/

上記は3月時点ではコンソールからの操作のみで、API / CLI から推奨 SLO を作成することは出来ませんでしたが、今回、CreateServiceLevelObjective API に CreateRecommendedSlo パラメータが追加され、API / CLI からも推奨 SLO を作成出来るようになっています。

https://github.com/aws/aws-cli/commit/f857e47dd1d1f7de4b5785f30a784cf427c22c49

今回こちらを確認してみたので紹介します。

AWS CLI で推奨 SLO を作成してみる

今回の変更は AWS CLI v1 では 1.44.82、v2 では 2.34.33 で反映されています。
変更内容としては「Releasing Second phase of SLO Recommendations」とされており、CreateServiceLevelObjective API のリクエストパラメータに CreateRecommendedSlo(boolean)が追加されました。

公式ドキュメントによると、CreateRecommendedSlotrue に設定すると、MetricThresholdComparisonOperator の指定が不要になるようです。

This is not required if CreateRecommendedSlo is set to true.

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/application-signals/create-service-level-objective.html

MetricThreshold を省略して SLO を作成してみる

今回は Application Signals で検出されている API Gateway のサービスを対象にしました。
SLO 作成前のコンソール画面はこんな感じで、まだ SLO は 1 つもありません。

53F855BD-CD66-40F4-AF55-16AD52544F8E.png

まず、--create-recommended-slo を付けずに MetricThreshold も省略して SLO を作成してみます。

aws application-signals create-service-level-objective \
  --name "hogecm-latency-no-recommended" \
  --sli-config '{
    "SliMetricConfig": {
      "KeyAttributes": {
        "Type": "Service",
        "Name": "hogecm",
        "Environment": "api-gateway:v1"
      },
      "OperationName": "GET /cmweb",
      "MetricType": "LATENCY"
    }
  }'
An error occurred (ValidationException) when calling the CreateServiceLevelObjective operation: MetricThreshold must not be empty

MetricThreshold must not be empty というバリデーションエラーになりました。
従来は MetricThresholdComparisonOperator を明示的に指定する必要があったことがわかります。

では --create-recommended-slo を付けて実行してみます。
指定するのはサービスの KeyAttributesOperationNameMetricType だけで、閾値やゴールは省略しています。

aws application-signals create-service-level-objective \
  --name "hogecm-latency-recommended" \
  --sli-config '{
    "SliMetricConfig": {
      "KeyAttributes": {
        "Type": "Service",
        "Name": "hogecm",
        "Environment": "api-gateway:v1"
      },
      "OperationName": "GET /cmweb",
      "MetricType": "LATENCY"
    }
  }' \
  --create-recommended-slo
{
  "Slo": {
    "Arn": "arn:aws:application-signals:ap-northeast-1:123456789012:slo/hogecm-latency-recommended",
    "Name": "hogecm-latency-recommended",
    "CreatedTime": "2026-04-22T00:00:00.000000",
    "LastUpdatedTime": "2026-04-22T00:00:00.000000",
    "Sli": {
      "SliMetric": {
        "KeyAttributes": {
          "Environment": "api-gateway:v1",
          "Name": "hogecm",
          "Type": "Service"
        },
        "OperationName": "GET /cmweb",
        "MetricType": "LATENCY",
        "MetricDataQueries": [
          {
            "Id": "latency",
            "MetricStat": {
              "Metric": {
                "Namespace": "AWS/ApiGateway",
                "MetricName": "Latency",
                "Dimensions": [
                  { "Name": "ApiName", "Value": "hogecm" },
                  { "Name": "Method", "Value": "GET" },
                  { "Name": "Resource", "Value": "/cmweb" },
                  { "Name": "Stage", "Value": "v1" }
                ]
              },
              "Period": 60,
              "Stat": "p99",
              "Unit": "Milliseconds"
            },
            "ReturnData": true,
            "Period": 60
          }
        ]
      },
      "MetricThreshold": 200.0,
      "ComparisonOperator": "LessThan"
    },
    "EvaluationType": "PeriodBased",
    "Goal": {
      "Interval": {
        "RollingInterval": {
          "DurationUnit": "DAY",
          "Duration": 28
        }
      },
      "AttainmentGoal": 99.0,
      "WarningThreshold": 50.0
    },
    "BurnRateConfigurations": [
      { "LookBackWindowMinutes": 60 },
      { "LookBackWindowMinutes": 360 },
      { "LookBackWindowMinutes": 4320 }
    ],
    "MetricSourceType": "ServiceOperation"
  }
}

作成出来ました。
こちらで指定したのはサービスの KeyAttributesOperationNameMetricType だけですが、レスポンスを見ると以下の値が自動で設定されていることがわかります。

  • MetricThreshold: 200.0(P99 レイテンシーが 200ms 未満)
  • ComparisonOperator: LessThan
  • AttainmentGoal: 99.0%
  • Interval: 28 日間のローリングインターバル
  • WarningThreshold: 50.0%
  • BurnRateConfigurations: 60 分、360 分、4320 分(3 日)の 3 つのルックバックウィンドウ

なお、BurnRateConfigurations はエラーバジェット(SLO 目標を満たしつつ許容できるエラーの量)の消費速度を監視するための設定です。
こちらも推奨値が自動で設定されてますね。良いですね。

推奨 SLO で可用性の SLO を作成

続いて、メトリクスタイプを AVAILABILITY に変更して試してみます。

aws application-signals create-service-level-objective \
  --name "hogecm-availability-recommended" \
  --sli-config '{
    "SliMetricConfig": {
      "KeyAttributes": {
        "Type": "Service",
        "Name": "hogecm",
        "Environment": "api-gateway:v1"
      },
      "OperationName": "GET /cmweb",
      "MetricType": "AVAILABILITY"
    }
  }' \
  --create-recommended-slo
{
  "Slo": {
    "Arn": "arn:aws:application-signals:ap-northeast-1:123456789012:slo/hogecm-availability-recommended",
    "Name": "hogecm-availability-recommended",
    "CreatedTime": "2026-04-22T00:00:00.000000",
    "LastUpdatedTime": "2026-04-22T00:00:00.000000",
    "Sli": {
      "SliMetric": {
        "KeyAttributes": {
          "Environment": "api-gateway:v1",
          "Name": "hogecm",
          "Type": "Service"
        },
        "OperationName": "GET /cmweb",
        "MetricType": "AVAILABILITY",
        "MetricDataQueries": [
          {
            "Id": "availability",
            "Expression": "(1 - fault / volume) * 100",
            "ReturnData": true,
            "Period": 60
          },
          {
            "Id": "fault",
            "MetricStat": {
              "Metric": {
                "Namespace": "AWS/ApiGateway",
                "MetricName": "5XXError",
                "Dimensions": [
                  { "Name": "ApiName", "Value": "hogecm" },
                  { "Name": "Method", "Value": "GET" },
                  { "Name": "Resource", "Value": "/cmweb" },
                  { "Name": "Stage", "Value": "v1" }
                ]
              },
              "Period": 60,
              "Stat": "Sum"
            },
            "ReturnData": false
          },
          {
            "Id": "volume",
            "MetricStat": {
              "Metric": {
                "Namespace": "AWS/ApiGateway",
                "MetricName": "Latency",
                "Dimensions": [
                  { "Name": "ApiName", "Value": "hogecm" },
                  { "Name": "Method", "Value": "GET" },
                  { "Name": "Resource", "Value": "/cmweb" },
                  { "Name": "Stage", "Value": "v1" }
                ]
              },
              "Period": 60,
              "Stat": "SampleCount"
            },
            "ReturnData": false
          }
        ]
      },
      "MetricThreshold": 99.9,
      "ComparisonOperator": "GreaterThanOrEqualTo"
    },
    "EvaluationType": "PeriodBased",
    "Goal": {
      "Interval": {
        "RollingInterval": {
          "DurationUnit": "DAY",
          "Duration": 28
        }
      },
      "AttainmentGoal": 99.0,
      "WarningThreshold": 50.0
    },
    "BurnRateConfigurations": [
      { "LookBackWindowMinutes": 60 },
      { "LookBackWindowMinutes": 360 },
      { "LookBackWindowMinutes": 4320 }
    ],
    "MetricSourceType": "ServiceOperation"
  }
}

こちらも作成出来ました。
レイテンシーの場合とは推奨値が異なっていることがわかります。

  • MetricThreshold: 99.9%(可用性が 99.9% 以上)
  • ComparisonOperator: GreaterThanOrEqualTo

可用性の場合は (1 - fault / volume) * 100 という数式で 5XX エラー率から可用性を算出しているようですね。
AttainmentGoalBurnRateConfigurations はレイテンシーの場合と同じ値が設定されていました。

コンソールで確認

作成された SLO をコンソールからも確認してみます。

E05D5CF5-9C4A-4305-8A47-3160AC7CA432.png

API から作成した hogecm-latency-recommended がコンソール上にも表示されていますね。
目標 99%、28 日のローリングインターバルで設定されていることが確認出来ます。

さいごに

本日は CloudWatch Application Signals の推奨 SLO が API からも作成できるようになったので試してみました。

3月にマネジメントコンソールで追加された推奨 SLO 機能が API 対応した形でした。
パラメータ 1 つ追加するだけで閾値やゴール、バーンレートの設定まで自動で決めてくれるので、多数のサービスに対して一括で SLO を導入したい場合にはスクリプトで回せて便利そうです。

注意点として API だと推奨値が事前にわからないまま作成される(マネコンだとレビューしてから作成に進める)ので、推奨値を確認してから判断したい場合はコンソール側を使う方が良さそうですね。
CloudFormation 対応が進むと嬉しそうだなと思いましたが、本日時点では AWS::ApplicationSignals::ServiceLevelObjective には CreateRecommendedSlo に相当するプロパティはまだ追加されていないようです。

https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-applicationsignals-servicelevelobjective.html

この記事をシェアする

関連記事