【CloudFormation】RDSのフェイルオーバーや障害を検知する「イベントサブスクリプション」のテンプレート(複数インスタンス対応)

RDSアイキャッチ画面

はじめに

Amazon RDSの運用において、マルチAZのフェイルオーバーやインスタンスの障害、あるいはAWS側によるメンテナンスイベントの発生をリアルタイムに検知することは、システムの安定稼働に欠かせません。

この記事では、CloudFormation(Cfn)を使って、特定のRDSインスタンス(複数指定可能)の重要イベントを検知し、Amazon SNS経由で通知するためのテンプレートを紹介します。

よくある設定ミスのポイントや、複数台の監視に拡張する方法についても解説しています。

CloudFormationテンプレート(YAML)

そのままコピーして使えるCfnテンプレートです。環境に合わせて、SNSトピックのARNや対象のDBインスタンス識別子(SourceIds)を書き換えてご使用ください。

CloudFormationテンプレート(YAML)

そのままコピーして使えるCfnテンプレートです。環境に合わせて、SNSトピックのARNや対象のDBインスタンス識別子(SourceIds)を書き換えてご使用ください。

AWSTemplateFormatVersion: "2010-09-09"
Description: "RDSインスタンス(複数指定可能)のフェイルオーバー、障害、メンテナンスイベントを検知するイベントサブスクリプション"

Parameters:
  NotificationSNSTopicArn:
    Type: String
    Description: "RDSイベント通知を送信する既存のSNSトピックのARNを入力してください"
    Default: "arn:aws:sns:ap-northeast-1:123456789012:your-sns-topic" # 環境に合わせて変更してください

Resources:
  RDSEventSubscription:
    Type: AWS::RDS::EventSubscription
    Properties:
      # サブスクリプションの名前
      SubscriptionName: "rds-multi-instance-event-subscription"
      
      # 通知先のSNSトピックARN
      SnsTopicArn: !Ref NotificationSNSTopicArn
      
      # ソースのタイプ(DBインスタンスを監視する場合は 'db-instance')
      SourceType: "db-instance"
      
      # 監視対象となるRDSのDBインスタンス識別子リスト
      SourceIds:
        - "prod-db-01"
        # - "prod-db-02"  # 2台目以降を追加する場合はコメントアウトを外してインスタンス名を入力
        # - "prod-db-03"
      
      # 検知するイベントカテゴリー(failover、failure、maintenance を指定)
      EventCategories:
        - "failover"
        - "failure"
        - "maintenance"
        
      # サブスクリプションの有効化
      Enabled: true

1. AWSTemplateFormatVersion は "2010-09-09" を指定

CloudFormationのテンプレートフォーマットバージョンは、現時点で "2010-09-09" が唯一の正しい値です。たまに西暦を現在の年(例: 2012-09-09 など)と勘違いして記述してしまうと、デプロイ時にバリデーションエラー(Invalid template resource… 等)が発生するため注意が必要です。

2. SourceType の規定値と挙動

RDSのイベントサブスクリプション(AWS::RDS::EventSubscription)で特定のDBインスタンスを監視する場合、SourceType には必ず "db-instance" を指定します。

  • 注意点: CloudFormationの仕様やAWS CLIのドキュメントの記載によっては、大文字小文字の扱いやタイポ(例:db_instance など)でデプロイエラー(HandlerErrorCode: InvalidRequest 等)を引き起こす原因になりやすいプロパティです。本テンプレートの通り、すべて小文字でハイフン区切りの "db-instance" と正しく記述してください。

3. 複数台のインスタンスをまとめて監視する方法(SourceIds

SourceIds はリスト形式(配列)を受け付けるため、カンマ区切りやハイフン(-)による並び替えで、複数のDBインスタンスをひとつの設定で一元監視できます。本番環境(prod-db-01)とステージング環境(stg-db-01)をまとめて通知したい場合などに有効です。

4. 厳選した EventCategories

すべてのイベントを通知すると「通知疲れ(アラート過多)」を招くため、運用上特に重要な3つのカテゴリに絞っています。

  • failover:マルチAZの切り替わりを検知
  • failure:インスタンスの深刻な障害を検知
  • maintenance:AWS側によるパッチ適用やハードウェア交換予定を検知

確認

試しにフェールオーバーで再起動してみます。

再起動中

再起動中