kakakakakku blog

Weekly Tech Blog: Keep Learning!

Terraform の AWS Cloud Control Provider (awscc) で CloudWatch Alarm「ミュートルール」を設定しよう

2026年2月に Amazon CloudWatch Alarm の「ミュートルール (Mute Rules)」 という新機能がリリースされた❗️

計画メンテナンスのときなど Amazon CloudWatch Alarm のアクションを一時的に止めたい場合に今までだと「無効化」を設定する必要があった.もしくは計画メンテナンス中に大量にアラートが鳴ってしまって「すいません!今作業中だから無視してください🫡」みたいなアナウンスをしてしまっているチームもあると思う.「ミュートルール」を使えば柔軟にアラートを抑制できる.

aws.amazon.com

現時点では Terraform AWS Provider で未サポート

2026年3月3日時点では Terraform AWS Provider ではサポートされていなかった.issue は出ていてサポートされそうな未来はある😀

github.com

AWS Cloud Control Provider (awscc) ではサポートされている

AWS Cloud Control Provider (awscc) では2026年2月18日にリリースされた v1.72.0 からサポートされている.リソースとしては awscc_cloudwatch_alarm_mute_rule を使えば OK👌

github.com

さっそく試す \( 'ω')/

今回は「1回限り」を試す.他には「定期的なスケジュール」という設定もある🕐️

Amazon CloudWatch Alarm をデプロイする

まずは検証用の Amazon CloudWatch Alarm と Amazon SNS トピックをデプロイする.Amazon CloudWatch Alarm のメトリクスは適当に設定しておく😀

resource "aws_sns_topic" "alarms" {
  name = "sandbox-alarms"
}

resource "aws_sns_topic_subscription" "mail" {
  topic_arn = aws_sns_topic.alarms.arn
  protocol  = "email"
  endpoint  = "y.yoshida22@gmail.com"
}

resource "aws_cloudwatch_metric_alarm" "sandbox" {
  alarm_name          = "sandbox-for-mute"
  comparison_operator = "GreaterThanThreshold"
  evaluation_periods  = 1
  namespace           = "Sandbox"
  metric_name         = "DummyMetric"
  period              = 300
  statistic           = "Sum"
  threshold           = 1
  treat_missing_data  = "notBreaching"
  alarm_actions       = [aws_sns_topic.alarms.arn]
  ok_actions          = [aws_sns_topic.alarms.arn]
}

Amazon CloudWatch Alarm を発火させる

デプロイした Amazon CloudWatch Alarm の動作確認をするために aws cloudwatch set-alarm-state コマンドを使って一時的に ALARM に変更してアラートを発火する🔥

docs.aws.amazon.com

$ aws cloudwatch set-alarm-state \
  --alarm-name sandbox-for-mute \
  --state-value ALARM \
  --state-reason 'Testing alarm action without mute'

すると ALARM: "sandbox-for-mute" in Asia Pacific (Tokyo) というメールが届いた📩

AWS Cloud Control Provider (awscc) でミュートルールをデプロイする

AWS Cloud Control Provider (awscc) の awscc_cloudwatch_alarm_mute_rule リソースを使ってミュートルールをデプロイする.schedule で開始時刻と期間を指定できる.今回は検証として 12:15 - 12:30 の時間帯でアラートを抑制する🕐️

resource "awscc_cloudwatch_alarm_mute_rule" "maintenance" {
  name        = "maintenance"
  description = "Maintenance schedule for mute"

  rule = {
    schedule = {
      expression = "at(2026-03-03T12:15)"
      duration   = "PT15M"
      timezone   = "Asia/Tokyo"
    }
  }

  mute_targets = {
    alarm_names = [aws_cloudwatch_metric_alarm.sandbox.alarm_name]
  }
}

期待通りにミュートルールをデプロイできた👌

もう一度 Amazon CloudWatch Alarm を発火させる

今度は設定した時間帯でアラートを発火する🔥

$ aws cloudwatch set-alarm-state \
  --alarm-name sandbox-for-mute \
  --state-value ALARM \
  --state-reason 'Testing alarm action with mute'

すると今度はメールは届かず,マネジメントコンソールでも「アラーム状態」「ミュート時間帯」が重なるようになっていた.

ちなみに「アクション履歴」を見たら以下のようなメッセージが出ていた💡

Successfully muted the alarm action arn:aws:sns:ap-northeast-1:000000000000:sandbox-alarms with the one-time alarm mute arn:aws:cloudwatch:ap-northeast-1:000000000000:alarm-mute-rule:maintenance.

まとめ

マネジメントコンソールのメニューにある「クイックミュート」を使えばワンクリックで一時的なミュートルールを追加できて便利だけど,計画メンテナンスや周期性のあるイベントの場合は Terraform などでミュートルールを管理したくなると思う.現状では AWS Cloud Control Provider (awscc) でサポートされていて,Terraform AWS Provider はもう少し待ちという感じ❗️

X ポスト

関連記事

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com