Cline x LiteLLM x Bedrock で Rate Limit に負けない開発環境を作るぞ
はじめに
Amazon Bedrock を利用した AI アプリ開発を行う際に、単一の AWS アカウントで何人もの開発者が並行して推論 API を叩くと、クォータ(分間の API リクエスト数など)に抵触してエラーが発生してしまうことがよくあります。(クォータは AWS アカウント毎に設定されているため)
本記事では、OSS である LiteLLM を使って Claude 3.7 Sonnet や Claude 3.5 Sonnet を柔軟に切り替え、Cline(VSCode や Cursor の拡張機能として使える 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 で爆速開発していきましょう!
Discussion