
之前团队在做 AI 应用时反复卡在“用 Claude 写原型很容易但真正放到 AWS 上跑成生产接口”这一步。模型 ID 写错、IAM 权限不足、API Gateway 超时、关闭资源后发现还在扣费这些问题分散在各个文档和视频里很难形成一条能直接照做的链路。本文围绕“在 AWS 上用 Claude 从开发到落地”这条主线整理一套闭环实操方案先讲清楚 Claude 在 AWS 上的几种使用方式再给出 Bedrock 调用代码、Lambda 在线 API 部署、Claude Code 安装排错最后补充成本控制与生产环境最佳实践。无论你是刚接触 AWS 的 AI 新手还是需要把 Claude 能力接入业务系统的后端开发者都可以按这篇教程逐步落地。1. 为什么要在 AWS 上使用 Claude1.1 Claude、Claude Code 与 AWS 的关系Claude 是 Anthropic 推出的大语言模型系列擅长代码生成、文本总结、多轮对话和复杂推理。Claude Code 则是 Anthropic 提供的命令行编程工具可以直接在终端里让 Claude 读取项目代码、修改文件、执行命令相当于把大模型接入了日常开发工作流。AWS 在这个链条里承担的是“运行基座”的角色。你可以在 AWS 海外区域通过 Bedrock 托管服务调用 Claude 模型也可以把 Claude Code 安装到 EC2 服务器或 CloudShell 环境中使用。选择 AWS 的常见原因包括数据不需要直接暴露给第三方 API 网关而是通过 AWS 管理平面转发。可以直接复用 IAM、CloudWatch、VPC 等基础设施能力。Lambda、API Gateway、S3 这些服务能快速把 Claude 能力封装成在线 API。这里容易混淆的是“Claude”和“Bedrock”这两个概念。Claude 是模型本身Bedrock 是 AWS 提供模型托管与调用能力的服务。通过 Bedrock你可以用一套统一的 AWS SDK 接口调用 Claude、Llama、Mistral 等多个模型而不需要分别对接不同厂商的 API。1.2 AWS 上调用 Claude 的两种主流方式在实际开发中使用 Claude 主要有两种路径。第一种是通过 Anthropic 官方 API 直接调用。这种方式最简单去 Anthropic 控制台申请 API Key然后用官方 SDK 或 HTTP 请求调用。优点是接入快文档丰富缺点是需要单独管理 Anthropic 账号和密钥密钥散落在多个环境里会增加安全风险。第二种是通过 AWS Bedrock 调用 Claude。这种方式下模型访问权限由 AWS IAM 管理支持 CloudWatch 日志审计也方便与 Lambda、SageMaker 等 AWS 服务联动。对于已经有 AWS 基础设施的团队来说Bedrock 是更值得优先考虑的方式。除此之外还有第三种形态把 Claude Code 这类开发工具安装到 AWS 上的计算资源中让它直接操作云端代码仓库或服务器文件。这种形态更偏向“AI 辅助开发”和第 1.2 节说的“模型 API 调用”不是同一个层面但也是 AWS 上用 Claude 落地的重要场景。1.3 选型建议如果你是个人开发者、只是快速验证想法可以先从 Anthropic 官方 API 入手。如果你所在团队已经有 AWS 账号或者业务对数据安全、权限管控有较高要求建议直接选 Bedrock。需要注意的是不同区域开放的模型版本和定价都有差异具体以 AWS 控制台当前展示为准不要凭记忆在代码里硬写模型 ID。2. 环境准备与版本说明2.1 需要的账号和工具开始之前请准备好以下环境一个 AWS 账号并确认已开启目标区域的 Bedrock 服务。AWS CLI用于命令行创建资源、配置权限。Python 3.9 或更高版本以及 boto3 库。一个代码编辑器本文示例以 VS Code 为主。如果要在 EC2 上安装 Claude Code还需要准备一台 Linux 服务器或者直接使用 AWS CloudShell。版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路不建议为了追求新版而盲改依赖版本。2.2 配置 AWS CLI安装 AWS CLI 后执行配置命令aws configure按提示输入 Access Key ID、Secret Access Key、默认区域和输出格式。这里有一个容易被忽略的问题Bedrock 模型访问是区域级别的比如你在 us-east-1 开通了 Claude 模型访问但 CLI 默认区域是 us-west-2那么调用时就会提示模型不存在或权限不足。建议把默认区域设为你要实际使用的区域aws configure set region us-east-12.3 安装 Python 依赖创建虚拟环境并安装 boto3python3 -m venv venv source venv/bin/activate pip install boto3安装完成后验证 boto3 是否能看到 Bedrock 服务python -c import boto3; print(boto3.client(bedrock).list_foundation_models())如果这条命令能够打印出模型列表说明账号权限和网络连路没有问题。如果提示AccessDeniedException说明 IAM 权限还没配好我们看下一节。3. 核心概念与第一段 Claude 调用代码3.1 开通 Bedrock 模型访问很多新手第一次调用 Claude 时报错You dont have access to the model原因不是代码写错而是没有在 Bedrock 控制台开通模型访问。在 AWS 控制台搜索 Bedrock进入左侧菜单的“Model access”找到 Claude 系列模型点击右侧的 “Manage model access”勾选你要使用的模型并提交。开通一般需要几分钟时间状态变为 “Access granted” 后才能调用。这里提醒一点开通模型访问之后还需要在 IAM 权限中给对应主体用户或角色分配模型调用权限。开通模型访问解决的是“AWS 账号是否允许使用该模型”IAM 权限解决的是“当前身份是否允许调用 Bedrock API”两者缺一不可。3.2 boto3 调用 Claude 的最小示例下面是一段可以在本地运行的 Bedrock Claude 调用代码。在项目目录下新建claude_demo.pyimport boto3 import json bedrock_runtime boto3.client(bedrock-runtime, region_nameus-east-1) MODEL_ID anthropic.claude-3-5-sonnet-20240620-v1:0 payload { anthropic_version: bedrock-2023-05-31, max_tokens: 1024, temperature: 0.7, messages: [ {role: user, content: 请用三句话介绍 AWS Bedrock} ] } response bedrock_runtime.invoke_model( modelIdMODEL_ID, contentTypeapplication/json, acceptapplication/json, bodyjson.dumps(payload) ) result json.loads(response[body].read()) print(result[content][0][text])运行命令python claude_demo.py正常情况下会输出一段关于 AWS Bedrock 的介绍。代码中有几个重点需要解释bedrock-runtime是 Bedrock 的运行时客户端负责真正调用模型。MODEL_ID是模型的唯一标识需要在 Bedrock 控制台确认可用模型列表中获得。anthropic_version是 Claude 在 Bedrock 上的协议版本目前常见值是bedrock-2023-05-31保持这个值即可。messages数组是对话消息体content可以是字符串也可以是包含图片等内容的复合结构。3.3 理解返回结果Claude 在 Bedrock 上的返回结构大致如下{ content: [ { type: text, text: AWS Bedrock 是 AWS 提供的模型托管服务... } ], stop_reason: end_turn, usage: { input_tokens: 25, output_tokens: 120 } }日常开发中你只需要从content[0].text取出回答内容即可。usage字段用于统计 token 消耗是后面做成本监控的重要数据建议在日志中保留。4. 完整落地实战Lambda API Gateway 在线接口4.1 整体架构本地脚本只能自己调试要真正“落地”最快的方式是用 Lambda 封装 Claude 调用再通过 API Gateway 暴露成 HTTP 接口。整体链路如下客户端发送 POST 请求到 API GatewayAPI Gateway 将请求转发给 LambdaLambda 调用 Bedrock Claude 获取回复再把结果返回给客户端。这个架构的好处是按量付费、无需管理服务器、天然支持 HTTPS 和访问控制。适合企业内部问答机器人、内容总结服务、自动化客服等场景。4.2 创建 Lambda 函数在 AWS 控制台进入 Lambda点击“创建函数”选择“从头开始创作”运行时选择 Python 3.12 或 3.11。函数名命名为claude-chat-api。创建完成后先把代码写入 Lambda 控制台的lambda_function.pyimport json import os import boto3 bedrock_runtime boto3.client( bedrock-runtime, region_nameos.environ.get(AWS_REGION, us-east-1) ) MODEL_ID os.environ.get(MODEL_ID, anthropic.claude-3-5-sonnet-20240620-v1:0) def lambda_handler(event, context): try: body json.loads(event.get(body, {})) except json.JSONDecodeError: body {} prompt body.get(prompt, 你好请简单介绍一下你自己) payload { anthropic_version: bedrock-2023-05-31, max_tokens: int(os.environ.get(MAX_TOKENS, 1024)), temperature: 0.7, messages: [ {role: user, content: prompt} ] } response bedrock_runtime.invoke_model( modelIdMODEL_ID, contentTypeapplication/json, acceptapplication/json, bodyjson.dumps(payload) ) result json.loads(response[body].read()) reply result[content][0][text] return { statusCode: 200, headers: {Content-Type: application/json}, body: json.dumps({reply: reply}) }这段代码做了几件重要的事情从请求体读取prompt字段如果没有则使用默认值避免空请求直接报错。使用MAX_TOKENS环境变量控制单次回复长度方便后期调参。使用MODEL_ID环境变量固定模型发布时可以做到不改代码就换模型。异常情况下返回结构依然是 JSON调用方容易解析。4.3 配置 IAM 权限Lambda 默认角色只能写日志不能调用 Bedrock。因此需要给 Lambda 执行角色添加 Bedrock 调用权限。在 Lambda 控制台进入“配置” - “权限”点击执行角色名称进入 IAM 角色页面选择“添加权限” - “创建内联策略”填入以下 JSON{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: bedrock:InvokeModel, Resource: * }, { Effect: Allow, Action: [ logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents ], Resource: * } ] }这里把bedrock:InvokeModel的Resource写成了*目的是降低示例上手门槛。生产环境中建议把 Resource 收敛到具体模型 ARN例如arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0这样可以避免误调用其他模型产生额外费用。4.4 配置 API Gateway在 Lambda 控制台上方点击“添加触发器”选择 API Gateway创建新 API类型选择 HTTP API安全方式可以选择“打开”或“AWS IAM”。为了本地方便测试先选择“打开”但这意味着任何拿到 URL 的人都可以调用接口生产环境必须加上 API Key 或 IAM 鉴权。创建完成后API Gateway 会生成一个调用 URL形如https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.comHTTP API 默认会把请求路由到 Lambda所以直接通过 POST 方法调用根路径即可。4.5 使用 curl 验证接口在本地终端执行curl -X POST https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com \ -H Content-Type: application/json \ -d {prompt: 用三句话介绍 AWS Lambda}预期返回{ reply: AWS Lambda 是 AWS 提供的事件驱动型无服务器计算服务允许用户运行代码而无需预置或管理服务器。它按调用次数和运行时长计费适合构建弹性、低运维成本的云端应用。 }到这里一个“从开发到落地”的最小闭环已经完成模型调用代码 - Lambda 部署 - API Gateway 暴露 - curl 验证。接下来看 Claude Code 这条提效路径。5. 开发提效Claude Code 的安装与常见排错5.1 为什么要在 AWS 环境里使用 Claude CodeClaude Code 是 Anthropic 推出的命令行 AI 编程工具。它可以直接读取项目目录理解代码结构然后完成写测试、修 bug、重构代码等任务。和网页端对话不同Claude Code 能够直接执行终端命令所以非常适合在服务器上操作文件和运行项目。在 AWS 上安装 Claude Code 有两个常见场景一是临时用 CloudShell 或 EC2 处理仓库代码二是把 Claude Code 接入 CI/CD 流水线实现自动化代码审查。当然也可以装在本地电脑上但搜索热度里出现的大量“claude 不是内部或外部命令”说明很多人在安装阶段就卡住了。5.2 在 Linux 环境下安装如果你使用的是 Amazon Linux 2023 或 Ubuntu 系统的 EC2 实例先确认 Node.js 和 npm 已安装node -v npm -v如果提示命令不存在安装 Node.js# Ubuntu / Debian sudo apt update sudo apt install -y nodejs npm # Amazon Linux 2023 sudo dnf install -y nodejs然后全局安装 Claude Codesudo npm install -g anthropic-ai/claude-code安装完成后验证claude --version启动交互式界面claude首次启动需要登录 Anthropic 账号或者在环境变量中配置 API Key。具体认证方式随着版本更新可能会变化建议以官方文档为准。如果你在 Windows 本机使用 PowerShell安装命令是一样的但经常出现claude : 无法将“claude”项识别为 cmdlet或claude 不是内部或外部命令。这通常不是安装失败而是 npm 全局包的安装目录没有加入系统的 PATH 环境变量。可以按以下思路修复查看 npm 全局目录npm prefix -g把这个目录加入系统环境变量 PATH。重新打开 PowerShell 终端再运行claude。如果 PowerShell 执行策略阻止脚本运行可以临时修改执行策略Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser5.3 常见安装报错对照报错现象常见原因解决思路claude 不是内部或外部命令npm 全局目录不在 PATH 中执行npm prefix -g后加入 PATH无法将“claude”项识别为 cmdletPowerShell 找不到命令或执行策略受限检查安装结果、调整环境变量、修改执行策略npm install 权限不足当前用户没有全局写权限Linux/macOS 使用 sudo 或配置 npm 用户级全局目录your organization has disabled claude subscription access for claude code组织策略限制使用找管理员开通订阅权限或改用个人账号unfortunately, claude is not available to new users right now账号开通状态或地区限制确认账号地区与模型服务支持状态按服务条款使用6. 常见问题与排查思路6.1 调用 Bedrock 时报 AccessDenied如果在运行boto3调用代码时收到类似AccessDeniedException优先级最高的是检查 IAM 权限其次是检查是否已开通模型访问。排查顺序如下进入 Bedrock 控制台“Model access”确认模型状态为已开通。在 IAM 中确认当前 CLI 用户或角色拥有bedrock:InvokeModel权限。确认 AWS CLI 配置的 region 与开通模型访问的 region 一致。确认代码中MODEL_ID在当前区域可用。很多情况下问题不是“没权限”而是“没在这个区域开通模型”。6.2 Lambda 调用超时Claude 模型生成回复需要几秒到几十秒尤其是长文本输出。Lambda 默认超时时间是 3 秒这种情况下一定要在 Lambda 控制台调整超时时间在“配置” - “常规配置”中把超时改成 30 秒或 60 秒。同时保证max_tokens不要设置得过大否则生成时间会显著变长。如果调用方是外部系统建议把 API Gateway 的调用方超时时间设置得更宽松或者改用异步调用模式。6.3 ASG desired 设为 0 后还会扣费吗这是一个在成本排查中经常出现的问题。当你把 Auto Scaling Group 的 desired capacity 设为 0 后ASG 管理的 EC2 实例会被终止实例本身的费用确实不会再产生。但需要注意以下资源可能仍然在计费实例关联的 EBS 卷如果没有勾选“删除时释放”会作为独立资源继续存在。弹性 IP如果已经分配但没有绑定到运行中的实例会产生 IP 闲置费用。NAT Gateway、负载均衡器、数据快照、S3 存储等都和 EC2 实例生命周期无关。如果 ASG 使用启动模板创建了新实例但旧实例未完全终止也可能产生短暂重叠费用。所以正确的做法是在关闭 ASG 后进入 EC2 控制台和账单页面核对一遍确认没有残留 EBS 卷和弹性 IP。7. 最佳实践与工程建议7.1 安全与最小权限无论调用 Claude 还是安装 Claude Code都不要把 API Key 写死在代码或仓库里。常见做法包括使用 AWS Secrets Manager 保存 Anthropic API Key 或第三方密钥。Lambda 中使用环境变量引用密钥并通过 IAM 控制访问。使用 Bedrock 时IAM 策略尽量限定到具体模型 ARN缩小权限范围。API Gateway 不要长期使用“打开”模式至少启用 API Key 或接入 Cognito、IAM 鉴权。7.2 成本控制与可观测性AI 应用的成本往往不像服务器那样直观需要从多个维度监控在 CloudWatch Logs 中记录每次调用的usage.input_tokens和usage.output_tokens。给不同环境设置不同的MAX_TOKENS比如测试环境可以用较小的值。对高频重复问答可以用 Redis 或 DynamoDB 做缓存减少模型调用次数。为 AWS 账号设置预算告警超出阈值时发送通知到邮件或钉钉。Claude 这类按 token 计费的服务输入输出都消耗成本不能只看模型单价。7.3 生产环境稳定性一旦把 Claude 能力暴露给真实用户就要考虑模型本身的不稳定性。固定模型版本不要频繁切换默认模型避免回复风格变化影响用户体验。在 Lambda 中对模型调用做 try-except捕获超时、限流和模型不可用异常。对用户输入做长度限制防止超长文本导致 token 超限。建议在 API 层增加基础校验比如 prompt 不为空、长度小于某个阈值。如果业务对延迟敏感可以先返回“已收到请求”再用异步方式推送结果。8. 总结与下一步学习路线到这一步你已经拥有了一条从模型调用到 API 发布再到 CLI 工具安装排错的完整路径。回顾一下核心知识点有三块第一在 AWS 上调用 Claude 优先通过 Bedrock可以复用 IAM、CloudWatch 等基础设施第二用 Lambda 和 API Gateway 可以把 Claude 能力快速封装成生产接口第三Claude Code 是开发阶段的提效工具安装排错要先解决 PATH 和执行权限问题。接下来你可以继续深入的方向包括把 Claude 接入 Amazon Bedrock Agent让模型自动调用工具函数通过 SageMaker 部署开源模型与 Claude 做对比或者在现有业务系统中加入基于 Claude 的内容总结、代码审查功能。建议先从最简单的 Bedrock 调用开始逐步扩大使用范围同时持续关注 AWS 官方文档中模型可用性和定价变化。如果没有动手跑过一遍 Lambda API Gateway 示例建议现在就照着第 4 节的步骤实验一次只有真正跑通才算把这条链路掌握在自己手上。