NTT DATA TECH
🚅

Google Cloud × LiteLLM × Claude Codeで実現する安全なコーディングエージェントの提供

に公開

はじめに

Claude Codeを開発で利用する際に、「誰がどのモデルをいくら使ったか?」といったモニタリングや予算管理などのガバナンスが求められるケースがあると思います。

Vertex AI Model GardenのClaudeモデルは、IAMでの権限管理やCloud Logging・Cloud Monitoringでのログの管理など優れた機能があります。

しかし現時点ではプロジェクト単位のモデルのコストはわかりますが、開発者個人ごとにいくら使ったかを把握することはできません。

本記事ではLiteLLMというOSSを組み合わせることで、開発者個人ごとのコスト管理を行いつつ、コーディングエージェントを活用した開発環境を提供する方法について紹介します。

想定読者

  • Claude Codeなどのコーディングエージェントを安全に開発チームに使わせたいと思っている人
  • コーディングエージェントの監査性をできるだけ簡単に担保したいと思っている人

LiteLLMとは

LiteLLMは複数の大規模言語モデル(OpenAI, Anthropicなど)を統一的なAPIで利用できるオープンソースライブラリです。たとえば、OpenAI向けに書いたコードをClaudeなどの別のモデルで動かしたいときにも、コードをほとんど修正せずに流用できます。

さらにLiteLLMは、LLMの推論エンドポイントの手前でAPI Gatewayのように動作する機能があります。モデルへの入出力のロギング、ユーザーごとのトークン消費量の管理、コスト計算といった運用管理機能を備えています。

この記事では後者の目的でLiteLLMを利用しています。

アーキテクチャ構成

アーキテクチャ構成図

LiteLLM ProxyサーバをCloud Runでホストし、Cloud SQL for PostgreSQLインスタンスにデータを保存します。
クライアントはCloud ShellからCloud Runプロキシを経由して、IAMで保護されたLiteLLM Proxyサーバに安全にアクセスすることができます。

実装

  1. Vertex AI Model GardenからClaudeモデルを有効化する
    今回は簡易化のためにclaude-sonnet-4モデルだけを有効化しました。

  2. Cloud SQL for PostgreSQLインスタンスを作成する
      下図の構成でインスタンスを作成しました。
    Cloud SQL設定

  3. LiteLLM用のPostgreSQLユーザとデータベースを作成する

    • コンソールから「ユーザ」タブを選択し、ユーザlitellm-userを作成します。
    • コンソールから「データベース」タブを選択し、データベースlitellm-dbを作成します。
  4. 作成したユーザにデータベースの権限を付与する

    • コンソールから「Cloud SQL Studio」タブを選択し、デフォルトのPostgreSQLユーザーでログインします。
      Cloud SQL Studioログイン
    • 下記のクエリを実行して権限を付与します。
      GRANT ALL PRIVILEGES ON DATABASE "litellm-db" TO "litellm-user";
      
  5. Artifact RegistryにGitHub Container Registry用のリモートリポジトリを作成する
    LiteLLM公式のDockerイメージはGitHub Container Registry(ghcr.io)で提供されていますが、Cloud RunではGitHub Container RegistryのDockerイメージを直接指定することができません。
    そこで今回はArtifact Registryのリモートリポジトリを使用して、Artifact Registryリポジトリ経由でghcr.ioのDockerイメージを利用できるようにします。[1]
    リモートリポジトリの設定

  6. LiteLLMの設定ファイルconfig.yamlを作成する
    下記のようなyamlファイルを作成します。

    model_list:
    # 利用するモデルの情報を記述する
    - model_name: anthropic/claude-sonnet-4
    litellm_params:
        model: vertex_ai/claude-sonnet-4@20250514
        vertex_ai_location: "us-east5" 
        vertex_ai_project: <プロジェクトID>
    litellm_settings:
        telemetry: false
        set_verbose: false
        json_logs: true
        drop_params: true
        num_retries: 3 
        request_timeout: 15 
    general_settings:
        store_model_in_db: true
        store_prompts_in_spend_logs: true
        master_key: <マスターキー(sk-から始まる文字列)>
        database_url: <Cloud SQL接続用文字列>
    

    作成した設定ファイルをシークレットマネージャーに登録します。
    シークレットマネージャーの設定画面

  7. LiteLLM用のサービスアカウントを作成する
    サービスアカウントの作成画面
    サービスアカウントに必要な権限を付与します。
    権限付与画面
    シークレットマネージャーの画面に移動し、先ほど作成したシークレットに対して「Secret Manager の シークレットアクセサ」権限を付与します。
    シークレットマネージャーの権限付与画面

  8. LiteLLM Proxy(Cloud Run)を作成する
    Cloud Run作成画面
    コンテナイメージのURLは「<作成したリモートリポジトリのURL>/berriai/litellm:main-stable」のように設定します。こうすることでLiteLLM公式提供イメージghcr.io/berriai/litellm:main-stableをリモートリポジトリ経由で利用することができます。
    その他の設定は下記のようにしてCloud Runをデプロイします。

    設定項目
    認証 認証が必要/dentity and Access Management(IAM)
    ポート番号 4000
    コンテナの引数 --port 4000 --config /app/config/config.yaml
    セキュリティ - サービスアカウント: 作成したサービスアカウント
    ボリューム - ボリュームのタイプ: シークレット
    - シークレット: 作成したシークレット名
    - パス1: config.yaml
    バージョン1: latest
    コンテナ - ボリュームのマウント: マウントパス=/app/config
    Cloud SQL 接続 <プロジェクトID>:<リージョン>:<インスタンス名>
  9. Cloud ShellからLiteLLMにCloud Runプロキシ経由でアクセスする
    Cloud Shellを開き、次のコマンドでCloud Runプロキシを実行します。

    gcloud run services proxy <Cloud Runサービス名> --port=4000 --region=asia-northeast1
    

    Cloud Shellの左上のプレビューボタンからポートを4000に変更してプレビューを表示します。
    プレビューのUI
    次のような画面が見えていればLiteLLMは正常に起動しています。
    LiteLLM UI

  10. LiteLLMのユーザとAPIキーを作成する
    LiteLLMのユーザはAPIで簡単に作成することができます。

     curl -X POST "http://localhost:4000/user/new" \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer <マスターキー>" \
        -d '{
        "username": "new_user",
        "email": "new_user@example.com"
        }'
    

    このリクエストのレスポンスから、作成したユーザのAPIキーを取得することができます。

    {"key_alias":null,...."key":"sk-****",....}
    
  11. Cloud ShellからLiteLLM経由でClaude Codeを使用する
    Claude Codeの環境変数を設定します。
    構成を簡単にするためにclaude-sonnet-4のみを有効化しているので、Claude Codeで使用するモデルもclaude-sonnet-4のみにしています。

    export ANTHROPIC_AUTH_TOKEN=<作成したLiteLLMユーザのAPIキー>
    export ANTHROPIC_BASE_URL=http://127.0.0.1:4000
    export ANTHROPIC_MODEL=vertex_ai/claude-sonnet-4@20250514
    export ANTHROPIC_SMALL_FAST_MODEL=vertex_ai/claude-sonnet-4@20250514
    

    次にClaude Codeをインストールして実行します。

    npm install @anthropic-ai/claude-code
    npx claude
    

    最後にClaude Codeを使ってスクリプト生成を試してみます。
    無事、LiteLLM経由のClaudeモデルでClaude Codeを利用することができました。
    Claude Code動作画面

おわりに

Cloud RunとCloud SQLを用いることで、簡単にClaude Codeを利用できる環境を提供することができました。
またこの構成では、Cloud Shellは無料で、Cloud Runはゼロスケールインでき、常時課金対象となるのはCloud SQLだけです。またCloud SQLも使っていないときはインスタンスを停止させれば非常に少ないコストで利用できます。
気軽に試しやすい構成を意識して紹介しました。どなたかの参考になれば幸いです。

脚注
  1. 構成を簡単にするためにDockerイメージはLiteLLM公式提供のものを使用しましたが、企業のセキュリティ要件によって独自にビルドする必要がある場合があります。 ↩︎

NTT DATA TECH
NTT DATA TECH
設定によりコメント欄が無効化されています