[アップデート] Amazon CloudWatch の複合アラームに、一定数の子アラームが特定条件になった時にアラーム状態とさせる AT_LEAST 関数が追加されました
いわさです。
Amazon CloudWatch アラームには「複合アラーム」という機能があります。
この複合アラームを使うと、複数のアラームを組み合わせて新しいアラーム条件を定義することが出来ます。
このアラーム条件の定義に、従来はAND,OR,NOTの演算子を使うことが出来ていたのですが、今朝のアップデートでAT_LEAST関数が追加されました。(タイトルが「threshold-based alerting」になっており正しいのかな...)
これによって、例えば 10 件の子アラームを基に複合アラームを作成した時に、「7割の子アラームが ALARM 状態となった場合」など指定した子アラームの最小数または最小割合を条件に設定できるようになりました。
1 つの複合アラームでは最大 100 件の子アラームを構成することが出来ます。
1, 2 件の子アラームであればANDやORで定義できますが、子アラームの件数が多い場合にそれだと大変でした。今回のアップデートでこのあたりがかなり楽になりそうです。
実際に使ってみたので紹介します。
AT_LEAST 関数を使った複合アラームを構成
複合アラームの定義をする際に今回の機能を使いますので、まず事前に適当なアラームをいくつか作成しておきます。
CloudWatch アラームコンソールで子アラームとなるそれらを選択し「複合アラームの作成」を押します。

そうすると複合アラーム条件の定義が開始されます。
デフォルトで子アラームのどれかひとつが ALARM 状態になった場合に複合アラームも ALARM 状態となるようにOR演算子が使われていますね。

ここでAT_LEAST関数を使ってみましょう。なお、AT_LEAST関数の使い方は以下の公式ドキュメントにも記載されていますのでリファレンス的に参照してみてください。
形式としてはAT_LEAST(M, STATE_CONDITION, (alarm1, alarm2, ...alarmN))で指定し、Mには最小数あるいは最小割合(%)を指定することができます。
STATE_CONDITIONには以下が指定できます。
- ALARM
- OK
- INSUFFICIENT_DATA
- NOT ALARM
- NOT OK
- NOT INSUFFICIENT_DATA
今回は3つの子アラームのうち2つ以上が ALARM 状態になった時に複合アラームも ALARM 状態になるようにしてみましょう。以下のような感じです。

複合アラームを作成しました。
コンソール上での条件を確認してみると「少なくとも2個のアラームが[Alarm]に入ります」と表示されています。良さそうです。

複合アラームをテストしてみる
せっかく作成したのでテストもしてみましょう。
CloudWatch アラームは AWS CLI 経由で状態を変更させることが出来ます。CloudWatch アラームのテストよくやりますよね。園部先生のこちらの記事には入社直後から頻繁にお世話になっています。
こちらを使って子アラームを ALARM 状態に変更してみます。
1つ目の子アラームが ALARM 状態となりました。この時はまだ複合アラームは OK 状態ですね。

2つ目の子アラームを ALARM 状態にしました。
そうすると複合アラームも ALARM 状態になりましたね。良いですね。期待どおりです。

なお、今回は複合アラームのアクションは E メールサブスクリプションを登録した SNS へのメッセージ送信です。
受信した E メール本文は次のような感じでした。
You are receiving this email because your Amazon CloudWatch Alarm "hoge1112composite" in the Asia Pacific (Tokyo) region has transitioned to ALARM state on Tuesday 11 November, 2025 20:55:22 UTC, because "arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:hoge1112alarm2 transitioned to ALARM at Tuesday 11 November, 2025 20:55:22 UTC".
View this alarm in the AWS Management Console:
https://ap-northeast-1.console.aws.amazon.com/cloudwatch/deeplink.js?region=ap-northeast-1#alarmsV2:alarm/hoge1112composite
Alarm Details:
- Name: hoge1112composite
- Description:
- State Change: OK -> ALARM
- Alarm Rule: AT_LEAST(2, ALARM, (hoge1112alarm1, hoge1112alarm2, hoge1112alarm3))
- Reason for State Change: arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:hoge1112alarm2 transitioned to ALARM at Tuesday 11 November, 2025 20:55:22 UTC
- Timestamp: Tuesday 11 November, 2025 20:55:22 UTC
- AWS Account: 123456789012
- Alarm Arn: arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:hoge1112composite
Triggering children (max. 10):
- arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:hoge1112alarm2 ALARM Tuesday 11 November, 2025 20:55:22 UTC
- arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:hoge1112alarm1 ALARM Tuesday 11 November, 2025 20:55:20 UTC
State Change Actions:
- OK:
- ALARM: [arn:aws:sns:ap-northeast-1:123456789012:general-topic-iwasaclassmethod2]
- INSUFFICIENT_DATA:
:
どういった複合アラームの条件なのかそのまま式が表示されているので、まぁわかる人にはわかる。子アラームもどれが対象なのかわかるのが良いですね。
その後、子アラームがOK状態に戻ると、複合アラームもOK状態に戻りました。

さいごに
本日は Amazon CloudWatch の複合アラームに、一定数の子アラームが特定条件になった時にアラーム状態とさせる AT_LEAST 関数が追加されたので使ってみました。
複合アラームであまり複雑なことをしたことなかったんですけども、子アラームの数が多い時など重宝しそうな関数です。覚えておきたい。






