【第5回】デプロイと収益化編:AWS/VercelへのデプロイとStripe連携
はじめに
LLMアプリケーション開発連載、いよいよ最終回です。これまでの4回で、私たちはLLMアプリの「頭脳」(RAG)、「手足」(Function Calling)、そして「顔」(チャットUI)を構築してきました。
しかし、どんなに素晴らしいアプリも、ユーザーに届き、ビジネスとして成立しなければ、その真の価値を発揮することはできません。本記事では、これまで開発してきたLLMアプリケーションを、実際に公開し、収益化するための最後のステップを解説します。
具体的には、以下の内容をハンズオン形式で進めます。
- Next.jsフロントエンドのVercelへのデプロイ
- FastAPIバックエンドのAWS Lambdaへのデプロイ
- Stripe Checkoutを組み込んだ課金機能の実装
この記事を読み終える頃には、あなたのLLMアプリは、世界中のユーザーに価値を届け、収益を生み出す準備が整っているでしょう。さあ、あなたのアイデアをビジネスへと昇華させましょう!
1. LLMアプリケーションのデプロイ戦略
フロントエンドとバックエンドで最適なデプロイ先を選定します。
1.1 フロントエンド (Next.js) のVercelへのデプロイ
Next.jsの開発元であるVercelへのデプロイは、最も簡単かつ最適です。GitHubリポジトリと連携することで、コードのプッシュをトリガーに自動でデプロイが実行されるCI/CDが構築されます。
- GitHubリポジトリの作成: Next.jsプロジェクトをGitHubにプッシュします。
- Vercelへのインポート: Vercelダッシュボードにログインし、
[Add New...]
->[Project]
からGitHubリポジトリをインポートします。 - 環境変数の設定: Vercelのプロジェクト設定で、
FASTAPI_BACKEND_URL
環境変数を、デプロイ後のFastAPIバックエンドのURLに設定します。
1.2 バックエンド (FastAPI) のAWS Lambdaへのデプロイ
FastAPIバックエンドは、サーバーレスでスケーラブルなAWS Lambdaにデプロイします。Mangum
とServerless Framework
を組み合わせることで、PythonのASGIアプリケーションをLambdaで簡単に実行できます。
- Serverless Frameworkのインストール:
npm install -g serverless
- AWS CLIの設定: AWSの認証情報が設定されていることを確認します。
-
serverless.yml
の作成: プロジェクトルートに以下のファイルを作成します。“`yaml:serverless.yml
service: llm-rag-apiprovider:
name: aws
runtime: python3.11
region: ap-northeast-1 # デプロイするAWSリージョン
stage: dev
memorySize: 256 # Lambdaのメモリサイズ
timeout: 30 # Lambdaのタイムアウト(秒)
environment:
OPENAI_API_KEY: ${env:OPENAI_API_KEY} # 環境変数から取得
OPENWEATHERMAP_API_KEY: ${env:OPENWEATHERMAP_API_KEY} # 環境変数から取得functions:
app:
handler: main.handler # main.pyのhandler関数を呼び出す
events:
– httpApi: ‘*’ # API GatewayのHTTP APIで全てのリクエストをLambdaにルーティングplugins:
– serverless-python-requirements # Pythonの依存関係を管理custom:
pythonRequirements:
dockerizePip: true # Dockerを使って依存関係をビルド(環境差異を吸収)
slim: true # 不要なファイルを削除してパッケージサイズを削減
“` -
main.py
の修正: FastAPIアプリケーションをMangumでラップします。“`python:main.py
… 既存のFastAPIコード …
from mangum import Mangum
FastAPIアプリのインスタンス
app = FastAPI()
… 既存のFastAPIエンドポイントやAgentの定義 …
MangumでFastAPIアプリをラップ
handler = Mangum(app)
“` -
デプロイ: プロジェクトルートで以下のコマンドを実行します。
bash
serverless deployデプロイが完了すると、API GatewayのエンドポイントURLが出力されます。このURLをVercelの
FASTAPI_BACKEND_URL
に設定します。
2. StripeでLLMアプリを収益化する
最も手軽に決済機能を導入できるのがStripe Checkoutです。ユーザーをStripeのホストする決済ページにリダイレクトさせるだけで、安全な決済処理が完了します。
2.1 Stripe Products & Pricesの作成
Stripeダッシュボードで、販売したいサービス(例: 「LLM API利用権」)をProductとして作成し、その料金プラン(Price)を設定します。従量課金やサブスクリプションなど、様々なモデルが選択可能です。
2.2 Checkout Sessionの作成
FastAPIバックエンドに、Stripe Checkout Sessionを作成するための新しいエンドポイントを追加します。
“`python:main.py (追加)
import stripe
Stripe APIキーを設定
stripe.api_key = os.getenv(“STRIPE_SECRET_KEY”)
class CreateCheckoutSessionRequest(BaseModel):
price_id: str # Stripeで作成した料金プランのID
quantity: int = 1
@app.post(“/create-checkout-session”)
async def create_checkout_session(request: CreateCheckoutSessionRequest):
try:
checkout_session = stripe.checkout.Session.create(
line_items=[
{
‘price’: request.price_id,
‘quantity’: request.quantity,
},
],
mode=’payment’,
success_url=’https://your-frontend-domain.com/success?session_id={CHECKOUT_SESSION_ID}’,
cancel_url=’https://your-frontend-domain.com/cancel’,
)
return {“url”: checkout_session.url}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
“`
フロントエンドからは、この/create-checkout-session
エンドポイントを呼び出し、返されたURLにユーザーをリダイレクトさせます。
2.3 Stripe Webhooksで決済完了イベントを処理する
決済が完了すると、StripeはあなたのバックエンドにWebhookイベントを送信します。これを受け取ることで、ユーザーへのAPIキー発行や、利用権限の付与といった後続処理を自動化できます。
- Webhookエンドポイントの作成: FastAPIに
/webhook
のようなエンドポイントを作成し、StripeからのPOSTリクエストを受け取ります。 - イベントの検証: WebhookイベントがStripeからの正当なものであることを検証します(署名検証)。
- イベントの処理:
checkout.session.completed
などのイベントタイプを処理し、ユーザーのデータベースを更新したり、APIキーを発行したりします。
3. 運用と成長のためのヒント
- モニタリング: AWS CloudWatchやVercel Analyticsを活用し、アプリケーションのパフォーマンス、エラー、そしてコストを継続的に監視します。
- ユーザーサポート: 問い合わせフォームやFAQを設置し、ユーザーからのフィードバックに迅速に対応します。初期のユーザーは、プロダクト改善の貴重な情報源です。
- マーケティング: ターゲットユーザーにプロダクトの価値を伝えるためのマーケティング活動(ブログ、SNS、広告など)を行います。
- 利用状況のトラッキングと課金: ユーザーごとのAPI利用回数をデータベースでトラッキングし、Stripe Billingと連携して従量課金やサブスクリプションの請求を自動化します。
まとめ
この連載を通して、私たちはLLMアプリ開発の全体像から、RAG、Function Callingといったコア機能の実装、そしてデプロイと収益化までを、モダンな技術スタックを使って一気通貫で体験しました。
アイデアを形にするだけでなく、それをビジネスとして成立させることで、あなたの技術は真の価値を発揮します。現代のクラウドサービスと決済プラットフォームを活用すれば、個人でもグローバルなサービスを構築し、収益化することは決して夢ではありません。
この連載で得た知識とコードを元に、ぜひあなた自身のLLMアプリを世界に公開し、新たな収益の柱を築いてください。あなたの挑戦を応援しています!
コメント