[Serverless ECワークショップ] Step3: SNSを利用して、未払いや注文の通知を社内に送信する

:::note
前のステップ: Amazon EventBridgeのルールを作成して、Stripeからのイベントを受信する
https://qiita.com/hideokamoto/private/61c30ef9c0aa137ac020
:::



もっともシンプルなユースケースは「通知」です。ECサイトでは、さまざまな場面で「社内での通知」を行う必要があります。

- 「商品が売れた、決済が完了した」ことを、商品発送チームに通知する
- 「不正利用と思われる注文があった」ことを、サポートチームに通知する
- 「銀行振込の入金が完了した」ことを、会計チームに通知する
- etc

AWSを使ったシンプルな通知の例として、SNSへの連携を体験してみましょう。EventBridgeとSNSを連携させることで、メールやSMSへの通知や大規模な並列処理を行うためのファンアウトの実点、そしてAWS Chatbotを組み合わせたSlackなどのチャットボット作成などが簡単に作れるようになります。このステップでは、つぎの手順で作業を行います。

　- SNSトピックを作成する
　- 作成済みのEventBridgeルールに、ターゲットを追加する
　- イベントを送信し、通知が届くことを確認する

## 3-1: SNSトピックを作成する

EventBridgeとAWSのサービスを連携するためには、先に連携先のリソースを作成する必要があります。そのため、まずSNSのリソースを作成しましょう。SNSのトップページに、[**トピックの作成**]フォームがあります。「トピックの名前」を入力しましょう。

![スクリーンショット 2024-07-25 16.32.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/828f6c4e-8689-446f-04b0-031017fe4839.png)

今回はワークショップ用ですので、`20240727Workshop`と入力します。入力後、[次のステップ]ボタンをクリックしてください。

![スクリーンショット 2024-07-25 16.32.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/b5783bad-b085-9ba7-2139-220835f3d381.png)

つぎのステップでは、作成するSNSリソースの設定を行います。「SNSへ送信された順番に、通知を送信したい」のような特別な要件がない場合は、デフォルトで選択されている「スタンダード]を選びましょう。

![スクリーンショット 2024-07-25 16.33.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/e26bf53d-4a0a-e8f5-6b51-8cb5a5587cb4.png)

表示名やタグ、トレースの設定が行えますが、オプション機能ですので設定を省略します。最後に[トピックの作成]ボタンをクリックして、SNSのトピックを作成してください。

![スクリーンショット 2024-07-25 16.33.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/f421c4b0-a2b6-e3c6-bcaa-16eb53c295a1.png)

作成に成功すると、SNSトピックの詳細ページに移動します。これでSNSトピックの作成が完了しました。

![スクリーンショット 2024-07-25 16.33.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/9dabf61d-5d8e-7554-95cd-d8349104ed7e.png)

## 3-2: SNSのサブスクリプションを作成する

SNSはEventBridgeと同様に、「イベント / 通知に反応するルール」を設定できます。SNSでは**サブスクリプション**という名前で、メールやSMS・HTTPSリクエストなどで通知の送信先を選べます。ざっくり「トピックに通知が来たかどうかの購読（サブスクリプション）を行い、設定した宛先にそのことを通知する」仕組みだと考えてください。

SNSのサブスクリプションは、SNSトピックの詳細ページから追加できます。ページ中段から下部にある[**サブスクリプション**]へスクロールしてください。**サブスクリプションの作成**ボタンがありますので、クリックしましょう。

![スクリーンショット 2024-07-25 16.33.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/c9e72619-3a73-c07a-68b5-836763bef93d.png)

サブスクリプションの作成画面では、「購読するトピック」と「通知を送信する宛先」の2つを設定します。サブスクリプションをSNSのトピック詳細画面から作成する場合、[**トピックARN**]はすでに設定済みですので、「通知の宛先」だけ設定しましょう。

まず送信方法（プロトコル）を選ぶ必要があります。今回はメールを利用しますので、[**Eメール**]を選択してください。

![スクリーンショット 2024-07-25 16.33.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/2087d6eb-899e-2fab-bea1-c0ed5bdd5db9.png)

その後[**エンドポイント**]へ、**通知を送信したいメールアドレス**を入力します。

:::note warn
SNSの宛先にメールアドレスを設定する場合、サブスクリプション作成・更新時に「メールによる認証」を行う必要があります。そのため、ここで設定するメールアドレスは**ご自身でメールを受信できるメールアドレス**を設定してください。
:::

