[アップデート] Amazon CloudWatch アラームで通知ペイロードにタグを含められるようになりました
いわさです。
Amazon CloudWatch アラームで送信されるデータは決まったペイロード形式で送信されます。
ただ、どういうアラームからのアラートかやステータスなどは確認が出来たのですが、アラームに設定されているタグはペイロードだけでは判定が出来ませんでした。
先日のアップデートで、アラームのタグを通知ペイロードに含められるようになりました。
例えば複数のアラームからの受信を特定の Lambda で捌いて振り分けしている時とか、タグで分類して処理をルーティングさせるなどできるようになります。これは良さそう。
今回こちらを確認してみたので紹介します。
実際に確認してみる
メトリクスアラームを 1 つ用意して、タグを 4 つ付けておきました。
ここを見てみると、アラームの「タグ」タブの下に「アクションとイベントにタグを含める」という項目があるのがわかりますね。今は無効化になってます。

タグを通知に含める設定は、アラームの作成・編集ウィザードの「アラームの詳細の追加」ステップにあります。
タグエディターの下の「アクションとイベントにタグを含める」で、「このアラームのタグをアクションペイロードとイベントペイロードに含める」にチェックを入れると有効になります。ここです。

有効にすると、含めるタグを選択できます。
「すべてのタグ」か「タグを選択」で、選択時は「タグを含める」「タグを除外する」のどちらかとキーを指定します。

この状態でアラームを ALARM 状態に遷移させて、各宛先に届いた通知を確認します。
アラーム状態にしておきました。

で、受信側の SNS に届いたメッセージを確認してみましょう。こんな感じになってました。
{
"AlarmName": "hoge-cwtag-alarm",
"NewStateValue": "ALARM",
"AlarmArn": "arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:hoge-cwtag-alarm",
"AlarmTags": [
{ "Key": "CostCenter", "Value": "cc-1234" },
{ "Key": "Environment", "Value": "prod" },
{ "Key": "Secret", "Value": "do-not-send" },
{ "Key": "Team", "Value": "platform" }
],
"AlarmTagsStatus": "SUCCESS"
}
AlarmTags と AlarmTagsStatus が追加されていました。
AlarmTagsはまぁ伝播されたタグなので補足いらないと思います。AlarmTagsStatusがよくわからんですね。
公式ドキュメントによると次の4種類があるらしいです。
SUCCESS: タグを取得できた(フィルタ適用後なので、フィルタで全部除外されると空になることもある)NO_TAGS: アラームにタグが付いていないTRUNCATED: サイズ上限に収めるため一部のタグが省略されたFAILURE: 通知送信時にタグを取得できなかった
なるほど、TRUNCATED や FAILURE でもタグが欠けるだけで通知自体は届くけど、タグが期待どおり伝わらないことがあるみたいだ。値とかのサイズかな。
受信側で必要に応じてこのステータスを見たほうが良さそうですね。
Lambda を直接アクションに指定している場合も構造はだいたい同じ感じでした。
{
"source": "aws.cloudwatch",
"alarmArn": "arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:hoge-cwtag-alarm",
"alarmData": {
"alarmName": "hoge-cwtag-alarm",
"state": { "value": "ALARM" },
"alarmTags": [
{ "key": "CostCenter", "value": "cc-1234" },
{ "key": "Environment", "value": "prod" },
{ "key": "Secret", "value": "do-not-send" },
{ "key": "Team", "value": "platform" }
],
"alarmTagsStatus": "SUCCESS"
}
}
EventBridge に送られるイベントはこちら。detail.alarmTags がキーと値のオブジェクトになっていました。
{
"detail-type": "CloudWatch Alarm State Change",
"source": "aws.cloudwatch",
"detail": {
"alarmName": "hoge-cwtag-alarm",
"state": { "value": "ALARM" },
"alarmTags": {
"CostCenter": "cc-1234",
"Environment": "prod",
"Secret": "do-not-send",
"Team": "platform"
},
"alarmTagsStatus": "SUCCESS"
}
}
SNS・Lambda のリスト形式と違い、EventBridge だけキーと値のオブジェクト形式です。イベントパターンでのフィルタをしやすくするためだと公式ドキュメントでも言及されてますね。
EventBridge includes them as key-value pairs to make event pattern filtering easier.
たとえば Team が platform のアラームだけ拾うイベントパターンは、次のように EventBrdige ルールで定義すれば良さそうです。
{
"source": ["aws.cloudwatch"],
"detail-type": ["CloudWatch Alarm State Change"],
"detail": {
"alarmTags": { "Team": ["platform"] }
}
}
なお、アラーム側で「アクションとイベントにタグを含める」が無効の状態だと AlarmTagsStatus 自体がペイロードに出力されませんでした。
さいごに
本日は CloudWatch アラームの通知ペイロードにタグを含められるようになったので確認してみました。
これは中々良いですね。
私も自分でホスティングしているサーバーレスのシステムでアラーム設定してるんですが、一つのルールで集約させて通知出してるんですよね。
これはその後ろの分岐に使えそうです。








