2023年11月26日に、AWSがStep Functionsから外部のHTTPS APIをよびだせるようになったとのアナウンスがありました。
ユースケースなどを紹介するブログに、Stripeが紹介されおり、SNSでも「Stripeと連携できる」と話題になっていました。
Stripeと連携するワークフローを手軽に試す
この機能とStripe連携を簡単に試すには、Step Functionsのテンプレートを利用しましょう。
テンプレートからステートマシンを作成する
Step Functionsトップページの[今すぐ始める]をクリックします。
Step Functionsのステートマシーン(ワークフロー)を作る方法が選べますので、[テンプレートを選択]を選びましょう。
[Stripe]を含むテンプレートが公開されています。今回は[Generate Invoices using Stripe]を選びました。
テンプレートでどんなワークフローが実行できるかをプレビューできます。内容を見る限り、次のような作業を自動化しています。
- 顧客データをまとめて取得(10件)
- Map Stateで、1顧客ごとに「登録されているカードが有効か」を確認
- 確認した結果を元に、「請求書を発行するフロー」「カード情報が登録されていないことを知らせるフロー」そして「カードの有効期限が切れていることを知らせるフロー」の3つに分岐
- 請求書を発行する
[デモの実行]を選択した状態で、[テンプレートの使用]ボタンをクリックすると、ワークフロースタジオが読み取り専用で立ち上がります。
[デプロイと実行]をクリックすると、CloudFormationを利用して、以下の3リソースが生成されます。
- IAM Role: Step FunctionsのState Machineを実行するためのロール
- Step FunctionsのState Machine: ワークフローを実行するためのステートマシーン
- EventBridgeのConnection: デモ用のStripe APIキーを設定したAPI接続リソース
ステートマシンを実行して、動作を確認する
CloudFormationの立ち上げが完了すると、ステートマシンの実行画面が開きます。
デモ用のステートマシンは引数を必要としません。そのため、入力の中身などは特に変更せず[実行を開始]ボタンをクリックしましょう。実行中のワークフローを確認する画面に移動します。
テストデータの中には、カード情報が登録されていないか、有効期限が切れている顧客データが含まれていることがあります。そのため、[VerifyPaymentMethod]ステップを1件ずつ調べると、card_status
がexpired
になっているものなどが確認できます。
ステートマシンを変更して、カスタマイズしてみる
[ステートマシンの編集]ボタンをクリックすると、作成済みのステートマシンを編集することができます。ステートマシンを編集して、Stripe APIへのリクエスト内容をカスタマイズしてみましょう。
[ListCustomers]ステップを選択すると、右側のパネルにStripeへのAPIリクエスト内容が表示されます。
StripeへのGETリクエストをカスタマイズする
StripeへのGETリクエストをカスタマイズするには、APIドキュメントに記載されているパラメータをクエリパラメータで設定します。[ListCustomers(HTTP Endpointステップ)]のパネル下部にある[詳細パラメータ]を開きましょう。
クエリパラメータをJSON形式で入力できますので、{"limit": 5}
を入力し、[保存]をクリックしましょう。
この状態でステートマシンを実行すると、後続のVerifyPaymentMethod
ステップの実行数が10から5に変わっていることが確認できます。
StripeへのPOST / PUTリクエストをカスタマイズする
POSTやPUTリクエストについては、[リクエスト本文]にAPIドキュメントに記載されているパラメータを設定します。テンプレートの[CreateInvoiceAPI]ステップを見てみましょう。このステップには、3つのパラメータが設定されています。
呼び出すAPIメソッドによって、パラメータを設定する場所が異なることに注意しましょう。
Stripeアカウントを変更する方法
最後にStripeアカウントをデモ用アカウントから変更する方法を紹介します。Stripe APIを呼び出している、[CreateInvoiceAPI]や[ListCUstomers]、[GetPaymentMethod]ステップのどれかを選択しましょう。選択すると表示される右側のパネルに、[Authentication]セクションがあります。ここにある[View connection]ボタンをクリックすると、API接続設定画面に移動できます。
Amazon EventBridgeの[APIの送信先]ページに移動します。Stripeなどの外部APIをStep Functionsから呼び出す場合、この機能を利用して認証情報の管理などが行われています。
APIキーを変更するには、[編集ボタン」をクリックしましょう。BASIC認証での[ユーザー名]と[パスワード]を設定する画面が開きます。
Stripeのv1 APIは、[skから始まるシークレットAPIキー:
]で認証を行います。そのため、[ユーザー名]の情報をシークレットAPIキーに変更し、[パスワード]は空欄で更新しましょう。
接続設定を変更した後にステートマシンを実行すると、APIキーを設定したStripeアカウントに対してAPIリクエストが届くようになります。
Stripe APIを呼び出すだけのLambda関数を削減しよう
例えばHTB社のECサイトのように、Step Functionsで在庫や注文・発送管理のワークフローを管理している場合、「在庫の確保・割り当てが出来次第、請求を行う」などのフローが発生します。
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の設定を必ず行いましょう。
{
"Content-Type": "application/x-www-form-urlencoded"
}