进阶 📋 6 个步骤 第 528 / 529 篇

用 Bedrock AgentCore CLI 把 Agent 部署成全托管服务:configure/launch/invoke 与可观测实操

按 AWS 官方 quickstart 用 agentcore CLI 把 Strands 智能体推上全托管运行时:本地 8080 验证、configure 自动建 IAM/ECR、launch 云构建、invoke 与会话隔离、CloudWatch 轨迹与清理。

2026.10.13· 22 分钟阅读· 约 2437 字· ☁️ Bedrock AgentCore / 🐍 Strands Agents

Agent 写在笔记本上跑通只是起点,团队真正卡住的地方在「上线」:隔离怎么做、密钥谁托管、日志去哪看、并发怎么扩。Amazon Bedrock AgentCore 是 AWS 给这些问题的一套全托管答案——Runtime 用 Firecracker microVM 给每个会话独立隔离环境,Identity 托管智能体的凭证,Gateway 管工具访问,Observability 走 CloudWatch 全链路追踪,任何框架写的智能体(Strands、LangGraph、CrewAI、OpenAI Agents SDK)都能部署上去,按实际算力秒级计费。本篇按 AWS 官方快速开始文档,用 Starter Toolkit 的 agentcore CLI 把一个 Strands 智能体从本机 8080 端口一路推到托管运行时:本地验证、配置、部署、调用、看日志、清理,完整六步。十月更新还给它加了工具调用前后钩子与身份同意门户,文末一并交代。

🎯 适合人群:本地 Agent 已跑通、要推给真实用户的开发者;被「容器、IAM、ECR 这些活谁干」劝退过的小团队。前置要求:AWS 账号并配好凭证(aws configure)、Python 3.10+、boto3、Bedrock 控制台开通 Claude 模型访问、AgentCore 相关 IAM 权限。

先理解:AgentCore 解决哪三层问题

把智能体从 demo 变成服务,工程量集中在三层。隔离层:智能体会话可能同时有成百上千个,传统容器共享内核,客户数据有「串门」风险,AgentCore Runtime 给每个会话起独立 microVM,硬件级虚拟化隔离,会话最长可跑 8 小时。凭据层:智能体要调数据库、调内部 API 就得拿密钥,AgentCore Identity 负责凭证托管与换发,智能体代码里不再出现长期密钥。可观测层:智能体一次任务里要分支推理、连续调多个工具,普通请求日志解释不了「为什么它这么干」,Observability 走 CloudWatch 记录每步决策与工具调用。

而 Starter Toolkit(agentcore CLI)是 AWS 把这三层的「重活」打包成的命令行工具:一条 configure 自动创建 IAM 执行角色与 ECR 镜像仓库,一条 launch 用云上 CodeBuild 构建容器(本机不装 Docker 也行),一条 invoke 直连托管运行时。你要写的只有智能体代码本身。

这是 AWS 全家桶,别用错场景。AgentCore 与 IAM、ECR、CloudWatch、Bedrock 深度绑定,跨云或私有化部署基本要重做。也注意按量计费:部署的运行时、调用的算力、日志存储都产生费用,练习完务必按 Step 6 清理。

Step 1:装环境

1 三个包 + 一次验证
mkdir agentcore-runtime-quickstart
cd agentcore-runtime-quickstart
python3 -m venv .venv
# Windows 用:.venv\Scripts\activate
source .venv/bin/activate

pip install --upgrade pip
pip install bedrock-agentcore strands-agents bedrock-agentcore-starter-toolkit

# 验证 CLI 可用:
agentcore --help

三个包各司其职:bedrock-agentcore 是运行时 SDK(提供智能体与平台之间的 HTTP 契约),strands-agents 是 AWS 自家的智能体框架(本篇示例用它,换成 LangGraph 等其他框架契约不变),bedrock-agentcore-starter-toolkit 就是 agentcore CLI。装完先跑 aws configure 确认凭证有效,再确认 Bedrock 控制台里模型访问已开通——模型没开通的话,部署上去调用也会报错。

💡 没想好框架?CLI 也提供 agentcore create 交互式命令,选框架、起项目名,直接生成带契约的骨架工程与配置文件,适合从零开始的场景。

Step 2:写符合契约的智能体

2 BedrockAgentCoreApp 就是全部约定
# my_agent.py
from bedrock_agentcore import BedrockAgentCoreApp
from strands import Agent

app = BedrockAgentCoreApp()
agent = Agent()   # 默认模型,也可指定与工具

@app.entrypoint
def invoke(payload):
    """智能体入口函数"""
    user_message = payload.get("prompt", "Hello!")
    result = agent(user_message)
    return {"result": result.message}

if __name__ == "__main__":
    app.run()

# requirements.txt 两行:
#   bedrock-agentcore
#   strands-agents

契约很简单:用 BedrockAgentCoreApp 包一层,@app.entrypoint 声明入口函数,函数收 payload、返回可序列化的 dict。平台与你的智能体之间就是这套 HTTP 协议,所以无论里面跑的是 Strands 还是 LangGraph 还是裸调模型 API,外层包装一致即可。给智能体加工具也很直接:Strands 的 Agent(tools=[...]) 传入工具函数,工具内部可以用 boto3 访问 AWS 服务。

密钥别写进代码或镜像。需要外部 API 密钥时用 AgentCore Identity 托管或环境变量注入;代码与镜像会进 ECR 仓库,硬编码的密钥等于长期裸奔。这是上云前就该养成的习惯。

Step 3:本地验证

3 先在 8080 端口把逻辑跑对
# 终端 1:启动本地服务
python my_agent.py

