Zenn
🤖

Cline x LiteLLM x Bedrock で Rate Limit に負けない開発環境を作るぞ

2025/03/17に公開
2

はじめに

Amazon Bedrock を利用した AI アプリ開発を行う際に、単一の AWS アカウントで何人もの開発者が並行して推論 API を叩くと、クォータ(分間の API リクエスト数など)に抵触してエラーが発生してしまうことがよくあります。(クォータは AWS アカウント毎に設定されているため)

本記事では、OSS である LiteLLM を使って Claude 3.7 Sonnet や Claude 3.5 Sonnet を柔軟に切り替え、Cline(VSCode や Cursor の拡張機能として使える AI コーディングエージェント)を利用してみたいと思います。

https://docs.litellm.ai/

LiteLLM ではモデルごとのリトライ処理や、特定モデルがエラーになった際に別モデルへ切り替えるフォールバック機能も備わっているため、AWS アカウント一つで複数人が同時に Cline を利用する場合にも安定した推論体験を得られます。

IAM ユーザーの作成

1. IAMユーザーを作成する

aws iam create-user --user-name cline-user

2. Bedrock のフルアクセス権限を付与
※ 簡単のためフルアクセス権限にしていますが、必要あれば適宜権限を絞ってください

aws iam attach-user-policy --user-name cline-user --policy-arn arn:aws:iam::aws:policy/AmazonBedrockFullAccess

3. アクセスキーの作成
以下のコマンドでアクセスキーを発行。

aws iam create-access-key --user-name cline-user

上記コマンドを実行すると、アクセスキーが発行されます。
以下の AccessKeyId と SecretAccessKey をメモしておくこと。

{
    "AccessKey": {
        "UserName": "cline-user",
        "AccessKeyId": "AKIAXXXXXXXXXXXXXXXX",
        "Status": "Active",
        "SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "CreateDate": "2025-XX-XXTXX:XX:XXZ"
    }
}

LiteLLM を立ち上げる

1. litellm をクローン

git clone https://github.com/BerriAI/litellm

2. config.yaml と .env を作成

touch config.yaml .env

3. config.yaml にモデルや Fallback の設定を記載

model_list:
  # model_name は任意の名前を設定できる
  - model_name: "claude-3-5-sonnet-us"
    litellm_params:
      model: bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0
      aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
      aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
      aws_region_name: us-east-1
  - model_name: "claude-3-5-sonnet-apac"
    litellm_params:
      model: bedrock/apac.anthropic.claude-3-5-sonnet-20241022-v2:0
      aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
      aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
      aws_region_name: ap-southeast-2
  - model_name: "claude-3-7-sonnet-us"
    litellm_params:
      model: bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0
      aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
      aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
      aws_region_name: us-east-1

litellm_settings:
  drop_params: True
  num_retries: 2
  request_timeout: 600
  # このモデルが使えなかったら、こっちのモデルを使いたい、という Fallback 設定を記載
  fallbacks: [
    {"claude-3-5-sonnet-us": ["claude-3-5-sonnet-apac"]},
    {"claude-3-7-sonnet-us": ["claude-3-5-sonnet-us"]},
    {"claude-3-5-sonnet-apac": ["claude-3-7-sonnet-us"]}
  ]

4. docker-compose.yml を修正
config.yaml に記載した設定を有効化するために、docker-compose.yml を修正する。

  • 11-14行目のコメントアウトを外し、config.yaml を利用する。
version: "3.11"
services:
  litellm:
    build:
      context: .
      args:
        target: runtime
    image: ghcr.io/berriai/litellm:main-stable
    ########################################
    # Uncomment these lines to start proxy with a config.yaml file ##
    volumes:
     - ./config.yaml:/app/config.yaml
    command:
     - "--config=/app/config.yaml"
    #############################################
    ports:
      - "4000:4000" # Map the container port to the host, change the host port if necessary

5. .env の編集
.env を編集して以下の内容を記載する

# Development Configs
LITELLM_MASTER_KEY="sk-1234"
LITELLM_SALT_KEY="your_random_salt_key"
UI_USERNAME=admin
UI_PASSWORD=sk-1234
PROXY_ADMIN_ID=admin
DATABASE_URL="postgresql://llmproxy:dbpassword9090@db:5432/litellm"
STORE_MODEL_IN_DB="True"
# LiteLLM のモデル呼び出しに利用する AWS 認証情報
AWS_ACCESS_KEY_ID="さっき作成したもの"
AWS_SECRET_ACCESS_KEY="さっき作成したもの"

6.litellm を起動する

docker compose build && docker compose up -d

LiteLLM を設定する

0. 初期ユーザーを作成する
こちらの Issueで、初期ユーザーが作成されないバグが報告されているため、以下のコマンドを叩いて初期ユーザーを作成する。

curl --location 'http://localhost:4000/user/new' --header 'Authorization: Bearer sk-1234' --header 'Content-Type: application/json' --data-raw '{"user_email": "admin@example.com", "user_id": "admin"}'

1. 管理画面にアクセスする
http://localhost:4000/ui にアクセスすることで、LiteLLM の管理画面にアクセスできる。
デフォルトだと、admin / sk-1234 でログイン可能。

2. API Key を発行する
左メニューの Virtual Keys -> + Create New Key から API キーが作成できる。
Key Name を適当に設定し、Models で All Team Models を選び、Create Key する。
表示された API Key をコピーしておく。


Cline を使う

1. Cline をインストールする

VSCode や Cursor の拡張機能検索バーで Cline を検索し、Cline をインストールする。

2. Cline の API Provider を設定する

  • API Provider : LiteLLM
  • API Key : 先ほど作成したキー
  • Base URL : デフォルトなら http://localhost:4000/
  • Model ID : メインで利用するモデル(例: claude-3-7-sonnet-us) を指定

3. 試してみる
あとは通常通り Cline に指示を出せば、LiteLLM が適宜推論をルーティングしてくれる。例えば 3.7 Sonnet が Rate Limit にひっかかった場合、自動的に 3.5 Sonnet を叩いてくれるなど。


番外編: LiteLLM のダッシュボードを見てみる

http://localhost:4000/ui/ の各画面では、ログやモデルごとの利用状況を確認できる
例えば Usage 画面だとこんなかんじ。 Bugets 機能を使えば API Key ごとに利用金額の制限をかけられたりと、柔軟に利用可能。


おわりに

LiteLLM を利用することで Amazon Bedrock の Quota や同時実行制限でエラーが起きやすい場合でも、モデルのリージョン分散やフォールバックを活用してある程度スケールさせることができます。 また、LiteLLM のダッシュボードを使えば利用状況や各ユーザーの消費量を可視化しやすくなるので、チーム開発の際に便利です。Amazon Bedrock x Cline で爆速開発していきましょう!

2

Discussion

ログインするとコメントできます