AWS SES+SNSによるNotification受け取りをGolangで実装する

こんにちは。ATOM事業部エンジニアのyuinaです。

以前Amazon SESを利用した機能実装を行った記事を書いたのですが、一緒に利用したAmazonSNSについて書いていなかったなと思い出したので書いていこうと思います。

AmazonSESとAmazonSNSを組み合わせたバウンス通知の受け取り

docs.aws.amazon.com

AWSのデベロッパーガイドにも記載されている公式的な方法です。

実際に行ったこと

ATOMは機能として、アプリケーション内でデータ集計・加工を行って生成したレポートを自動的にメール送付する機能を持っています。

www.atom.tools

今回このバウンスしたという結果をアプリケーション内で顧客への通知に利用するため、DBに保持する必要がありました。
AmazonSNSにSQSを組み合わせる方法もググっていると出てきたりしますが、SQSを使わなくてもミニマムに実装することが可能です。

方法としては、SNSの通知を特定エンドポイントに行う方法になります。

docs.aws.amazon.com

特定エンドポイントへの送信のためにセキュリティのないエンドポイントを作る必要があります。 問題になりそうかなとも思われますが、署名検証を行うようにリファレンスで記載がありますし、やり方については詳しく記載されているのであまり問題はないかもしれません。

大枠の通信の流れは以下となります。

初回subscribeの受信・応答
↓
snsの通知の受信
↓
署名検証
↓
受信データを利用して各種処理

以下に実装のサンプルコードを載せておきます。

エンドポイントの実装

署名検証の実装

こちらの処理まで行えば、あとはDBに保持するなりそこから何かのイベントを発火するなりと自由自在に取り扱えます。

まとめ

直近のやり取り等でバウンスの受け取りをどうしたら良いのかといったTwitterのTLの内容を見たこともあり書いてみました。
何かの参考になれば幸いです。

SO TechnologiesではAWSを活用しながら開発したいエンジニアを募集しています。

recruit.so-tech.co.jp