This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

[Serverless ECワークショップ] Step2: Amazon EventBridgeのルールを作成して、Stripeからのイベントを受信する

Last updated at Posted at 2024-07-26

前のステップ: StripeとAmazon EventBridgeを連携する

https://qiita.com/hideokamoto/private/8750d9b9b6e675074979

イベントバスで受信したイベントは、「必ず全て利用する」とは限りません。例えばECサイトでは、次のような「実行条件」を設定する場面が考えられます。

  • 「商品の注文が完了した」場合
  • 「クレジットカード決済が失敗した」場合
  • 「購入金額が高額である」場合

このような実行条件をEventBridgeのルールで設定する方法を体験しましょう。まずはStep1で作成したイベントバスのページを開きます。その後、[ルールを作成]ボタンをクリックして、ルールの作成フォームを開きましょう。

スクリーンショット 2024-07-24 16.30.14.png

EventBrirdgeのルールを作成することで、イベントに対するワークロードやその実行条件を設定できます。ルールには名前が必要ですので、checkout-completedと入力しましょう。その他の設定は変更せず、[次へ]をクリックします。

スクリーンショット 2024-07-24 16.31.28.png

続いてイベントパターンの設定フォームに移動します。ここでは、「どんなイベント」「どんなデータ」に対してワークロードを実行するかの「実行条件」を定義します。

スクリーンショット 2024-07-24 16.33.41.png

このページでは、次の機能が利用できます。

項目名 設定内容 選択肢または入力例など
イベントソース どこから送信されたイベントの実行条件を作るかを設定する。
  • AWSイベントまたはEventBridgeパートナーイベント: イベントパターンフォームによる実行条件の作成ができる
  • その他: 汎用的。ただし実行条件の設定はJSONで作成する必要がある
  • 全てのイベント: 受信した全てのイベントを利用するため、事前にフィルターされている時以外はお勧めしない
サンプルイベント 作成した実行条件のJSONをテストするためのデータを、作成または入力する。 {{JSONファイル}}
作成のメソッド 実行条件のJSONファイルを生成する方法を選択する。
  • スキーマを使用する
  • パターンフォームを使用する
  • カスタムパターン
イベントパターン 実行条件のJSONを実際に生成するフォーム {{JSONファイル}}

Stripeは「EventBridgeパートナー」ですので、[イベントソース]はAWSイベントまたはEventBridgeパートナーイベントを選択しましょう。

スクリーンショット 2024-07-24 16.47.37.png

サンプルイベントは、イベントパターンで作成したJSONのテストに利用するデータを設定します。今回のワークショップでは、次のJSONをコピーアンドペーストして利用しましょう。


