3
0

AWS Step FunctionsとAmazon Event Bridgeを使って、プログラムコードを書かずにStripeと連携する

Last updated at Posted at 2023-11-28

2023年11月26日に、AWSがStep Functionsから外部のHTTPS APIをよびだせるようになったとのアナウンスがありました。

ユースケースなどを紹介するブログに、Stripeが紹介されおり、SNSでも「Stripeと連携できる」と話題になっていました。

Stripeと連携するワークフローを手軽に試す

この機能とStripe連携を簡単に試すには、Step Functionsのテンプレートを利用しましょう。

テンプレートからステートマシンを作成する

Step Functionsトップページの[今すぐ始める]をクリックします。

スクリーンショット 2023-11-28 14.57.58.png

Step Functionsのステートマシーン(ワークフロー)を作る方法が選べますので、[テンプレートを選択]を選びましょう。

スクリーンショット 2023-11-28 14.58.06.png

[Stripe]を含むテンプレートが公開されています。今回は[Generate Invoices using Stripe]を選びました。

スクリーンショット 2023-11-28 14.58.27.png

テンプレートでどんなワークフローが実行できるかをプレビューできます。内容を見る限り、次のような作業を自動化しています。

  • 顧客データをまとめて取得(10件)
  • Map Stateで、1顧客ごとに「登録されているカードが有効か」を確認
  • 確認した結果を元に、「請求書を発行するフロー」「カード情報が登録されていないことを知らせるフロー」そして「カードの有効期限が切れていることを知らせるフロー」の3つに分岐
  • 請求書を発行する

スクリーンショット 2023-11-28 15.00.32.png

[デモの実行]を選択した状態で、[テンプレートの使用]ボタンをクリックすると、ワークフロースタジオが読み取り専用で立ち上がります。

スクリーンショット 2023-11-28 15.04.49.png

[デプロイと実行]をクリックすると、CloudFormationを利用して、以下の3リソースが生成されます。

  • IAM Role: Step FunctionsのState Machineを実行するためのロール
  • Step FunctionsのState Machine: ワークフローを実行するためのステートマシーン
  • EventBridgeのConnection: デモ用のStripe APIキーを設定したAPI接続リソース

スクリーンショット 2023-11-28 15.07.16.png

ステートマシンを実行して、動作を確認する

CloudFormationの立ち上げが完了すると、ステートマシンの実行画面が開きます。

スクリーンショット 2023-11-28 15.07.40.png

デモ用のステートマシンは引数を必要としません。そのため、入力の中身などは特に変更せず[実行を開始]ボタンをクリックしましょう。実行中のワークフローを確認する画面に移動します。

スクリーンショット 2023-11-28 15.09.39.png

テストデータの中には、カード情報が登録されていないか、有効期限が切れている顧客データが含まれていることがあります。そのため、[VerifyPaymentMethod]ステップを1件ずつ調べると、card_statusexpiredになっているものなどが確認できます。

スクリーンショット 2023-11-28 15.11.36.png

ステートマシンを変更して、カスタマイズしてみる

[ステートマシンの編集]ボタンをクリックすると、作成済みのステートマシンを編集することができます。ステートマシンを編集して、Stripe APIへのリクエスト内容をカスタマイズしてみましょう。

スクリーンショット 2023-11-28 15.15.22.png

[ListCustomers]ステップを選択すると、右側のパネルにStripeへのAPIリクエスト内容が表示されます。

スクリーンショット 2023-11-28 15.16.15.png

StripeへのGETリクエストをカスタマイズする

StripeへのGETリクエストをカスタマイズするには、APIドキュメントに記載されているパラメータをクエリパラメータで設定します。[ListCustomers(HTTP Endpointステップ)]のパネル下部にある[詳細パラメータ]を開きましょう。

スクリーンショット 2023-11-28 15.18.30.png

クエリパラメータをJSON形式で入力できますので、{"limit": 5}を入力し、[保存]をクリックしましょう。

スクリーンショット 2023-11-28 15.19.18.png

