CloudFormationでRDSイベントサブスクリプションとメール通知を設定してみる
はじめに
こんにちは。大阪オフィスの林です。
RDSイベントサブスクリプションというものを最近知ったので、概要の説明とそのまま使えるCloudFormationテンプレートを紹介したいと思います。
RDSイベントサブスクリプションの概要
ひとことで言うと、RDSで発生したイベントをSNSを経てメール通知ができる機能です。少し前の記事ですがこちらにも概要がありますので併せてご確認頂ければと思います。
今回は通知の設定含むRDSイベントサブスクリプションの設定をCloudFormationでデプロイするテンプレートを紹介したいと思います。
RDSソースタイプ
コードの紹介の前に、RDSイベントサブスクリプションを設定するうえで必要なパラメータが2つあります。その1つ目が「RDSソースタイプ」です。『RDSで発生したイベントをSNSを経てメール通知ができる機能』と申し上げましたが、RDSにも様々なリソースがあり、RDSイベントサブスクリプションでは、どのソースで発生したイベントを検知するか、予め設定しておく必要があります。RDSイベントサブスクリプションで設定出来るソースには下記があります。
イベントカテゴリ
次に、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: [email protected] 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で実装しようとしている方の参考になれば幸いです!
以上、大阪オフィスの林がお送りしました!