Skip to content

【Epic】LLM 基盤を Vercel AI Gateway から AWS Bedrock(日本リージョン)へ移行し、実行基盤を AWS に統一する #52

Description

@yu23ki14

LLM の実行基盤を Vercel AI Gateway から AWS Bedrock(日本国内リージョン) へ移行し、観測は Langfuse Cloud で継続する。併せて、トピック分析 worker の実行基盤を Google Cloud Run Job から AWS ECS Fargate + EventBridge Scheduler へ移す。

PR #26VercelOidcStack)で Vercel → Bedrock の IAM ロールは用意済みだが、アプリ側は 1 行も Bedrock を向いていない。本 Epic はそのアプリ側移行と、それに伴うインフラ・観測・運用の変更を扱う。

前提

本サービスはローンチ前であり、Bedrock 移行の完了後に稼働を開始する。 稼働中のトラフィックも利用者データも無い。したがって本 Epic では次の方針を取る。

  • Vercel AI Gateway との併存や段階移行は行わない。 アプリ全体を1プロバイダに固定する段階移行フラグ(LLM_PROVIDER 等)は設けず、一気に置き換えて AI_GATEWAY_API_KEY を撤去する。
  • 移行前後の性能・品質の比較は行わない。 【検証】構造化出力15箇所の Bedrock 適合性検証とクォータ確認 #47 の検証は Bedrock 単独での絶対水準の合否判定として実施し、合格ラインを測定前に決める。結果はローンチ可否の判断材料になる。
  • 後方互換の維持もデータ移行も不要。 全環境が新規構築であり、旧形式のモデルIDが DB に入っていることはない(interview_config.chat_modelDEFAULT NULL で seed も設定していない)。

決定済みの方針

論点 決定
リージョン 日本国内限定(単一リージョンである必要はない)。Claude は jp. CRIS(東京+大阪)、gpt-oss は東京 In-Region。global.* は IAM で明示 Deny
モデル Claude Sonnet 4.6 / Claude Haiku 4.5 / gpt-oss-120b。Nova は採用しない(Pro は東京未提供、Lite は max output 5K + 構造化出力非対応)
プロバイダ 本番は Bedrock 固定。テスト環境では OpenAI / Gemini 直も許可(許可リストで制御)
web_search 廃止(Bedrock 経由の Claude は非対応)
worker 実行基盤 EventBridge Scheduler + ECS Fargate(確定。Vercel Cron は採用しない。理由は下記 ADR コメント参照)
Guardrail 適用する。streamProcessingModesync / async を環境変数で切替可能にする(既定 sync)。実測してから運用で判断する
コスト検証 推定値のみになるため、AWS Cost Explorer の実請求額との月次突合を運用に入れる
GCP 実装は残置(切り戻し用)。Cloud Scheduler は移行完了後に停止

方針の背景・代替案・トレードオフは本 Issue のコメントに ADR ドラフトとして記載している。実装着手前に ADR を確定させる。

子Issue

フェーズ0: 前処理(他Issueの対象範囲を減らす)

フェーズ1: Bedrock 基盤

フェーズ2: 実行基盤の AWS 化

フェーズ3: 品質・運用

依存関係と進め方

#51 ─┐
#41 ─┼─→ #45 ─→ #42 ─→ #43 ─→ #47
#44 ─┘          │
                └─→ #46
#48 ─→ #49
#43 ─→ #50

最優先で着手すべきもの

#49 はセキュリティ改善として独立した価値がある。 現状 admin は 長期の GCP サービスアカウント鍵(GCP_SA_KEY、JSON 丸ごと)を Vercel の環境変数に保持している。ECS 移行によりこれを完全に廃止し、PR #26 の OIDC ロールに一本化できる。

ローンチ前に確認すること

Cloud Scheduler(毎朝 6:00 JST の --mode=analyze-all)と EventBridge Scheduler のどちらか一方だけが有効な状態にする。 現行の Cloud Scheduler は infra/cloud-run/provision.sh が作成しており、SCHEDULER_PAUSED=1 で停止できる。どの環境で有効になっているかを #48 の着手時に確認し、ローンチ前に片方に寄せる。

前提となる運用作業(コード外)

  • Bedrock コンソールで対象モデル(Anthropic / OpenAI)のアクセス申請(dev / prd 両アカウント)
  • Service Quotas で TPM / RPM を確認、必要なら引き上げ申請(リードタイムがあるため早めに)
  • Vercel プロジェクト(web / admin)の環境変数設定
    • 全環境: AWS_REGION=ap-northeast-1(Vercel が自動上書きするため明示必須)、AWS_ROLE_ARN
    • production: AI_ALLOWED_PROVIDERS=bedrock
    • preview: AI_ALLOWED_PROVIDERS=bedrock,openai,googleOPENAI_API_KEYGOOGLE_GENERATIVE_AI_API_KEY
  • OpenAI / Google Generative AI の API キー発行(テスト環境用。従来は Vercel AI Gateway が仲介していたため未取得)
  • AWS IAM に Vercel OIDC IdP の登録(カスタム audience sts.amazonaws.com を Audiences に追加)

関連

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions