AWS Bedrock
Amazon Bedrock 是一项 AWS 服务,可通过托管 API 访问 Amazon 及其他服务提供方的基础模型。AISIX 为应用提供统一的 OpenAI 兼容接口,用于访问由 Bedrock 托管的 Claude、Llama、Mistral、Amazon Nova、Cohere 等模型。
此配置适用于需要使用 AISIX 身份验证、模型允许列表、限流和用量核算的 Bedrock 托管模型。AISIX 使用 AWS SigV4 对出站 Bedrock 调用进行签名。
准备工作
开始前,请准备以下内容:
- 一套 AISIX 环境:
- 对于 AISIX Cloud,需要一个已关联网关的环境和具有写入作用域的 Admin Token。对于 On-Premises,请按照 AISIX Cloud 快速入门操作。如需申请 Hybrid Cloud 访问权限,请联系 API7。
- 对于开源 AISIX 网关,请准备本地 AISIX 安装,或使用开源 AISIX 网关快速入门中的 Docker 环境。配置网关以加载声明式资源文件。
- 对目标模型具有
bedrock:InvokeModel权限的 AWS Access Key ID 和 Secret Access Key;使用临时凭证时还可提供 STS Session Token。 - 对所选区域中目标 Bedrock 模型的访问权限,以及该模型的模型 ID 或推理配置文件 ID。
curl和jq。
使用 AISIX Cloud 配置
导出 AISIX Cloud 连接信息:
# AISIX_CP 是 Admin API 基础 URL;应包含 /api,且末尾不带斜杠
# 本地 On-Premises 快速入门使用 http://localhost:8080/api
export AISIX_CP="YOUR_AISIX_CLOUD_ADMIN_API_URL"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export ENV_ID="YOUR_ENVIRONMENT_ID"
使用 Bedrock 目录服务提供方和结构化 config 凭证创建服务提供方密钥:
PROVIDER_KEY_ID=$(curl -sS -X POST "$AISIX_CP/provider_keys" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "bedrock-prod",
"provider": "amazon-bedrock",
"api_key": "",
"api_base": "https://bedrock-runtime.us-west-2.amazonaws.com",
"config": {
"access_key_id": "YOUR_AWS_ACCESS_KEY_ID",
"secret_access_key": "YOUR_AWS_SECRET_ACCESS_KEY",
"region": "us-west-2"
},
"allowed_environments": ["'"$ENV_ID"'"]
}' | jq -r '.provider_key.id')
api_key 留空是有意为之。即使 config 提供了结构化 Bedrock 凭证,创建请求仍要求包含此字段。更新 config 时应省略 api_key,不要再次发送空字符串。
开源网关可以推导标准 AWS 端点,但 AISIX Cloud 当前要求为 Bedrock 显式设置 api_base。主机名和 config 中的区域必须设置为相同值。Dashboard 会显示 Access Key ID、Secret Access Key 和区域字段。如果通过 AISIX Cloud Admin API 使用临时 STS 凭证,还需在 config 中添加 session_token。
创建模型,并将 Bedrock 模型 ID 或推理配置文件 ID 设为 model_name:
MODEL_ID=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/models" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "claude-bedrock",
"model_name": "anthropic.claude-3-5-sonnet-20241022-v2:0",
"provider_key_id": "'"${PROVIDER_KEY_ID}"'"
}' | jq -r '.model.id')
创建可访问该模型的调用方 API Key:
BEDROCK_CALLER_KEY=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/api_keys" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "bedrock-caller",
"allowed_models": ["'"${MODEL_ID}"'"]
}' | jq -r '.plaintext')
使用开源 AISIX 网关配置
在 resources.yaml 中声明 Bedrock 服务提供方密钥、模 型别名和调用方 API Key。服务提供方密钥存储 AWS 凭证,模型则选择 Bedrock 模型 ID 或推理配置文件。
创建 Bedrock 服务提供方密钥
将 AWS 凭证导出为环境变量,以确保 YAML 文件不包含明文 Secret:
# 请替换为实际值
export BEDROCK_CREDENTIALS='{"access_key_id":"YOUR_AWS_ACCESS_KEY_ID","secret_access_key":"YOUR_AWS_SECRET_ACCESS_KEY","region":"us-west-2"}'
使用 AWS 凭证设置声明 Bedrock 服务提供方密钥:
_format_version: "1"
provider_keys:
- display_name: bedrock-prod
provider: amazon-bedrock
adapter: bedrock
api_key: ${BEDROCK_CREDENTIALS}
❶ provider 用于标记上游。
❷ adapter 选择 Bedrock。
❸ api_key 是包含 access_key_id、secret_access_key 和 region 的 JSON 字符串。Bedrock 端点按区域确定,例如 bedrock-runtime.us-west-2.amazonaws.com,因此区域为必填项。对于标准 AWS,应不设置 api_base;如果使用私有 Bedrock 端点,则将其设置为该端点。
使用临时 STS 凭证时,请在凭证 JSON 中包含 session_token;使用长期静态密钥时则省略该字段。
服务提供方密钥 Secret 遵循服务提供方密钥中说明的凭证处理方式。
创建模型
将面向调用方的别名映射到 Bedrock 模型 ID:
models:
- display_name: claude-bedrock
provider: amazon-bedrock
model_name: anthropic.claude-3-5-sonnet-20241022-v2:0
provider_key: bedrock-prod
❶ provider 使用与服务提供方密钥相同的标签。
❷ model_name 是 Bedrock 模型 ID。
❸ provider_key 通过服务提供方密钥的 display_name 将模型关联到 Bedrock 凭证。
对于非 Claude 模型,请将 model_name 设置为发布方的 Bedrock ID,例如 meta.llama3-3-70b-instruct-v1:0 或 amazon.nova-pro-v1:0。
如果使用 Bedrock 推理配置文件,请在 model_name 中填写完整的推理配置文件 ID。
创建调用方 API Key
选择应用将发送给 AISIX 的调用方 API Key 值,并将其导出为环境变量:
# 请替换为实际值
export BEDROCK_CALLER_KEY="YOUR_CALLER_API_KEY"
声明可访问 Bedrock 支持的模型别名的 API Key 资源。网关会从 key_env 指定的环境变量中读取明文值,并且只存储其哈希:
api_keys:
- display_name: bedrock-caller
key_env: BEDROCK_CALLER_KEY
allowed_models: ["claude-bedrock"]
allowed_models 值必须与已创建的模型 别名匹配。
验证并加载配置
如果 AISIX 安装在本地,请在加载前验证文件:
aisix validate --resources resources.yaml
验证后,在网关进程环境中提供文件引用的环境变量,再启动网关。仅当这些变量已经可供进程使用时,才重新加载现有网关;否则,请使用更新后的环境重启网关。
如果使用 Docker,请调整开源 AISIX 网关快速入门中的验证和启动命令。挂载此 resources.yaml 文件,并在两条命令中使用 -e 传入它引用的每个环境变量。
验证服务提供方连接
导出 AISIX 网关 Origin:
# 本地快速入门使用 http://127.0.0.1:3000
export AISIX_PROXY="YOUR_AISIX_GATEWAY_ORIGIN"
通过 AISIX 代理发送 Chat Completions 请求:
curl -sS -X POST "$AISIX_PROXY/v1/chat/completions" \
-H "Authorization: Bearer ${BEDROCK_CALLER_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-bedrock",
"messages": [
{
"role": "user",
"content": "Say hello from Bedrock."
}
]
}'
网关会返回 OpenAI 兼容响应,其中包含面向调用方的别名:
{
"id": "msg_01example",
"object": "chat.completion",
"model": "claude-bedrock",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello from Bedrock!"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 5,
"total_tokens": 14
}
}
在 Bedrock 调用指标、CloudTrail 或服务提供方侧日志中检查测试请求。如果 AISIX 返回上游身份验证或授权错误,请检查 AWS 凭证、区域、IAM 权限和 Bedrock 模型访问权限。
准备生产环境
如果应用使用流式传输,请在 AWS 权限中添加 bedrock:InvokeModelWithResponseStream,并确认目标模型的流式传输行为。
对于非 Claude Bedrock 模型,请至少发送一条用户或助手消息。Bedrock Converse 不接受仅包含系统消息的请求,因此 AISIX 会在调用服务提供方之前拒绝此类请求。
面向调用方的错误会隐去 AWS 返回的上游错误详情,避免泄露 ARN、区域和账户 ID 等 AWS 标识符。
后续步骤
你已将 AISIX 连接到 AWS Bedrock,并验证了模型别名。接下来可阅读以下指南: