Amazon SNSで、メッセージの配信先として新しくAmazon Kinesis Data Firehoseを指定できるようになった!とのことで、タイムリーなお仕事をしたので、メモを兼ねて手順を記載。
目的
マルチAZなRDSでフェイルオーバーが起こった際にNew Relicでアラートを発生させたい。
けど、New RelicとAWSのインテグレーションを結んだだけでは検知できない…
よし、AWS SNSからKinesis Data Firehoseが呼び出せるようになったのでそれを使って通知をしてやろう。
サービスには影響ないが、AZをまたぐレイテンシーの増加が許容できないなど厳しい案件には有用?
必要なAWSコンポーネント
- RDS(当然)
- Kinesis Data Firehose
- SNS
流れ
RDS(Event subscriptions) → SNS → Kinesis Data Firehose → New Relic Logs
手順
Kinesis Data Firehoseでdelivery streamsを作成する
事前準備
Kinesis Data Firehose delivery steramの配信エラーログを格納するS3バケットを作成する。
全てデフォルト設定でOK。
作成開始

Kinesisのページで「Kinesis Data Firehose」を選択し、「Create delivery stream」をクリック
Step1: Name and source
Step2: Process records

デフォルトのまま次へ
※配信されてくるレコードのやフォーマットの変換が必要な場合は適宜設定をする。
Step3: Choose a destination
| 項目 | 値 | 備考 |
|---|---|---|
| Destination | Third-party service provider | |
| Third-party service provider | New Relic | |
| HTTP endpoint URL | https://aws-api.newrelic.com/firehose/v1 | デフォルトで入力済み |
| API Key | New Relicの**Insert API Key** | 作成方法は欄外(※)を参照 |
| S3 backup mode | Failed data only | 成功ログも格納する場合はAll dataを選択 |
| S3 backup | 事前準備したS3バケット | |
| ※New Relic Insert API Keyの作成 | ||
| https://docs.newrelic.com/docs/telemetry-data-platform/ingest-manage-data/ingest-apis/introduction-event-api#register |
Step4: Cofigure setting

デフォルトのまま次へ
※上の画像は途中で切っています。
※バッファやタグ、IAMロールの独自命名が必要な場合は適宜設定をしてください。
Step5: Review

設定を確認し「Create delivery stream」をクリック
※上の画像は途中で切っています。
SNSトピックを作成する
事前準備
SNSのサブスクリプションでKinesis Data Firehoseを実行できるように下記のIAMロールを作成しておいてください。
| 項目 | 値 | 備考 |
|---|---|---|
| 信頼されたエンティティ | sns.amazon.com | |
| ポリシー 1 | AmazonSNSRole | AWSマネージドポリシー |
| ポリシー 2 | 任意の名前 | ポリシー内容は下記に記載 |
ポリシー2の内容
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"firehose:DescribeDeliveryStream",
"firehose:ListDeliveryStreams",
"firehose:ListTagsForDeliveryStream",
"firehose:PutRecord",
"firehose:PutRecordBatch"
],
"Resource": [
"<<作成したKinesis Data Firehose delivery streamのarn>>"
],
"Effect": "Allow"
}
]
}
作成開始

AWS SNSのページで「Create topic」をクリック
トピックの作成
| 項目 | 値 | 備考 |
|---|---|---|
| タイプ | スタンダード | |
| 名前 | 任意 |
サブスクリプションの作成
| 項目 | 値 | 備考 |
|---|---|---|
| トピックARN | 作成したトピックのARN | デフォルトで入力済み |
| プロトコル | Amazon Kinesis Data Firehose | |
| エンドポイント | 作成したdelivery streamのARN | |
| サブスクリプションロールのARN | 事前準備したSNS用IAMロールのARN |
RDSのイベントサブスクリプションを作成する
作成開始

RDSのイベントサブスクリプションページで「Create event subscription」をクリック
以下を設定しRDSイベントサブスクリプションを作成する
| 項目 | 値 | 備考 |
|---|---|---|
| 名前 | 任意 | |
| ターゲット | ARN | |
| ARN | 作成したSNSを選択 | |
| ソースタイプ | インスタンス | |
| インスタンスを含みます | 監視するインスタンスを選択 | |
| イベントカテゴリを含みます | 特定のイベントカテゴリを選択 | |
| 特定のイベントカテゴリ | failover、failure、recovery | 要件に合わせて適宜調整 |
以上でNew Relic Logsへイベント通知が配信されます。
SELECT count(*) FROM Log WHERE `Message.Event Message` LIKE '%failover started%' SINCE 1 day ago TIMESERIES
配信されると以下のNRQLなどでメトリクスとして検出可能なので、Conditionを作成する。
LIKEに指定する文言は適宜調整する。
できました。