この状態でステートマシンを実行すると、後続のVerifyPaymentMethodステップの実行数が10から5に変わっていることが確認できます。

スクリーンショット 2023-11-28 15.20.13.png

StripeへのPOST / PUTリクエストをカスタマイズする

POSTやPUTリクエストについては、[リクエスト本文]にAPIドキュメントに記載されているパラメータを設定します。テンプレートの[CreateInvoiceAPI]ステップを見てみましょう。このステップには、3つのパラメータが設定されています。

スクリーンショット 2023-11-28 15.22.55.png

呼び出すAPIメソッドによって、パラメータを設定する場所が異なることに注意しましょう。

Stripeアカウントを変更する方法

最後にStripeアカウントをデモ用アカウントから変更する方法を紹介します。Stripe APIを呼び出している、[CreateInvoiceAPI]や[ListCUstomers]、[GetPaymentMethod]ステップのどれかを選択しましょう。選択すると表示される右側のパネルに、[Authentication]セクションがあります。ここにある[View connection]ボタンをクリックすると、API接続設定画面に移動できます。

スクリーンショット 2023-11-28 15.25.39.png

Amazon EventBridgeの[APIの送信先]ページに移動します。Stripeなどの外部APIをStep Functionsから呼び出す場合、この機能を利用して認証情報の管理などが行われています。

スクリーンショット 2023-11-28 15.27.10.png

APIキーを変更するには、[編集ボタン」をクリックしましょう。BASIC認証での[ユーザー名]と[パスワード]を設定する画面が開きます。

スクリーンショット 2023-11-28 15.29.31.png

Stripeのv1 APIは、[skから始まるシークレットAPIキー:]で認証を行います。そのため、[ユーザー名]の情報をシークレットAPIキーに変更し、[パスワード]は空欄で更新しましょう。

接続設定を変更した後にステートマシンを実行すると、APIキーを設定したStripeアカウントに対してAPIリクエストが届くようになります。

スクリーンショット 2023-11-28 15.36.16.png

Stripe APIを呼び出すだけのLambda関数を削減しよう

例えばHTB社のECサイトのように、Step Functionsで在庫や注文・発送管理のワークフローを管理している場合、「在庫の確保・割り当てが出来次第、請求を行う」などのフローが発生します。

スクリーンショット 2023-11-28 15.40.15.png
https://speakerdeck.com/miu_crescent/ecsabisudenostripeshi-zhuang-ling?slide=26

これまでは、「Stripe APIを呼び出すためのLambda関数」を用意して、ステートマシンに追加する必要がありました。しかし今回のアップデートからは、「Stripeなどの外部APIを呼び出すだけの処理」についてもStep Functions (+ EventBridge)にて完結できます。

決済が関係する業務フローを、AWSの力で、より柔軟かつ手軽に自動化しよう

ほとんどの業務において、決済処理・請求処理は欠かすことができない存在です。「依頼された作業の請求処理」や「提供しているAPIの利用量を計測」・「ECサイトの注文・発送処理」など、さまざまな場面で決済やそれに関連する処理・情報が必要です。

StripeとAWSを利用することで、決済が関わる業務や業務フローを、少ないコードでより手軽に自動化・カスタマイズできます。

今回のケースだけでなく、Amazon Redshiftとの連携を行う「Stripe Data Pipeline」など、今後もStripeとAWSを組み合わせて使うことができる製品やユースケースを紹介してまいります。

[Appendix] テンプレートを使わずに、Stripe APIを呼び出す際は、「ヘッダー」に注意

Stripe API(v1)はAPIリクエストをContent-Type: application/x-www-form-urlencodedで受け付けます。しかしStep Functions / EventBridgeから外部APIを呼び出す場合、Content-Type: application/jsonでリクエストが送信されます。そのため、Stripe APIをStep Functionsから呼び出す場合は、[詳細パラメーター > ヘッダー]でContent-Typeの設定を必ず行いましょう。

スクリーンショット 2023-11-28 15.49.09.png

{
  "Content-Type": "application/x-www-form-urlencoded"
}
3
0
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
3
0