CloudFormation】ALBの正常なホスト数(HealthyHostCount)が0になったら通知するCloudWatchアラームのテンプレート(OK通知付き)

cloudwatchアイキャッチ画像

はじめに

AWSでWebアプリケーションを運用する際、ALB(Application Load Balancer)の配下にあるEC2などのインスタンスがすべてダウン(HealthyHostCountが0)してしまう事態は、サービス停止に直結する重大なインシデントです。

この記事では、CloudFormation(Cfn)を使って「ALBの正常なホスト数が0になったらSNSでアラーム通知し、復旧時(OK状態)にも通知する」CloudWatchアラームのテンプレートを紹介します。

CloudFormationテンプレート(YAML)

そのままコピーして使えるCfnテンプレートです。アカウントIDやターゲットグループの識別子は環境に合わせて書き換えてください。

AWSTemplateFormatVersion: "2010-09-09"
Description: "ALBの正常なホスト数が0になったことを検知するCloudWatchアラーム(OK通知付き)"

Parameters:
  NotificationSNSTopicArn:
    Type: String
    Description: "アラーム通知を送信する既存のSNSトピックのARNを入力してください"
    Default: "arn:aws:sns:ap-northeast-1:123456789012:your-sns-topic-name" # 12桁のアカウントIDとSNSトピック名を指定

Resources:
  ALBHealthyHostAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: "alb-no-healthy-hosts-alarm"
      AlarmDescription: "ターゲットグループ内の正常なEC2ホスト数が0になったためアラームを発報します"
      MetricName: "HealthyHostCount"
      Namespace: "AWS/ApplicationELB"
      Statistic: "Minimum"
      Period: 60
      EvaluationPeriods: 1
      Threshold: 1
      ComparisonOperator: "LessThanThreshold"  # 1未満(つまり0になったら発報)
      TreatMissingData: "breaching"            # データ不足(Missing)時も障害とみなしてアラーム

      Dimensions:
        - Name: TargetGroup
          Value: "targetgroup/your-target-group-name/1234567890abcdef" # ご自身のターゲットグループ識別子
        - Name: LoadBalancer
          Value: "app/your-alb-name/abcdef1234567890"                 # ご自身のALB識別子

      # アラーム状態(異常)になったときの通知先
      AlarmActions:
        - !Ref NotificationSNSTopicArn

      # 正常状態(OK)に戻ったときの通知先
      OKActions:
        - !Ref NotificationSNSTopicArn

1. ComparisonOperator: "LessThanThreshold" と Threshold: 1

「ホスト数が0になったら通知」を実現するため、しきい値を「1未満(LessThanThreshold)」に設定しています。これにより、正常なホスト数が0になった瞬間に確実にアラームがトリガーされます。

2. TreatMissingData: "breaching" の理由

ALBへのアクセスが完全に途絶えたり、ターゲットグループ自体に異常が発生したりすると、メトリクス自体が「データ不足(Missing Data)」になる可能性があります。「データがない=正常」と判断されて通知が漏れるのを防ぐため、breaching(不良として処理)を設定するのがベストプラクティスです。

3. OKActions による復旧通知

障害発生時の AlarmActions だけでなく、OKActions を定義することで、システムが自動復旧(オートスケーリングなど)した際に「復旧しました」という通知を同じSNSトピックに飛ばすことができます。運用保守の負担を減らすための必須設定です。

作成後確認

メール確認

まとめ・次のステップ

今回のテンプレートを使えば、ALB配下の全システムダウンを最速で検知し、復旧まで追跡できるようになります。 本番環境で運用する場合は、通知先のSNSトピックをSlackやPagerDutyと連携させて、より気づきやすい仕組みを作るのがおすすめです。