StripeのWebhookエンドポイント用のAWS lambdaファンクションをsam localでデバッグした際にタイムアウトエラーが発生したため、その対応についての備忘録。
問題
sam localでStripeのWebhookエンドポイントのlambdaファンクションをデバッグする際、予め用意しておいたStripeイベントデータをpayloadとして利用すると、stripe.Webhook.construct_event()
の呼び出しで
Timestamp outside the tolerance zone (xxxxx)
のようなタイムスタンプが許容範囲外(タイムアウト)である旨のエラーが発生する。
原因
construct_event()
のタイムスタンプ誤差の許容範囲がデフォルトではDEFAULT_TOLERANCE(300秒)
になっているため、予め用意しておいたイベントデータを使用すると容易にタイムアウトしてしまう。
Stripe APIのWebhookクラスの定義:
対応
デバッグ時はconstruct_event()
のtolerance
パラメータにタイムアウトにならない値を設定する(例では9999999秒)。
この設定が運用環境で行われないように十分ご注意ください(At your own risk)。
stripe_event = stripe.Webhook.construct_event(
payload=payload,
sig_header=sig_header,
secret=stripe_webhook_secret,
tolerance=9999999
)
以上です。