AWS Bedrock 调用大模型:API 密钥与 Python 请求示例
AWS Bedrock 没有传统意义上的“API 密钥”输入框,调用权限由 IAM 控制。
你需要先在 Bedrock 控制台为账号开通目标模型的访问权限,再创建具备 bedrock:InvokeModel 权限的 IAM 用户,最后用 boto3 携带访问密钥调用。
本文按这个顺序展开,覆盖开通、配置、调用和排查。
开通模型访问与准备 IAM 用户
进入 AWS 控制台,切换到支持 Bedrock 的区域(例如 us-east-1 或 us-west-2),搜索并打开 Amazon Bedrock。
在左侧导航找到 Model access,点击 Manage model access,勾选需要使用的模型(例如 Anthropic Claude 系列),提交申请。
状态从 Available 变为可调用前,请勿直接发请求。
接着创建调用身份,不建议直接使用根账号密钥:
- 打开 IAM 控制台,进入 Users → Create user,填写用户名。
- 在权限步骤选择 Attach policies directly,搜索并勾选
AmazonBedrockFullAccess(生产环境应自定义最小权限策略,至少包含bedrock:InvokeModel)。 - 创建完成后进入用户详情,打开 Security credentials → Create access key,用途选 Application running outside AWS,保存
Access key ID和Secret access key。
将密钥写入本机环境变量,避免硬编码到代码里:
export AWS_ACCESS_KEY_ID="你的AccessKeyID"
export AWS_SECRET_ACCESS_KEY="你的SecretAccessKey"
export AWS_DEFAULT_REGION="us-east-1"
安装 SDK 并发送第一个请求
Bedrock 的调用入口是 boto3 的 bedrock-runtime 客户端。
先安装依赖:
python3 -m pip install --upgrade boto3
下面以 Anthropic Claude 模型为例,发送一条文本请求。
模型 ID 请以控制台 Model access 中显示的为准,不同模型和版本 ID 不同,不要照抄旧文章里的 ID:
import boto3
import json
client = boto3.client("bedrock-runtime")
body = {
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 256,
"messages": [
{"role": "user", "content": "用一句话解释什么是对象存储"}
]
}
response = client.invoke_model(
modelId="替换为控制台显示的模型ID",
contentType="application/json",
accept="application/json",
body=json.dumps(body)
)
result = json.loads(response["body"].read())
print(result["content"][0]["text"])
预期结果是终端打印出模型生成的文本。
如果返回结构不是 content 数组,说明该模型的请求体格式不同,需要按对应模型的请求格式调整 body。
常见报错怎么定位
调用失败时先看异常类型和错误码,再逐项排除:
- AccessDeniedException:IAM 用户缺少
bedrock:InvokeModel权限,或密钥属于其他账号。到 IAM 用户权限页确认策略已附加,并检查环境变量是否指向正确密钥。 - ResourceNotFoundException 或模型不可用:模型 ID 拼写错误,或该模型未在当前区域开通。回到 Bedrock 控制台确认区域和 Model access 状态。
- ValidationException:请求体字段不符合模型要求,常见于
max_tokens缺失、messages格式错误或anthropic_version不匹配。对照模型文档调整 JSON。 - 超时或连接失败:检查本机网络能否访问
bedrock-runtime.<区域>.amazonaws.com,公司网络代理可能需要放行该域名。
另外,区域不一致是最容易被忽略的问题:控制台在 us-east-1 开通了模型,但环境变量写成了 us-west-2,请求就会找不到模型。
保持控制台区域、AWS_DEFAULT_REGION 和客户端区域三者一致。
调用前的检查清单
正式接入业务前,可以按下面几项确认:
- 模型访问状态为可用,且与调用区域一致。
- 使用独立 IAM 用户或角色,密钥不写入代码仓库,生产环境优先使用 IAM 角色而非长期密钥。
- 请求体按目标模型格式构造,先用小
max_tokens验证通路再调大。 - 对限流和超时做重试与日志记录,记录
modelId、区域和错误码,便于排查。
如果需要在服务器上长期运行调用脚本,记得把环境变量写入 systemd 服务或密钥管理服务中,而不是放在 shell 历史里。
按以上步骤执行后,多数调用问题都能定位到权限、区域或请求体这三类原因。