この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。大阪オフィスの林です。
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: 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で実装しようとしている方の参考になれば幸いです!
以上、大阪オフィスの林がお送りしました!