AWS SAM × FastAPI × Stripe × Cognito で作るミニマルSaaS構築ガイド
この記事では、AWS SAM(Serverless Application Model)と FastAPI を用いた「SaaSスターターキット」の構築手順を詳しく解説します。Stripeによる課金機能、Cognitoによるユーザー認証を組み合わせ、最小構成で立ち上げ・収益化可能なSaaSの基盤を作成します。
✅ 概要
本構成は以下の技術スタックで構成されています:
要素 | 使用技術 |
---|---|
APIバックエンド | FastAPI(Python) |
認証 | AWS Cognito |
課金 | Stripe(Subscription) |
インフラ構築/デプロイ | AWS SAM(Lambda + API Gateway) |
このスターターキットは以下のニーズを満たすことを目的としています:
- 初期コストを抑えて高速に立ち上げたい
- 認証・課金を自動化したSaaSを作りたい
- ローカル開発と本番環境を統一したい
📁 ディレクトリ構成とファイル説明
.
├── README.md # 概要説明
├── template.yaml # SAMテンプレート
├── src
│ ├── app
│ │ ├── main.py # FastAPI エントリポイント
│ │ ├── auth.py # 認証(Cognito JWT検証)
│ │ └── billing.py # Stripe課金処理
│ └── requirements.txt # 依存パッケージ
├── events
│ └── event.json # ローカルテスト用
├── tests
│ └── test_main.py # テストコード(未実装)
🚀 ステップバイステップ解説
① 環境準備
- Python 3.9+
- AWS CLI, AWS SAM CLI
- Stripeアカウント(テスト用でも可)
インストール:
brew install aws-sam-cli
pip install fastapi uvicorn stripe
② FastAPIアプリの作成(src/app/main.py
)
from fastapi import FastAPI, Depends
from .auth import verify_token
from .billing import create_checkout_session
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello from SaaS Starter"}
@app.get("/secure")
def secure_endpoint(user=Depends(verify_token)):
return {"message": f"Authenticated as {user['email']}"}
@app.post("/billing")
def billing():
session_url = create_checkout_session()
return {"url": session_url}
③ Stripe課金の実装(billing.py
)
import stripe
import os
stripe.api_key = os.environ.get("STRIPE_SECRET_KEY", "sk_test_...")
def create_checkout_session():
session = stripe.checkout.Session.create(
payment_method_types=["card"],
mode="subscription",
line_items=[{
"price": "price_1234567890abcdef",
"quantity": 1
}],
success_url="https://example.com/success",
cancel_url="https://example.com/cancel",
)
return session.url
ここでの price_1234567890abcdef
は Stripe ダッシュボードで事前に作成したサブスクリプション価格IDです。
④ 認証処理(auth.py
)
# 仮の認証(開発中はモック)
def verify_token():
return {"email": "test@example.com"} # 開発中は固定で返す
本番では Cognito JWTトークンを pycognito
や python-jose
を使って検証します。
⑤ SAM テンプレート(template.yaml
)
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
AppFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: src/
Handler: app.main.app
Runtime: python3.9
Events:
ApiRoot:
Type: Api
Properties:
Path: /
Method: get
Secure:
Type: Api
Properties:
Path: /secure
Method: get
Billing:
Type: Api
Properties:
Path: /billing
Method: post
✅ デプロイ手順
sam build
sam deploy --guided
テスト:
sam local invoke "AppFunction" -e events/event.json
💰 マネタイズ戦略に組み込むには?
このスターターは以下の応用が可能です:
- レポート生成API(CSV → PDF)
- データ分析結果の月額課金提供
- API呼び出し回数での従量課金
Stripeの webhook
を連携させれば、ユーザー解約検知や課金失敗対応も自動化可能です。
📚 参考文献
🔁 まとめ
このスターターをもとに「最小構成 → MVP → 自動化・課金 → 拡張展開」という成長パスを辿ることができます。テンプレ化・再利用しやすい構成なので、次のSaaSも簡単に派生可能です。
コメント