PR

【第5回】デプロイと収益化編:AWS/VercelへのデプロイとStripe連携

【第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が構築されます。

  1. GitHubリポジトリの作成: Next.jsプロジェクトをGitHubにプッシュします。
  2. Vercelへのインポート: Vercelダッシュボードにログインし、[Add New...] -> [Project]からGitHubリポジトリをインポートします。
  3. 環境変数の設定: Vercelのプロジェクト設定で、FASTAPI_BACKEND_URL環境変数を、デプロイ後のFastAPIバックエンドのURLに設定します。

1.2 バックエンド (FastAPI) のAWS Lambdaへのデプロイ

FastAPIバックエンドは、サーバーレスでスケーラブルなAWS Lambdaにデプロイします。MangumServerless Frameworkを組み合わせることで、PythonのASGIアプリケーションをLambdaで簡単に実行できます。

  1. Serverless Frameworkのインストール: npm install -g serverless
  2. AWS CLIの設定: AWSの認証情報が設定されていることを確認します。
  3. serverless.ymlの作成: プロジェクトルートに以下のファイルを作成します。

    “`yaml:serverless.yml
    service: llm-rag-api

    provider:
    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 # 不要なファイルを削除してパッケージサイズを削減
    “`

  4. main.pyの修正: FastAPIアプリケーションをMangumでラップします。

    “`python:main.py

    … 既存のFastAPIコード …

    from mangum import Mangum

    FastAPIアプリのインスタンス

    app = FastAPI()

    … 既存のFastAPIエンドポイントやAgentの定義 …

    MangumでFastAPIアプリをラップ

    handler = Mangum(app)
    “`

  5. デプロイ: プロジェクトルートで以下のコマンドを実行します。

    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キー発行や、利用権限の付与といった後続処理を自動化できます。

  1. Webhookエンドポイントの作成: FastAPIに/webhookのようなエンドポイントを作成し、StripeからのPOSTリクエストを受け取ります。
  2. イベントの検証: WebhookイベントがStripeからの正当なものであることを検証します(署名検証)。
  3. イベントの処理: checkout.session.completedなどのイベントタイプを処理し、ユーザーのデータベースを更新したり、APIキーを発行したりします。

3. 運用と成長のためのヒント

  • モニタリング: AWS CloudWatchやVercel Analyticsを活用し、アプリケーションのパフォーマンス、エラー、そしてコストを継続的に監視します。
  • ユーザーサポート: 問い合わせフォームやFAQを設置し、ユーザーからのフィードバックに迅速に対応します。初期のユーザーは、プロダクト改善の貴重な情報源です。
  • マーケティング: ターゲットユーザーにプロダクトの価値を伝えるためのマーケティング活動(ブログ、SNS、広告など)を行います。
  • 利用状況のトラッキングと課金: ユーザーごとのAPI利用回数をデータベースでトラッキングし、Stripe Billingと連携して従量課金やサブスクリプションの請求を自動化します。

まとめ

この連載を通して、私たちはLLMアプリ開発の全体像から、RAG、Function Callingといったコア機能の実装、そしてデプロイと収益化までを、モダンな技術スタックを使って一気通貫で体験しました。

アイデアを形にするだけでなく、それをビジネスとして成立させることで、あなたの技術は真の価値を発揮します。現代のクラウドサービスと決済プラットフォームを活用すれば、個人でもグローバルなサービスを構築し、収益化することは決して夢ではありません。

この連載で得た知識とコードを元に、ぜひあなた自身のLLMアプリを世界に公開し、新たな収益の柱を築いてください。あなたの挑戦を応援しています!

コメント

タイトルとURLをコピーしました