Stripe決済通知をSlackに自動送信: Stripe Notification Construct for AWS CDK
Stripeの決済イベントをEventBridge経由で受け取り、Lambda関数で処理してSlackに通知を送信するAWS CDKコンストラクトライブラリです。
開発の背景
Stripeを使ったプロジェクトで、決済完了をリアルタイムで把握したいという要件がありました。StripeのEventBridge統合を使えば実現できそうでしたが、既存のコンストラクトライブラリを探しても、Stripe APIを呼び出して詳細情報を取得し、フォーマットされたSlack通知を送るものは見つかりませんでした。
そこで、自分で実装することにしました。EventBridgeから受け取ったイベントをLambda関数で処理し、Stripe APIから追加の詳細情報を取得して、AWS Chatbot経由でSlackに通知を送る仕組みを構築しました。
アーキテクチャ
Stripe → EventBridge → Lambda → SNS → AWS Chatbot → Slack
- Stripeが決済イベントをEventBridgeに送信
- EventBridgeルールがLambda関数をトリガー
- Lambda関数がStripe APIを呼び出して詳細情報を取得
- フォーマットされたメッセージをSNSに送信
- AWS ChatbotがSlackに通知を配信
実装のポイント
TypeScriptでの型安全性
StripeのイベントデータやAPIレスポンスに対して、完全な型定義を提供しています。開発時に型チェックが効くので、実行時エラーを減らせます。
セキュリティを考慮した設計
StripeのAPIキーは、環境変数に直接書くのではなく、AWS Secrets ManagerやSSM Parameter Storeから取得する設計にしています。本番環境での使用を想定し、セキュリティベストプラクティスに従っています。
多言語対応
通知メッセージは日本語と英語の両方に対応しています。notificationLanguageプロパティで切り替え可能です。
環境ごとの切り替え
テスト環境と本番環境で異なるStripeアカウントを使い分けられるよう、environmentプロパティで環境を指定できます。
使用例
import * as cdk from 'aws-cdk-lib';
import { StripeCheckoutHandler } from 'cdk-stripe-slack-notification';
const stack = new cdk.Stack(app, 'MyStack');
new StripeCheckoutHandler(stack, 'StripeNotification', {
environment: 'production',
snsTopicArn: 'arn:aws:sns:us-west-2:123456789:my-slack-topic',
stripeSecretKeyFromSecretsManager: {
secretArn: 'arn:aws:secretsmanager:us-west-2:123456789:secret:stripe/secret-key',
},
stripeAccountName: 'MyCompany',
notificationLanguage: 'ja',
});
技術スタック
- AWS CDK: インフラストラクチャの定義
- TypeScript: 型安全な開発
- AWS Lambda: イベント処理
- Stripe API: 決済情報の取得
- AWS EventBridge: イベントルーティング
- AWS SNS: メッセージ配信
- AWS Chatbot: Slack連携
対応イベント
checkout.session.completed: チェックアウトセッション完了時checkout.session.async_payment_succeeded: 非同期決済成功時
通知内容
Slackに送信される通知には、以下の情報が含まれます:
- チェックアウトセッションID
- 決済インテントID
- 注文詳細(商品名、数量、金額など)
- Stripeダッシュボードへの直接リンク
- イベントタイプ
- 環境情報(テスト/本番)
Related Tools & Apps
cdk-construct-stripe-events-to-sns
I have developed a CDK Construct library for receiving Stripe payment events via AWS EventBridge and sending notifications to an SNS topic. This design reduces costs and latency by sending notifications directly from EventBridge to SNS without using Lambda functions.
stripe-pwa-elements
Stripe payment Web Components that work with any web framework. Integrate card payments, Apple Pay, Google Pay, Payment Element and more using simple HTML tags. Built on Stencil.js for framework-agnostic usage, with PWA and Capacitor support.
stripe-search-ql
A TypeScript query builder for constructing Stripe Search API queries with type safety. Eliminate bugs caused by hand-written query strings using a fluent, chainable API that improves developer productivity.