# 终端 2:模拟平台调用
curl -X POST http://localhost:8080/invocations \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Hello!"}'
# 预期返回:{"result": "Hello! I\'m here to help..."}

本地服务默认监听 8080,注意先确认端口没被占用。这一步的意义是把「智能体逻辑错误」和「部署问题」分开:本地跑不通就去改代码,别把 bug 带到云上再排查——云上的排查路径要绕经镜像构建与日志检索,反馈循环长得多。工具调用、多轮逻辑、返回结构都在这一步定型。

💡 新版 CLI 还有 agentcore dev 命令:起一个模拟 AgentCore Runtime 环境的本地开发服务器,接口行为与云上一致,本地迭代更快;记得升级 toolkit 到较新版本再用。

Step 4:agentcore configure 配置部署

4 一条命令生成全套配置
# 按默认值配置(区域默认 us-west-2):
agentcore configure -e my_agent.py
#   -e 指定入口文件
#   交互提示一路回车接受默认值即可
#
# 想换区域:
agentcore configure -e my_agent.py -r us-east-1
#
# 产物:隐藏配置文件 .bedrock_agentcore.yaml
#   (区域、执行角色、镜像仓库等都在里面)

configure 做的事:确定入口文件、生成 .bedrock_agentcore.yaml 配置、约定 IAM 执行角色与 ECR 仓库名。真正的资源创建发生在下一步 launch 时——工具会自动创建执行角色、镜像仓库等 AWS 资源,你的账号需要有相应权限(官方建议 AgentCore 相关托管策略加 Bedrock 权限)。区域选择离你的用户近的,模型可用性因区域而异,切换前查一下目标区域的模型支持表。

配置文件提交仓库前过一遍。.bedrock_agentcore.yaml 会随代码进版本库,里面的角色名、仓库名无敏感信息可以提交,但如果你手工改过配置加了环境变量或密钥相关字段,先确认没有明文凭据再 git add。

Step 5:部署、调用、程序化接入

5 launch 上云,invoke 验证
# 部署(云上 CodeBuild 构建 ARM64 容器,无需本机 Docker):
agentcore launch
# 输出里记下两样东西:
#   智能体 ARN(形如 arn:aws:bedrock-agentcore:...)
#   CloudWatch 日志组位置

# CLI 调用验证:
agentcore invoke \'{"prompt": "给我讲个笑话"}\'

# 程序化调用(业务后端里这样接):
import json, uuid, boto3
client = boto3.client(\'bedrock-agentcore\')
resp = client.invoke_agent_runtime(
    agentRuntimeArn="arn:aws:bedrock-agentcore:...",   # 你的 ARN
    runtimeSessionId=str(uuid.uuid4()),
    payload=json.dumps({"prompt": "你好"}).encode(),
    qualifier="DEFAULT")

launch 的输出 ARN 是后续一切调用的钥匙。程序化调用时 runtimeSessionId 是会话隔离的关键——同一会话 ID 的调用共享上下文,不同 ID 各自独立 microVM,这就是「每会话隔离」在调用方的体现。业务系统接入就是把这段 boto3 调用包进你的服务接口,鉴权、限流、审计都按你们现有的后端规范做,AgentCore 在 AWS 侧兜住运行时的隔离与扩缩。

💡 不想立即上云可以 agentcore launch --local(需本机 Docker)先验证容器化路径;生产推荐默认的 CodeBuild 云构建——可复现、不受本机环境干扰。

Step 6:可观测、状态与清理

6 看日志、查状态、用完销毁
# 查部署状态:
agentcore status

# 日志在 CloudWatch:
#   /aws/bedrock-agentcore/runtimes/{agent-id}-DEFAULT
# 深度追踪:按官方文档开启 CloudWatch
#   Transaction Search 后,可在控制台看
#   每步决策与工具调用的全链路轨迹

# 练习完毕,清理资源:
agentcore destroy

可观测是 AgentCore 相对自建容器最省心的部分:智能体每步推理与工具调用都有轨迹可查,「它为什么调了这个工具」不再靠猜。十月的更新进一步补强治理面:Runtime 新增工具调用前后的生命周期钩子(before/after tool-call,可以做同步的放行或拦截决策)、Identity 新增 Consent Portal(用户同意管理),Gateway 侧增加了私有 CA 证书与可配置限流——这些项以 AWS 十月发行说明为准,按需启用。

destroy 会删掉部署的运行时与关联资源。镜像仓库等个别资源可能需要到控制台手工确认清理;另外 CloudWatch 日志的存储费用是持续性的,长期项目给日志组设保留期,练习项目直接删。

常见问题 FAQ

Q:我用 LangGraph 写的智能体也能部署吗?能。AgentCore 与框架解耦,官方快速开始覆盖 Strands 与 LangGraph,外层只要符合 HTTP 契约(入口收 payload、返回可序列化结果)即可;TypeScript 框架也有对应部署路径。

Q:费用怎么算?按实际消耗的算力秒级计费,无会话时不计费;另有镜像存储、日志、Gateway 调用等项。上线前在 AWS 定价页按你的调用量算一遍,并配置账单告警。

Q:国内区能用吗?AgentCore 已在中国区(北京、宁夏)正式可用,组件齐全;模型可用性与功能节奏以对应区域的官方公告为准。

Q:和直接部署到 ECS/Lambda 比呢?自建要自己处理会话隔离、凭证托管、日志轨迹这三件难事;AgentCore 把它们产品化了。已有成熟容器化运维体系的大团队可以继续自建,小团队与快速验证场景 AgentCore 的性价比明显。

← 返回教程中心