Lambdaの通知を受け取るための準備方法
Lambdaでアラート通知を送りたいときによく使うのが Amazon SNS です。
たとえば、アービトラージ監視や価格差チェックの結果をメールで受け取りたい場合、LambdaからSNSへ通知を送る構成がわかりやすくて便利です。
ただし、このとき大事なのは、
SNSのトピックとサブスクリプションを先に作成しておくこと です。
Lambdaは通知メッセージをSNSへ送るだけなので、
その通知を受け止めるSNS側の設定がまだ無いと、通知先が存在しない状態になってしまいます。
この記事では、AWSコンソールから SNSトピック と サブスクリプション を作成する手順を、初心者向けにやさしくまとめます。
まず結論
先に作るのは「トピック」、その次が「サブスクリプション」
SNSで通知を使うときの流れは次の通りです。
- トピックを作成する
- サブスクリプションを作成する
- Lambdaからそのトピックへ通知を送る
イメージとしては、
- トピック:通知の受け皿
- サブスクリプション:誰がどう受け取るか
- Lambda:通知文を送る側
です。
SNSトピックとは?
SNSトピックは、通知メッセージを集めるための箱のようなものです。
たとえば Lambda が
- シグナル発生
- 異常検知
- 処理完了
といったメッセージを送ると、そのメッセージはいったん SNSトピック に入ります。
ただし、トピックを作っただけでは、まだ誰にも通知されません。
そこで必要になるのが サブスクリプション です。
サブスクリプションとは?
サブスクリプションは、
そのトピックの通知を、どこへ、どの方法で届けるか
を決める設定です。
たとえば、
- メールで受け取る
- HTTPエンドポイントへ送る
- SQSへ流す
といった設定ができます。
初心者が一番わかりやすいのは、まず メール通知 です。
1. SNSトピックを作成する
まず AWS マネジメントコンソールで Amazon SNS を開き、
トピックの作成 を選びます。
タイプは「スタンダード」でOK
作成画面では、最初にトピックタイプを選びます。
画面には
- FIFO
- スタンダード
がありますが、通常のLambda通知なら スタンダード を選べば大丈夫です。
スタンダードは、一般的な通知用途に向いています。
アービトラージ監視やLambdaの実行結果通知なら、まずはこちらで問題ありません。
FIFOは順序保証などが必要な特殊なケース向けなので、最初は気にしなくて大丈夫です。
名前を入力する
次に、トピック名を入力します。
たとえば、次のような名前がわかりやすいです。
mizuho-pair-monitor-topicfx-alert-topicarbitrage-signal-topic
あとから見ても役割がわかる名前にしておくのがおすすめです。
表示名は任意
表示名はオプションです。
メール通知などで見た目を整えたいときに使いますが、最初は空欄でも大丈夫です。
暗号化やアクセスポリシーは最初はそのままでOK
作成画面には、
- 暗号化
- アクセスポリシー
- アーカイブポリシー
- 配信ステータスのログ記録
- タグ
- アクティブトレース
などがあります。
最初の構築では、これらは 基本的にデフォルトのままでOK です。
まずは通知が届く状態を作ることを優先します。
「トピックの作成」を押す
設定できたら、右下の 「トピックの作成」 を押します。
これでSNSトピックが作成されます。
2. 作成したトピックのARNを確認する
トピックを作成すると、トピックARN という長い識別子が表示されます。
これは、Lambdaが「どのSNSトピックに通知するか」を指定するときに使う大事な情報です。
たとえばLambda側では、このARNを
- 環境変数に入れる
- コード内で参照する
という形で使うことが多いです。
つまり、トピックを作成したらARNを控えておく のがポイントです。
3. サブスクリプションを作成する
次に、作成したトピックに対して サブスクリプション を作ります。
SNSコンソールで サブスクリプションの作成 を選びます。
トピックARNを選ぶ
まず、通知をぶら下げる先の トピックARN を指定します。
ここでは、先ほど作成したトピックを選びます。
つまり、
このサブスクリプションは、このトピックの通知を受け取ります
という設定です。
プロトコルを選ぶ
次に、通知の受け取り方法を選びます。
初心者向けで一番わかりやすいのは Email です。
メールでアラートを受け取りたいなら、プロトコルで Email を選択します。
エンドポイントを入力する
プロトコルで Email を選んだ場合、
次に 通知を受け取るメールアドレス を入力します。
たとえば、自分の普段使っているメールアドレスを入れればOKです。
「サブスクリプションの作成」を押す
入力できたら 「サブスクリプションの作成」 を押します。
これでサブスクリプション自体は作成されます。
ただし、この時点ではまだ完了ではありません。
4. メールを確認して承認する
Emailプロトコルで作成した場合、入力したメールアドレス宛に 確認メール が届きます。
そのメールの中にある Confirm subscription のリンクを押して、承認します。
この承認をしないと、SNSの通知は届きません。
ここは初心者が見落としやすいポイントです。
「サブスクリプションを作ったのに通知が来ない」という場合は、確認メールをまだ承認していないことがよくあります。
5. 作成後の状態を確認する
サブスクリプション一覧で、状態が Confirmed(確認済み) になっていればOKです。
もし未確認のままなら、通知はまだ届きません。
必ずメール承認まで終えておきます。
Lambdaとのつながりはどうなる?
ここまでできると、流れは次のようになります。
- Lambdaが実行される
- LambdaがSNSトピックへ通知を送る
- SNSトピックにぶら下がっているサブスクリプションが通知を受ける
- メールアドレスへ通知が届く
つまり、Lambdaは直接メールを送るのではなく、
SNSトピックに投げて、SNSが配信してくれる という構成です。
まとめ
SNSのトピックとサブスクリプションは、
Lambdaから通知を送る前に事前作成しておく必要があります。
順番としては次の通りです。
- 先に SNSトピック を作成する
- 次に、そのトピックに対する サブスクリプション を作成する
- Emailなら、届いた確認メールで 承認 する
- その後、Lambda側に トピックARN を設定する
この準備をしておけば、Lambdaからの通知をメールなどで受け取れるようになります。
特に最初は、
- トピック:スタンダード
- サブスクリプション:Email
の構成がシンプルでわかりやすく、おすすめです。