![スクリーンショット 2024-07-25 16.34.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/27e9cbb5-12fa-dda4-91e7-4ca57f894718.png)

入力後、サブスクリプションを作成すると、サブスクリプション詳細ページに移動します。下のスクリーンショットのような画面・メッセージが表示されていれば作成成功です。

![スクリーンショット 2024-07-25 16.34.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/da509cd3-96df-8ee7-e560-e9f6e4d567c8.png)

登録したメールアドレスで新着メールをチェックしてください。[AWS Notification - Subscription Confirmation]というメールが届いていますので、メール内のURLをクリックして、本人確認を進めましょう。

![スクリーンショット 2024-07-25 16.34.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/2011355f-274d-b897-4583-0f77a07cb3b0.png)

[Subscription confirmed]と表示されているページが表示されていれば、SNSで受信した通知をメールで受け取る準備は完了です。

![スクリーンショット 2024-07-25 16.35.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/d000f167-d6e5-3d32-56f7-bb3fbce4674d.png)

## 3-3: EventBridgeルールに、ターゲットを追加する

SNSが作成できましたので、早速StripeからのイベントをSNSに送れるように、EventBridgeの設定を更新しましょう。EventBridgeのイベントバスページまたは、ルールページから、Step2で作成した`checkout-completed`ルールを開きましょう。

![スクリーンショット 2024-07-26 16.10.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/9394c4c0-bfbe-0486-d8b1-675fe36bf67c.png)

ルールの詳細ページから、[ターゲット]タブを開きます。ここでは、先ほどのステップで作成した「CloudWatch ロググループ」がターゲットとしてすでに登録されていることが確認できます。新しいターゲットとしてSNSを追加するため、[編集]ボタンをクリックしましょう。

![スクリーンショット 2024-07-26 16.10.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/c84d8520-a883-a843-234b-af18f023b5de.png)

編集画面では、ターゲットの追加・更新・削除が行えます。新しくターゲットを追加する場合、[別のターゲットを追加]をクリックしてください。

![スクリーンショット 2024-07-26 16.12.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/0bb2582b-f6d3-1bbe-c36e-f718dadf6e13.png)

ボタンをクリックすると、新しくターゲットを設定するフォームが表示されます。そこで[**ターゲットタイプ**]に[**AWS のサービス**]を選択し、[**ターゲットを選択**]で[**SNS トピック**]を選択してください。するとそのAWSアカウント・リージョンで利用できるSNSトピックを選択する画面が表示されます。

ここで先ほど作成したSNSトピック（`20240727Workshop`）を選択しましょう。

![スクリーンショット 2024-07-26 16.13.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/5bd912e7-cab4-857c-4d81-34b4070e40eb.png)

選択後、新しくルールを追加した際と同じように、タグの設定画面と、確認画面が表示されます。それぞれ[次へ]や[ルールの更新]ボタンをクリックしていくことで、更新が完了します。

## 3-4: 通知メールが届くことを確認する

ターゲットの追加が終われば、接続しているStripeアカウントでテスト注文を行うか、Stripe CLIでイベントを送信しましょう。ターゲットの設定が完了していれば、つぎのようなメールが届くようになります。

![スクリーンショット 2024-07-26 16.18.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/1640ca3b-c09f-c917-318d-64de78258f47.png)



## Step3 まとめ

このようにStripeなどの外部サービスで発生した出来事を、EventBridgeとSNSを利用して、メールやSMSなどで簡単に受信できる構成を作ることができます。具体的な通知シナリオの例については、[AWSのドキュメント](https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-common-scenarios.html)もあわせてご確認ください。

:::note
今回はシンプルな手順で連携を体験する目的で、JSONデータをそのままメールで受信するワークロードを構築しています。実際の業務で利用する場合は、「不正利用の疑いがある注文」や「サブスクリプション更新費用の未払いが発生した場合」などの通知を、手早く実装する際などに有効です。

**「不正利用の疑いがある注文」や「サブスクリプション更新費用の未払いが発生した場合」などの通知を受け取る際に利用する、EventBridgeルールのイベントパターン例:**
```json
{
  "source": [{
    "prefix": "aws.partner/stripe.com"
  }],
  "detail-type": ["review.opened", "invoice.payment_failed"]
}
```
:::

より具体的なメッセージを含む通知を送信したい場合は、つぎのステップで紹介するStep Functionsを利用する方法をお試しください。

## 次のステップ: Step Functionsを利用して、商品ダウンロードリンクを送信する流れを体験する

https://qiita.com/hideokamoto/private/bef67b4320a3b2295c91