CloudFormationでRDSイベントサブスクリプションとメール通知を設定してみる

RDSイベントサブスクリプションのCloudFormationテンプレートを作成しました。ぜひ参考にして頂ければと思います。
2020.03.26

はじめに

こんにちは。大阪オフィスの林です。

RDSイベントサブスクリプションというものを最近知ったので、概要の説明とそのまま使えるCloudFormationテンプレートを紹介したいと思います。

RDSイベントサブスクリプションの概要

ひとことで言うと、RDSで発生したイベントをSNSを経てメール通知ができる機能です。少し前の記事ですがこちらにも概要がありますので併せてご確認頂ければと思います。

今回は通知の設定含むRDSイベントサブスクリプションの設定をCloudFormationでデプロイするテンプレートを紹介したいと思います。

RDSソースタイプ

コードの紹介の前に、RDSイベントサブスクリプションを設定するうえで必要なパラメータが2つあります。その1つ目が「RDSソースタイプ」です。『RDSで発生したイベントをSNSを経てメール通知ができる機能』と申し上げましたが、RDSにも様々なリソースがあり、RDSイベントサブスクリプションでは、どのソースで発生したイベントを検知するか、予め設定しておく必要があります。RDSイベントサブスクリプションで設定出来るソースには下記があります。

  • DBインスタンス
  • セキュリティグループ
  • パラメータグループ
  • スナップショット
  • DBクラスタ
  • DBクラスタスナップショット
  • イベントカテゴリ

    次に、RDSイベントサブスクリプションを設定するうえで必要なパラメータのもう1つが「イベントカテゴリ」です。RDSソースで発生するイベントは「可用性に関わるイベント」や「設定変更に関わるイベント」など多岐に渡ります。RDSイベントサブスクリプションを設定する際には、検知したいRDSソースとイベントカテゴリも併せて設定する必要があります。なおRDSソースに指定したタイプごとで設定(検知)できるイベントに違いがありますので、下記の表をご確認ください。なおCloudFormationのパラメータで指定する場合、日本語では指定できないので英語で指定する必要があります。その対応についても下記表に記載しておきますのでご確認頂ければと思います。

    リソースタイプ
    設定できるイベント
    パラメータで指定する場合
    DBインスタンス 高可用性
    backtrack
    backup
    configuration change
    作成
    削除
    フェイルオーバー
    失敗
    ストレージの減少
    メンテナンス
    通知
    リードレプリカ
    復旧
    復元
    availability
    backtrack
    backup
    configuration change
    creation
    deletion
    failover
    failure
    low storage
    maintenance
    notification
    read replica
    recovery
    restoration
    セキュリティグループ configuration change
    失敗
    configuration change
    failure
    パラメータグループ configuration change configuration change
    スナップショット 作成
    削除
    通知
    復元
    creation
    deletion
    notification
    recovery
    DBクラスタ 作成
    削除
    フェイルオーバー
    失敗
    メンテナンス
    通知
    creation
    deletion
    failover
    failure
    maintenance
    notification
    DBクラスタスナップショット backup
    通知
    backup
    notification

    CloudFormationの実行イメージ

    それでは、作成したCloudFormationのテンプレートの実行イメージをご紹介したいと思います。
    CloudFormationでテンプレートを読み込むとパラメータを入力する画面に遷移します。ここでまず「RDSソースタイプ」を選択します。

    イベントの検知をしたいソースタイプを選択します。

    今回はソースタイプに「DBインスタンス」を選択しました。併せて「イベントカテゴリ」も指定します。指定できる項目はRDSソースタイプによって異なるので、上述した内容を参考に対象としたイベントカテゴリを指定します。今回は「高可用性」と「configuration change」を指定しました。

    CloudFormationが正常に完了すると、RDSのダッシュボードから作成したイベントサブスクリプションを確認することが出来ます。

    SNSトピックやソースタイプ、イベントカテゴリが設定されていることが分かります。

    SNSのダッシュボードも見ておきます。指定したSNSトピックが作成されていることが分かります。

    コードの紹介

    上記CloudFormationで実行したコードを紹介します。

    AWSTemplateFormatVersion: '2010-09-09'
    Description: "Create RDS EventSubscription"
    # ------------------------------------------------------------#
    # Input Parameters
    # ------------------------------------------------------------#
    Metadata:
      AWS::CloudFormation::Interface:
        ParameterGroups:
          -
            Parameters:
              - ProjectName
              - EnvType
              - SystemName
              - SNSSubscriptionEmail
              - RDSSourceType
              - rdsEventCategories
              - rdsEventCategoriesparameter
    Parameters:
      ProjectName:
        Description: Please type the ProjectName.
        Type: String
        Default: testpj
      EnvType:
        Description: Please type the EnvironmentType.
        Type: String
        Default: prod
      SystemName:
        Description: Please type the SystemName.
        Type: String
        Default: xxxsystem
      SNSSubscriptionEmail:
        Description: Please type the SNSSubscriptionEmail.
        Type: String
        Default: xxxx@example.co.jp
      RDSSourceType:
        Description: Please select the RDSSourceType.
        Type: String
        AllowedValues: 
          - db-instance
          - db-security-group
          - db-parameter-group
          - db-snapshot
          - db-cluster
          - db-cluster-snapshot
      rdsEventCategoriesparameter:
        Description: Please select the "availability","backtrack","backup","configuration change","creation","deletion","failover","failure","low storage","maintenance","notification","read replica","recovery","restoration"
        Type: CommaDelimitedList
        Default: "availability,configuration change"
    Resources:
    # ------------------------------------------------------------#
    # snstopic
    # ------------------------------------------------------------#
      snstopic:
        Type: "AWS::SNS::Topic"
        Properties:
          DisplayName: !Sub ${ProjectName}-${EnvType}-${SystemName}-topic
          Subscription:
            - Endpoint: !Sub ${SNSSubscriptionEmail}
              Protocol: "email"
          TopicName: !Sub ${ProjectName}-${EnvType}-${SystemName}-topic
    # ------------------------------------------------------------#
    # RDS EventSubscription
    # ------------------------------------------------------------#
      RDSEventSubscription:
        Type: "AWS::RDS::EventSubscription"
        Properties:
          Enabled: true
          EventCategories: !Ref rdsEventCategoriesparameter
          SnsTopicArn: !Ref snstopic
          SourceType: !Ref RDSSourceType

    まとめ

    RDSイベントサブスクリプションCloudFormationで実装しようとしている方の参考になれば幸いです!

    以上、大阪オフィスの林がお送りしました!