Amazon Bedrock Agents 已更名为 Bedrock Agents Classic,并从 2026 年 7 月 30 日起停止向新客户开放。现有 Agent 不会因此立即下线,但新账号可能在 CreateAgentInvokeInlineAgent 收到 403,Classic 的模型目录也会冻结。可靠的应对方式不是匆忙重写,而是先盘点账号资格,再按能力差异选择 AgentCore harness 或 code-defined runtime,并用可回放评测验证行为。

这次变化会影响哪些团队?

AWS 官方维护模式说明给出了很窄但很重要的边界:过去 12 个月有 Bedrock Agents 活动的账号会被加入许可名单;没有历史使用记录的账号调用 CreateAgentInvokeInlineAgent 时会收到 AccessDeniedException,HTTP 状态码为 403。这个资格按 AWS 账号计算,不会自动从 Organization、付款账号或生产账号继承。

因此,最先出问题的往往不是正在运行的生产环境,而是低频 staging、新客户隔离账号、灾备账号和由 Control Tower 新建的项目账号。同一份 IaC 在旧账号成功、在新账号失败,并不自动说明 IAM policy 有误。

维护模式也不等于 EOL。官方目前没有给出迁移截止日期或计划中的终止日期;InvokeAgent、更新、查询、别名、action group 和 Knowledge Base 等既有能力继续可用。另一方面,Classic 的模型目录冻结在生效日,之后的新模型只通过 AgentCore 提供。Amazon Bedrock 的模型推理、Knowledge Bases 与 Guardrails 本身不受这一冻结影响。

场景 近期风险 应对优先级
存量生产账号持续调用 Classic 运行不因公告自动中断 先建立季度复查与回退计划
长期闲置的 staging 或灾备账号 12 个月活动窗口可能带来不确定性 尽快做只读盘点与受控探测
新客户或新项目账号 创建与 inline 调用可能直接 403 在开户流水线前置验证
需要 7 月 30 日之后的新模型 Classic 编排层无法选择 评估 AgentCore 迁移

如何在不误伤生产的前提下盘点?

第一步是建立账号矩阵,而不是立即运行创建命令。至少记录账号、区域、现有 Agent、最近一次已确认活动、IaC 所有者、业务等级和可接受停机窗口。CloudTrail 的默认事件历史未必覆盖完整的 12 个月,因此“没有查到事件”不能证明账号一定不在许可名单。

第二步,在每个账号中调用只读的 ListAgents,确认是否存在存量资源。下面只是命令形态示例,本文没有实际访问任何 AWS 账号:

aws bedrock-agent list-agents \
  --region us-west-2 \
  --max-results 20

第三步,把真正的准入探测限制在专用沙箱。CreateAgent 会创建持久资源;InvokeInlineAgent 不会留下 Agent 资源,但仍可能触发模型调用、权限检查和费用。探测必须使用明确的预算、区域、模型与清理策略,不能在生产账号中批量盲测。

第四步,把结果分成“已确认可创建”“已确认被限制”“仅有历史线索”“尚未验证”四类。不要把 AccessDeniedException 一概归因于维护模式:模型权限、区域支持、SCP、IAM 和请求参数也可能返回授权类错误。只有错误码、消息与官方描述一致,才应标记为维护模式限制。

如果你需要先完善 Agent 的安全基线,可以配合现有的 MCP Server 安全清单检查工具审批、最小权限和审计边界;迁移过程中则应把准入探测与真正的业务流量隔离。

AgentCore harness 与 code-defined runtime 怎么选?

迁移前先按行为而不是资源名称做清单。Classic 的 action group、Knowledge Base、session、memory、guardrail、code interpreter、prompt override、自定义 orchestrator 和多 Agent 协作,不能简单视为一组等名配置。

AgentCore harness 适合希望保留声明式托管体验、Agent loop 相对标准、愿意用 system prompt 和显式工具表达行为的团队。code-defined runtime 更适合已经拥有自定义编排、阶段级 prompt、复杂 supervisor/router、多模型路由或框架专属控制面的团队。

Classic 依赖 迁移判断 推荐落点
简单 action group 先把输入输出定义成平台无关 schema Gateway 暴露的工具或代码工具
Knowledge Base 保留检索契约与引用语义 Gateway 前置或代码级检索工具
AMAZON.UserInput 自动追问不应隐式消失 显式 inline function tool,由客户端接回控制权
四阶段 prompt override 单一 system prompt 未必等价 code-defined agent 或显式阶段函数
supervisor / router agent-as-tool 只能覆盖部分模式 复杂路由进入自定义编排
自定义 orchestrator 不要强塞进声明式 harness AgentCore runtime

这里最重要的不是选哪个 SDK,而是把业务约束留在自己控制的层。业务任务、工具 schema、幂等语义、失败分类、知识检索契约和评测集不应直接依赖平台对象;具体厂商 SDK 只出现在适配层。已有的 A2A 1.0 迁移指南同样强调协议对象与业务状态分离,这个原则也适用于托管 Agent 迁移。

如何设计一条可回退的迁移路径?

1. 冻结基线,而不是冻结开发

从真实但脱敏的任务中选出一组评测样本,固定输入、允许使用的工具、期望的业务结果、必须拒绝的动作和人工复核规则。不要只保存最终文本;还要保存工具调用序列、参数、权限决策、引用和终止原因。

2. 建立平台无关的运行协议

下面的骨架只是设计示例,不代表可直接运行的 AWS 实现:

class AgentRuntime(Protocol):
    def run(self, task: Task, tools: list[ToolSpec]) -> RunResult: ...

class ClassicAdapter:
    ...

class AgentCoreAdapter:
    ...

业务代码只依赖 AgentRuntime。工具定义独立保存,适配器负责把 schema 转换成 action group、MCP tool 或 framework tool。这样,迁移差异会集中在边界层,而不是扩散到每个业务用例。

3. 先迁低风险流量

先让 AgentCore 在影子模式读取相同输入,但禁止产生真实副作用。比较任务完成、工具选择、拒绝策略、延迟、token 消耗和错误类型。影子结果不能直接写回用户状态,也不能共享可能造成重复执行的幂等键。

4. 用显式门禁逐步放量

建议至少设定五类门禁:关键任务成功率不低于基线;禁止动作零突破;工具参数符合 schema;P95 延迟与成本在预算内;发生异常时能切回 Classic 或人工流程。所有阈值都应来自团队自己的验证,不能把厂商给出的迁移工时或演示结果当作生产基准。

5. 保持双写之外的单一执行权

Agent 迁移最危险的故障不是回答不同,而是两个运行时都执行了付款、发信、删除或部署。影子阶段只允许一个系统拥有副作用执行权;切流阶段使用统一的操作 ID 和下游幂等约束,避免双执行。

链路观测也必须随迁移一起完成。可以参考 FastAPI OpenTelemetry 生产链路追踪指南,把请求、Agent run、工具调用和下游任务串到同一 trace 中,但不要记录 prompt 中的凭据或用户敏感数据。

IaC 和多账号环境要改什么?

不要在模板中根据 403 临时放宽 IAM。更稳妥的做法是把“目标运行时”设为明确参数,并在部署前完成账号能力检查:

Parameters:
  AgentRuntimeMode:
    Type: String
    AllowedValues: [classic, agentcore]

Classic 只用于已确认具备资格的存量环境;新环境默认进入 AgentCore 路径。两条路径共享业务配置、工具 schema 和评测数据,但资源定义相互隔离。这样可以避免一个条件表达式在账号状态不明时创建半套资源。

还要逐组件检查区域,而不是只问“AgentCore 是否支持这个 Region”。AgentCore 官方区域表按 Runtime、Gateway、Identity、Memory、Observability、Evaluations 等能力列出覆盖;你的目标区域可能支持核心 runtime,却不支持迁移依赖的某个组件。

常见失败模式有哪些?

  • 把维护模式当成 IAM 故障。 结果是不断扩大权限,却没有改变账号资格。
  • 把“存量能跑”当成“灾备可恢复”。 灾备账号可能从未创建过 Agent,真正演练时才暴露限制。
  • 只迁资源,不迁行为。 prompt 阶段、追问、工具返回控制权和多 Agent 路由的差异会造成静默漂移。
  • 影子系统也执行副作用。 两套 runtime 同时调用工具,造成重复订单或重复通知。
  • 先删 Classic 再验证 AgentCore。 官方工具和迁移流程不应成为删除源系统的授权;切换完成前保留可回退路径。
  • 把厂商估计写进承诺。 “小时级”是特定简单配置的官方描述,不是你的真实工期。

AWS 提供的 agent toolkit for AWS可以用于发现和迁移辅助,但它仍应在代码审查、权限隔离和变更窗口内运行。任何自动化工具都不应直接获得删除源 Agent 或绕过审批的权限。

上线前检查清单

  • [ ] 已按账号和区域记录 Classic 使用与资格证据。
  • [ ] 新账号 IaC 不再默认创建 Classic Agent。
  • [ ] 已选择 harness 或 code-defined runtime,并记录选择理由。
  • [ ] 工具 schema、幂等、超时、重试与审批不依赖厂商 SDK。
  • [ ] 已覆盖 prompt override、用户追问、多 Agent 与自定义编排差异。
  • [ ] 影子阶段只有一个系统拥有副作用执行权。
  • [ ] 关键任务、拒绝动作、延迟、成本和可观测性通过自有门禁。
  • [ ] AgentCore 目标区域的每个必要组件均已核对。
  • [ ] Classic 回退路径仍可用,且没有提前删除源资源。

FAQ

现有 Bedrock Agent 会在 2026 年 7 月 30 日停止吗?

不会因该日期自动停止。官方描述是进入维护模式并关闭新客户入口,且目前没有计划中的 EOL 日期。但这不等于可以永远不评估:模型目录冻结、新账号限制和功能演进停止都会持续增加迁移压力。

可以通过修改 IAM 解决新账号的 403 吗?

如果错误确实来自维护模式许可名单,扩大 IAM 权限不会改变结果。应先核对错误消息、账号历史和官方规则,再排除 SCP、IAM、区域或模型访问等其他原因。

所有团队都应该立即迁移吗?

不一定。存量系统稳定、无需新模型、没有新账号扩展需求的团队可以先建立风险登记和周期复查;需要新账号、新模型或复杂持续演进的团队应把迁移提前。决定应由业务寿命、恢复目标和验证成本驱动,而不是公告情绪。

迁移完成等于可以删除 Classic 吗?

不等于。先完成真实流量灰度、回退演练和观察窗口,再通过独立变更审批删除源资源。迁移工具“不会修改源 Agent”的保证,也不等于你的部署脚本没有删除权限。

这次变化真正需要修复的不是一个 403,而是架构对托管编排层的隐式依赖。只要账号资格、工具契约、行为评测和回退权都可见,维护模式就能从突发事故变成一项可管理的迁移工作。