{
  "version": "0",
  "id": "3775044a-48d2-d33d-40ec-3da1968a37d0",
  "detail-type": "checkout.session.completed",
  "source": "aws.partner/stripe.com/ed_test_xxxx",
  "account": "0123456789",
  "time": "2024-07-24T05:50:57Z",
  "region": "ap-northeast-1",
  "resources": [
      "arn:aws:events:ap-northeast-1::event-source/aws.partner/stripe.com/ed_test_xxxx"
  ],
  "detail": {
    "id": "evt_1PfzlZAc3DKpkL1XjAnehZ0z",
    "object": "event",
    "api_version": "2020-08-27",
    "created": 1721806661,
    "data": {
      "object": {
        "id": "cs_test_a1GIRqgheIxzNduCfkOylpYmB2Oi5k511U48U98VFkG8zD44SGt6pJjpzu",
        "object": "checkout.session",
        "after_expiration": null,
        "allow_promotion_codes": null,
        "amount_subtotal": 3000,
        "amount_total": 3000,
        "automatic_tax": {
          "enabled": false,
          "liability": null,
          "status": null
        },
        "billing_address_collection": null,
        "cancel_url": "https://httpbin.org/post",
        "client_reference_id": null,
        "client_secret": null,
        "consent": null,
        "consent_collection": null,
        "created": 1721806659,
        "currency": "jpy",
        "currency_conversion": null,
        "custom_fields": [],
        "custom_text": {
          "after_submit": null,
          "shipping_address": null,
          "submit": null,
          "terms_of_service_acceptance": null
        },
        "customer": null,
        "customer_creation": "if_required",
        "customer_details": {
          "address": {
            "city": "South San Francisco",
            "country": "US",
            "line1": "354 Oyster Point Blvd",
            "line2": null,
            "postal_code": "94080",
            "state": "CA"
          },
          "email": "stripe@example.com",
          "name": "Jenny Rosen",
          "phone": null,
          "tax_exempt": "none",
          "tax_ids": []
        },
        "customer_email": null,
        "expires_at": 1721893059,
        "invoice": null,
        "invoice_creation": {
          "enabled": false,
          "invoice_data": {
            "account_tax_ids": null,
            "custom_fields": null,
            "description": null,
            "footer": null,
            "issuer": null,
            "metadata": {},
            "rendering_options": null
          }
        },
        "livemode": false,
        "locale": null,
        "metadata": {},
        "mode": "payment",
        "payment_intent": "pi_3PfzlYAc3DKpkL1X1M2xlKV4",
        "payment_link": null,
        "payment_method_collection": "if_required",
        "payment_method_configuration_details": {
          "id": "pmc_1PSXX2Ac3DKpkL1XuKK58VG4",
          "parent": null
        },
        "payment_method_options": {
          "card": {
            "request_three_d_secure": "automatic"
          }
        },
        "payment_method_types": [
          "card",
          "link"
        ],
        "payment_status": "paid",
        "phone_number_collection": {
          "enabled": false
        },
        "recovered_from": null,
        "saved_payment_method_options": null,
        "setup_intent": null,
        "shipping": null,
        "shipping_address_collection": null,
        "shipping_options": [],
        "shipping_rate": null,
        "status": "complete",
        "submit_type": null,
        "subscription": null,
        "success_url": "https://httpbin.org/post",
        "total_details": {
          "amount_discount": 0,
          "amount_shipping": 0,
          "amount_tax": 0
        },
        "ui_mode": "hosted",
        "url": null
      }
    },
    "livemode": false,
    "pending_webhooks": 0,
    "request": {
      "id": null,
      "idempotency_key": null
    },
    "type": "checkout.session.completed"
  }
}

[JSONは有効です]と表示されいれば、サンプルイベントの設定は完了です。

スクリーンショット 2024-07-25 14.46.51.png

サンプルイベントは、イベントパターンの設定をテストする用途で利用します。そのため、作成済みのイベントルールを複製・編集する場合など、イベントパターンの設定を変更しない場合にはスキップできます。

サンプルデータを設定しましたので、実行条件を定義するイベントパターンを作りましょう。ここではJSON形式でフィルターする条件などを設定します。Stripeなどのパートナーイベントソースを使う場合、作成のメソッドパターンフォームを使用するを選びます。

スクリーンショット 2024-07-25 14.50.23.png

イベントパターンでは「AWS内部のイベント」と「パートナーからのイベント」で設定がすこし変わります。パートナーからのイベントでは、イベントソースEventBridge パートナーを選びましょう。その後、パートナー欄にてStripeを検索して選んでください。

スクリーンショット 2024-07-25 14.50.32.png

最後にイベントタイプを設定します。ここではSaaSやAWSリソースから送信されてくるイベントの種類を選びます。今回はStripeからの「注文完了イベント」を受信してみたいと思いますので、検索欄にcheckoutと入力し、Checkout Session completedを選んでください。

スクリーンショット 2024-07-25 14.53.03.png

Checkout Session completedを選択すると、右側のイベントパターンにJSONが表示されます。

スクリーンショット 2024-07-25 14.53.58.png

作成したイベントパターンで、意図したイベントを受信できるかをテストするには、テストパターンボタンをクリックします。テストデータとパターンが一致していれば、スクリーンショットのように成功メッセージが表示されます。もしエラーメッセージが表示された場合は、テストデータとパターンそれぞれに入力ミスがないかを確認しましょう。

スクリーンショット 2024-07-25 14.58.49.png

パターンのテストに成功していれば、[次へ]をクリックします。次のステップでは、「受信したイベントをどこに送信するか」を設定します。イベントの送信先には、「別のイベントバス」「外部のAPI(EventBridge APIの宛先機能を利用)」そして「AWSのサービス」が選べます。

スクリーンショット 2024-07-25 14.59.59.png

まずはどんなイベントが届いているかなどを簡単に確認するため、CloudWatch Logsにログを出力してみましょう。はじめに、ターゲットタイプAWS のサービスを選択します。すると「どのAWSサービスにイベントを送信するか」を選ぶフォームが表示されます。ここで「CloudWatch ロググループ」を選びましょう。

スクリーンショット 2024-07-25 15.03.16.png

ターゲットでCloudWatch ロググループを選択すると、「どのロググループにログを出力するか」を設定するフォームが表示されます。今回は新しくロググループを作成しますので、/aws/events/の後ろにある20240707-workshopと入力してください。グループ名を入力したら、[次へ]をクリックしましょう。

スクリーンショット 2024-07-25 15.05.43.png

続いてタグ作成画面が表示されます。今回はタグを使用しませんので、そのまま[次へ]をクリックしてください。

スクリーンショット 2024-07-25 15.06.27.png

最後に作成するルールのレビューを行います。イベントパターンやターゲットなどの設定が間違っていないか確認して、[ルールの作成]をクリックしましょう。

スクリーンショット 2024-07-25 15.06.32.png

作成に成功すれば、ルール一覧画面にpayment-logルールが追加されています。

スクリーンショット 2024-07-25 15.08.03.png

作成したルールのテストを行う

ワークショップ当日は、次の2つの方法でテストを実施します。

  • 講師から一斉にイベントを配信する
  • 注文URLから個別にイベントを発火する

個別のタイミングでイベントの送信やルールのテストを行いたい方は、以下のURLからテスト注文を実施してください。

https://buy.stripe.com/test_14k8zA7GS4o5bHqcMN

入力例

  • メールアドレス: {任意の文字列}@example.com
  • クレジットカード番号: 4242424242424242
  • 有効期限: 12/27
  • セキュリティコード: 123

イベントの送信後、CloudWatchのロググループを確認しましょう。作成したイベントパターンと同じdetail-typeのイベントログが出力されていれば、接続成功です。

スクリーンショット 2024-07-25 15.40.35.png

Amazon EventBridgeを利用することで、AWSサービスだけでなく外部のSaaSで発生したイベントについても、専用のAPIやバッチ処理を作ることなく、連携の設定を行うことができます。

次のステップでは、「商品の注文が終わった後のワークロード」をテーマに、EventBridgeからさまざまなAWSサービスを連携させていきます。

[読み物] Stripeからのイベントを効率的にテスト送信する方法
作成したイベントのテストを行うには、Stripeからイベントを送信する必要があります。もっとも直感的なテスト方法は、テスト環境を使って、注文フローを実際に操作することです。この方法であれば、実際の顧客が行った操作に基づいてイベントが送信されます。

しかしイベントパターンのフィルター条件を細かくテストする場合などでは、毎回注文操作を行うのは非効率です。そこでStripeでは、ブラウザやCLIからテスト用のイベントを送信する機能を用意しています。

Stripe CLI(ブラウザ上ではStripe Shell)を使うことで、ダミーのイベントを送信できます。ルールを作成する際に設定したサンプルデータと同じ種類のイベントを送信するには、次のコマンドを実行しましょう。

stripe trigger checkout.session.completed 

スクリーンショット 2024-07-25 15.37.46.png

また、「一度送信したイベントを、もう一度送信したい」場合は、Stripe CLIで再送信できます。

stripe events resend evt_xxx

次のステップ: Step3: SNSを利用して、未払いや注文の通知を社内に送信する

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up