前のステップ: StripeとAmazon EventBridgeを連携する
イベントバスで受信したイベントは、「必ず全て利用する」とは限りません。例えばECサイトでは、次のような「実行条件」を設定する場面が考えられます。
- 「商品の注文が完了した」場合
- 「クレジットカード決済が失敗した」場合
- 「購入金額が高額である」場合
このような実行条件をEventBridgeのルールで設定する方法を体験しましょう。まずはStep1で作成したイベントバスのページを開きます。その後、[ルールを作成]ボタンをクリックして、ルールの作成フォームを開きましょう。
EventBrirdgeのルールを作成することで、イベントに対するワークロードやその実行条件を設定できます。ルールには名前が必要ですので、checkout-completed
と入力しましょう。その他の設定は変更せず、[次へ]をクリックします。
続いてイベントパターンの設定フォームに移動します。ここでは、「どんなイベント」「どんなデータ」に対してワークロードを実行するかの「実行条件」を定義します。
このページでは、次の機能が利用できます。
項目名 | 設定内容 | 選択肢または入力例など |
---|---|---|
イベントソース | どこから送信されたイベントの実行条件を作るかを設定する。 |
|
サンプルイベント | 作成した実行条件のJSONをテストするためのデータを、作成または入力する。 | {{JSONファイル}} |
作成のメソッド | 実行条件のJSONファイルを生成する方法を選択する。 |
|
イベントパターン | 実行条件のJSONを実際に生成するフォーム | {{JSONファイル}} |
Stripeは「EventBridgeパートナー」ですので、[イベントソース]はAWSイベントまたはEventBridgeパートナーイベントを選択しましょう。
サンプルイベントは、イベントパターンで作成した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は有効です]と表示されいれば、サンプルイベントの設定は完了です。
サンプルイベントは、イベントパターンの設定をテストする用途で利用します。そのため、作成済みのイベントルールを複製・編集する場合など、イベントパターンの設定を変更しない場合にはスキップできます。
サンプルデータを設定しましたので、実行条件を定義するイベントパターンを作りましょう。ここではJSON形式でフィルターする条件などを設定します。Stripeなどのパートナーイベントソースを使う場合、作成のメソッドはパターンフォームを使用するを選びます。
イベントパターンでは「AWS内部のイベント」と「パートナーからのイベント」で設定がすこし変わります。パートナーからのイベントでは、イベントソースをEventBridge パートナーを選びましょう。その後、パートナー欄にてStripeを検索して選んでください。
最後にイベントタイプを設定します。ここではSaaSやAWSリソースから送信されてくるイベントの種類を選びます。今回はStripeからの「注文完了イベント」を受信してみたいと思いますので、検索欄にcheckoutと入力し、Checkout Session completedを選んでください。
Checkout Session completedを選択すると、右側のイベントパターンにJSONが表示されます。
作成したイベントパターンで、意図したイベントを受信できるかをテストするには、テストパターンボタンをクリックします。テストデータとパターンが一致していれば、スクリーンショットのように成功メッセージが表示されます。もしエラーメッセージが表示された場合は、テストデータとパターンそれぞれに入力ミスがないかを確認しましょう。
パターンのテストに成功していれば、[次へ]をクリックします。次のステップでは、「受信したイベントをどこに送信するか」を設定します。イベントの送信先には、「別のイベントバス」「外部のAPI(EventBridge APIの宛先機能を利用)」そして「AWSのサービス」が選べます。
まずはどんなイベントが届いているかなどを簡単に確認するため、CloudWatch Logsにログを出力してみましょう。はじめに、ターゲットタイプでAWS のサービスを選択します。すると「どのAWSサービスにイベントを送信するか」を選ぶフォームが表示されます。ここで「CloudWatch ロググループ」を選びましょう。
ターゲットでCloudWatch ロググループを選択すると、「どのロググループにログを出力するか」を設定するフォームが表示されます。今回は新しくロググループを作成しますので、/aws/events/
の後ろにある20240707-workshop
と入力してください。グループ名を入力したら、[次へ]をクリックしましょう。
続いてタグ作成画面が表示されます。今回はタグを使用しませんので、そのまま[次へ]をクリックしてください。
最後に作成するルールのレビューを行います。イベントパターンやターゲットなどの設定が間違っていないか確認して、[ルールの作成]をクリックしましょう。
作成に成功すれば、ルール一覧画面にpayment-log
ルールが追加されています。
作成したルールのテストを行う
ワークショップ当日は、次の2つの方法でテストを実施します。
- 講師から一斉にイベントを配信する
- 注文URLから個別にイベントを発火する
個別のタイミングでイベントの送信やルールのテストを行いたい方は、以下のURLからテスト注文を実施してください。
https://buy.stripe.com/test_14k8zA7GS4o5bHqcMN
入力例
- メールアドレス:
{任意の文字列}@example.com
- クレジットカード番号:
4242424242424242
- 有効期限:
12
/27
- セキュリティコード:
123
イベントの送信後、CloudWatchのロググループを確認しましょう。作成したイベントパターンと同じdetail-type
のイベントログが出力されていれば、接続成功です。
Amazon EventBridgeを利用することで、AWSサービスだけでなく外部のSaaSで発生したイベントについても、専用のAPIやバッチ処理を作ることなく、連携の設定を行うことができます。
次のステップでは、「商品の注文が終わった後のワークロード」をテーマに、EventBridgeからさまざまなAWSサービスを連携させていきます。
[読み物] Stripeからのイベントを効率的にテスト送信する方法
作成したイベントのテストを行うには、Stripeからイベントを送信する必要があります。もっとも直感的なテスト方法は、テスト環境を使って、注文フローを実際に操作することです。この方法であれば、実際の顧客が行った操作に基づいてイベントが送信されます。
しかしイベントパターンのフィルター条件を細かくテストする場合などでは、毎回注文操作を行うのは非効率です。そこでStripeでは、ブラウザやCLIからテスト用のイベントを送信する機能を用意しています。
Stripe CLI(ブラウザ上ではStripe Shell)を使うことで、ダミーのイベントを送信できます。ルールを作成する際に設定したサンプルデータと同じ種類のイベントを送信するには、次のコマンドを実行しましょう。
stripe trigger checkout.session.completed
また、「一度送信したイベントを、もう一度送信したい」場合は、Stripe CLIで再送信できます。
stripe events resend evt_xxx
次のステップ: Step3: SNSを利用して、未払いや注文の通知を社内に送信する