AWS Bedrock 上游
本指南将说明如何将 AISIX AI 网关路由到 AWS Bedrock。调用方可以通过网关的 OpenAI 兼容 API 访问 Claude、Llama、Mistral、Amazon Nova、Cohere 以及其它托管在 Bedrock 上的模型。
该配置适用于希望使用 AISIX 认证、模型允许列表、限流和用量核算的 Bedrock 托管模型。AISIX 会使用 AWS SigV4 对出站 Bedrock 调用签名。
准备工作
请先准备以下内容:
- 一个 Admin API 位于
:3001、代理 API 位于:3000的网关。 - 网关
config.yaml中的 Admin Key。 - 具备目标模型
bedrock:InvokeModel权限的 AWS 凭证。 - 在所选区域中访问目标 Bedrock 模型的权限。
- AWS Access Key ID、Secret Access Key、区域、可选的 STS Session Token、Bedrock 模型 ID 或推理配置文件 ID(inference profile ID),以及面向调用方的别名。
配置 Bedrock 上游
创建 Bedrock 服务提供方密钥、模型别名和调用方 API Key。服务提供方密钥存储 AWS 凭证,模型则选择 Bedrock 模型 ID 或推理配置文件(inference profile)。
创建 Bedrock 服务提供方密钥
使用 AWS 凭证设置创建 Bedrock 服务提供方密钥:
export AISIX_ADMIN_KEY="admin-local-only-change-me"
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/provider_keys" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "bedrock-prod",
"provider": "amazon-bedrock",
"adapter": "bedrock",
"secret": "{\"access_key_id\":\"YOUR_AWS_ACCESS_KEY_ID\",\"secret_access_key\":\"YOUR_AWS_SECRET_ACCESS_KEY\",\"region\":\"us-west-2\"}"
}'
服务提供方密钥 secret 的处理方式遵循服务提供方凭证中说明的凭证处理行为。
❶ provider 用于标记上游。
❷ adapter 选择 Bedrock。
❸ secret 是包含 access_key_id、secret_access_key 和 region 的 JSON 字符串。Bedrock 端点按区域区分,例如 bedrock-runtime.us-west-2.amazonaws.com,因此区域必填。标准 AWS 场景下不要设置 api_base;如果使用私有 Bedrock 端点,则将其设置为对应端点。
使用临时 STS 凭证时,请包含 session_token。长期静态密钥可省略该字段。
保存返回的服务提供方密钥 ID,后续创建模型资源时使用。
创建模型
将面向调用方的别名映射到 Bedrock 模型 ID:
export PROVIDER_KEY_ID="YOUR_PROVIDER_KEY_ID"
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/models" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "claude-bedrock",
"provider": "amazon-bedrock",
"model_name": "anthropic.claude-3-5-sonnet-20241022-v2:0",
"provider_key_id": "'"${PROVIDER_KEY_ID}"'"
}'
❶ provider 使用与服务提供方密钥相同的标签。
❷ model_name 是 Bedrock 模型 ID。
❸ provider_key_id 将模型关联到 Bedrock 凭证。
对于非 Claude 模型,请将 model_name 设置为发布方的 Bedrock ID,例如 meta.llama3-3-70b-instruct-v1:0 或 amazon.nova-pro-v1:0。
如果使用 Bedrock 推理配置文件(inference profile),请在 model_name 中填写完整推理配置文件 ID。
创建调用方 API Key
选择应用发送给 AISIX 的明文调用方 API Key,然后为 Admin 资源计算哈希:
export AISIX_API_KEY="sk-bedrock-caller"
CALLER_KEY_HASH=$(printf '%s' "${AISIX_API_KEY}" | shasum -a 256 | awk '{print $1}')
创建可访问 Bedrock 模型别名的 API Key 资源:
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/apikeys" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"key_hash": "'"${CALLER_KEY_HASH}"'",
"allowed_models": ["claude-bedrock"]
}'
❶ allowed_models 必须与已创建的模型别名匹配。
验证上游
通过 AISIX 代理发送 chat completions 请求:
curl -sS -X POST "http://127.0.0.1:3000/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_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 模型,请至少发送一条 user 或 assistant message。Bedrock Converse 不接受只有 system 的请求,因此 AISIX 会在调用服务提供方之前拒绝这类请求。
为避免泄露 ARN、区域、账号 ID 等 AWS 标识符,调用方可见错误中会隐藏 AWS 上游错误详情。
下一步
你已经将 AWS Bedrock 配置为上游服务提供方协议族。对于其它 Bedrock 模型,可以按相同模式替换区域、凭证、模型 ID 和面向调用方的别名。