Amazon ElastiCacheイベントをAmazon SNSでフィルタリングして通知する

AWS

2025.12.6

Topics

この記事はNHN テコラス Advent Calendar 2025 の 6 日目の記事です。

はじめに

皆様、ElastiCache のイベント通知は設定していますでしょうか?
ElastiCacheでは重要なイベントが発生した際に、Amazon SNSを使用してメッセージを発行できる機能があります。
イベントには基盤メンテナンスによるノード置換(Failover)やスナップショット作成など様々なイベントが含まれます。
通知内容のフィルタリングはLambdaなどを用いれば実装可能ですが、今回はできるだけ運用負荷を下げ、シンプルに実装するためSNSサブスクリプションフィルターを用いた特定のイベントのみ通知する方法をご紹介します。

構成

今回は下記のような構成で実装してみたいと思います。

  • ElastiCacheのメンテナンス通知でSNSトピックにイベントを送信
  • SNSトピックのサブスクリプションフィルターにてメッセージの除外/フィルタリングを実施

設定手順

SNS設定

まず、ElastiCacheから通知を受け取るSNSトピックを作成します。
トピックにサブスクリプションを登録する場合、注意点があります。
必ずプロトコルをJSON形式のメール(EMAIL-JSON)に設定してください。
メッセージ本文に対してフィルターを適用するには、SNSメッセージがJSON形式である必要があるためです。

「サブスクリプションの確認」からメールに記載されたSubscribeURLを入力することでサブスクリプションが有効になります。

サブスクリプションフィルター設定

SNSのサブスクリプション設定で、メッセージ本文をスコープとするフィルターポリシーを設定します。

例としてスナップショット作成通知のみ除外したい場合、以下の内容をJSONエディタに設定します。

{
  "ElastiCache:SnapshotComplete": [
    {
      "exists": false
    }
  ]
}

この設定により、ElastiCache:SnapshotCompleteキーを含む通知が存在しない場合のみ通知が届く(=当該通知を除外)ようになります。
exists句をtrueにすることでキーを含む通知が存在する場合のみ通知することも可能です。
文字列値の一致 – Amazon Simple Notification Service

ElastiCache設定

ElastiCache側のメンテナンス設定画面で、先ほど作成したSNSトピックを指定します。
指定できるSNSトピックは1つのみとなっています。

以上で設定は完了です。

通知メールの見た目について

通知文がJSON形式になるので少し見づらいです。
整形しようと試みましたが、現状SNS側で改善する方法はありませんでした。。

注意点

フィルターに指定できるキーは最大5つまで

SNSサブスクリプションフィルターには最大5つのキーしか設定できません。
Amazon SNS フィルターポリシーの制約 – Amazon Simple Notification Service
現状ElastiCacheイベントではキー/値の構造があるわけではないので文字列による一致のフィルターしか使えず、実質的に除外/個別通知できるイベント数に制限があります。
そのためより複雑な条件分岐や運用要件がある場合は、現時点ではLambda関数で個別実装するのが良いかと思います。

さいごに

基盤メンテナンスに伴うノード置換はHealth Dashboard等には表示されず、ElastiCacheのイベント通知でしか気付けないケースがあります。
そういった重要なイベントに気づける仕組みとして、本記事が参考になれば幸いです。

NHN テコラスの採用情報はこちら

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

NT1

インフラエンジニアです。刹那的に生きてます。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら