AWS Bedrock 연동
AWS Bedrock 연동
AWS를 쓰는 팀이라면 Amazon Bedrock이 낯설지 않을 거예요. 여러 벤더의 파운데이션 모델(Anthropic, Meta, DeepSeek, Mistral, Amazon 등)을 하나의 관리형 서비스로 제공하니까요. LiteLLM에서 Bedrock을 부르는 방법을 정리해 드릴게요.
Bedrock 프로바이더 한눈에
| 속성 | 값 |
|---|---|
| 설명 | Amazon Bedrock은 고성능 파운데이션 모델(FM)을 골라 쓸 수 있는 완전 관리형 서비스 |
| LiteLLM 라우트 | bedrock/, bedrock/converse/, bedrock/invoke/, bedrock/converse_like/, bedrock/llama/, bedrock/deepseek_r1/, bedrock/qwen3/ 등 |
| 지원 OpenAI 엔드포인트 | /chat/completions, /completions, /embeddings, /images/generations, /v1/realtime |
| 추가 엔드포인트 | /rerank, 패스스루 지원 |
Bedrock 요청에는 boto3가 설치되어 있어야 해요.
uv add boto3>=1.28.57
인증 방식
Bedrock은 전통적인 boto3 인증(액세스 키 등)을 쓰지만, LiteLLM은 API 키 인증도 지원합니다. API 키를 쓰는 두 가지 방법이 있어요.
Option 1 — 환경변수 사용:
export AWS_BEARER_TOKEN_BEDROCK="your-api-key"
Option 2 — api_key 파라미터로 completion/embedding/image_generation 호출에 직접 전달:
response = completion(
model="bedrock/anthropic.claude-3-sonnet-20240229-v1:0",
messages=[{ "content": "Hello, how are you?","role": "user"}],
api_key="your-api-key"
)
기본 호출 — boto3 환경변수 사례
액세스 키를 환경변수로 잡아두고 모델을 부르는 가장 흔한 패턴입니다.
import os
from litellm import completion
os.environ["AWS_ACCESS_KEY_ID"] = ""
os.environ["AWS_SECRET_ACCESS_KEY"] = ""
os.environ["AWS_REGION_NAME"] = ""
response = completion(
model="bedrock/anthropic.claude-3-sonnet-20240229-v1:0",
messages=[{ "content": "Hello, how are you?","role": "user"}]
)
모델 이름은 bedrock/<모델ID> 형태예요. 위의 bedrock/anthropic.claude-3-sonnet-20240229-v1:0가 전형적입니다.
Proxy 서버로 호출하기
config.yaml에서 model을 bedrock/us.anthropic...처럼 지정하고 인증 값을 os.environ/...로 넘깁니다.
model_list:
- model_name: bedrock-claude-3-5-sonnet
litellm_params:
model: bedrock/us.anthropic.claude-haiku-4-5-20251001-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: os.environ/AWS_REGION_NAME
사용 가능한 인증 파라미터는 다양해요.
aws_access_key_id: Optional[str],
aws_secret_access_key: Optional[str],
aws_session_token: Optional[str],
aws_region_name: Optional[str],
aws_session_name: Optional[str],
aws_profile_name: Optional[str],
aws_role_name: Optional[str],
aws_web_identity_token: Optional[str],
aws_bedrock_runtime_endpoint: Optional[str],
api_key: Optional[str],
프록시를 띄운 뒤:
litellm --config /path/to/config.yaml
curl로 호출합니다.
curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Content-Type: application/json' \
--data ' {
"model": "bedrock-claude-v1",
"messages": [
{
"role": "user",
"content": "what llm are you"
}
]
}
'
프로바이더 고유 파라미터
litellm에 OpenAI 형식이 아닌 파라미터를 넘기면 LiteLLM은 그걸 프로바이더 고유 파라미터로 간주해 요청 본문에 kwarg로 포함시킵니다. 예를 들어 Bedrock의 top_k를 쓰고 싶다면:
import os
from litellm import completion
os.environ["AWS_ACCESS_KEY_ID"] = ""
os.environ["AWS_SECRET_ACCESS_KEY"] = ""
os.environ["AWS_REGION_NAME"] = ""
response = completion(
model="bedrock/anthropic.claude-3-sonnet-20240229-v1:0",
messages=[{ "content": "Hello, how are you?","role": "user"}],
top_k=1 # 프로바이더 고유 파라미터
)
도구 호출 (Tool Calling)
Bedrock의 Converse/Invoke API를 통해 도구 호출을 지원해요. OpenAI 형식의 tools 배열을 그대로 넘기면 됩니다.
from litellm import completion
# 환경변수 설정
os.environ["AWS_ACCESS_KEY_ID"] = ""
os.environ["AWS_SECRET_ACCESS_KEY"] = ""
os.environ["AWS_REGION_NAME"] = ""
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
},
}
]
messages = [{"role": "user", "content": "What's the weather like in Boston today?"}]
response = completion(
model="bedrock/anthropic.claude-3-sonnet-20240229-v1:0",
messages=messages,
tools=tools,
tool_choice="auto",
)
print(response)
응답의 choices[0].message.tool_calls[0].function.name과 .arguments가 문자열로 채워지는지 assertion으로 확인할 수 있어요.
리소스로 역할 전환 (Role Assumption)
다른 AWS 계정의 역할로 위임해 호출해야 할 때가 있어요. aws_role_name과 aws_session_name을 넘기는 방식으로 가능합니다.
from litellm import completion
response = completion(
model="bedrock/anthropic.claude-instant-v1",
messages=messages,
max_tokens=10,
temperature=0.1,
aws_role_name=aws_role_name,
aws_session_name="my-test-session",
)
동적으로 유저를 지정해야 한다면 aws_region_name, aws_access_key_id, aws_secret_access_key까지 함께 넘깁니다. 역할 전환 대상 역할(<TARGET_ROLE_ARN>)은 그를 신뢰하는 IAM 아이덴티티여야 AssumeRole이 성공해요.
외부 BedrockRuntime 클라이언트 전달
AWS 자격 증명 프로파일이나 SSO 세션, 또는 환경변수가 여의치 않을 때는 외부 BedrockRuntime.Client 객체를 직접 전달할 수도 있어요.
import boto3
from litellm import completion
bedrock = boto3.client(
service_name="bedrock-runtime",
region_name="us-east-1",
aws_access_key_id="",
aws_secret_access_key="",
aws_session_token="",
)
response = completion(
model="bedrock/anthropic.claude-instant-v1",
messages=[{ "content": "Hello, how are you?","role": "user"}],
aws_bedrock_client=bedrock,
)
~/.aws/config의 프로파일을 쓰는 것도 가능합니다.
생각 정리
Bedrock을 LiteLLM에서 쓰는 핵심은 bedrock/ 프리픽스 + AWS 인증 두 가지예요. 가장 빠른 실습 경로는: ① boto3 설치 → ② AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_REGION_NAME 환경변수 → ③ completion(model="bedrock/<model-id>", messages=...). 그 다음 단계로 도구 호출이나 역할 전환, 외부 클라이언트 전달을 필요에 맞게 추가하면 됩니다.
더 알아보기
- Vertex AI 연동 — Google 클라우드의 대응 프로바이더
- 지원 프로바이더 개요
- OpenAI 호환 엔드포인트 연결