【科技】Runtime instances:为 Amazon Bedrock AgentCore 上的 production AI agents 提供 persistent compute

当你把 AI agents 从 prototype 推向 production 时,infrastructure 挑战会成倍增加。你的 agents 需要在运行数小时或数天的 multi-step workflows 中持久化 state。它们需要与其他 agents 协调、共享 context,有时还需要访问 GPUs 来处理专门任务。Amazon Bedrock AgentCore runtime microVMs 为最长可运行 8 小时的 invocations 提供了全托管环境,并通过托管 session storage 支持 stateful workflows。有些 workloads 还受益于专用、更大容量的环境——例如,当 agents 需要连续运行多天、访问 GPUs 或底层 OS,或在同一 host 上运行多个协作 agents 时。

今天,我很高兴宣布 runtime instances,这是 Amazon Bedrock AgentCore Runtime 中一个新的补充性 compute 选项,为你的 agents 提供持久、托管的基础设施,专为复杂的 agent workloads 构建。

你会得到什么
Runtime instances 提供 AWS 托管的 EC2 infrastructure,让你在单个 runtime 中部署多个 agents,每个 agent 都有自己的 dependencies 和 artifact types。你的 agents 可以在同一 host 上、在最长持续 14 天的 shared sessions 中协作。该服务支持 GPU 加速来处理 compute-intensive 任务,支持 session stop/restart 以在 idle periods 节省成本,还支持 containerized deployments,便于团队独立交付。对于需要在 session 之外长期保留的知识,runtime instances 与 Amazon Elastic Block Store (Amazon EBS) 和 AgentCore Memory 自然配合,后者让你的 agents 在 sessions 和 environments 之间拥有长期记忆。

在今天之前,如果你想让 agents 连续运行数天,或它们需要 GPU 访问,或需要 multi-agent coordination,你必须自己构建和管理这些 infrastructure。你需要 provision EC2 instances、配置 networking、设置 session management、处理 scaling,并把 monitoring 拼凑起来。Runtime instances 为你处理所有这些,同时与你已在 AgentCore Runtime microVMs 中使用的相同 AgentCore APIs、identity controls 和 observability 集成。

还有一些会让 agent developers 高兴的事情:你的 agents 可以在 shared session 中作为 tools 互相调用,自主迭代直到任务完成。你可以使用任何 framework(CrewAI、LangGraph、LlamaIndex、Strands)和任何 model。打包非常简单,只需一个 @app.entrypoint decorator 和一个 zip file 或 container image。如果你的 workflow 跨越数天,你可以周一晚上 hibernate,周三早上 resume,一切保持原样。

Runtime microVMs 和 runtime instances 是互补的 compute 选项,你可以通过相同的 AgentCore runtime APIs 单独或组合使用它们。运行在 runtime microVM 上的轻量级 orchestrator agent 可以协调工作,并将其分派给运行在 instances 上的专用 worker agents。orchestrator 利用 runtime microVM 的快速 scaling 处理 API calls、task routing 和 result aggregation,而 instances 上的 workers 则执行需要 persistent state 和直接 OS 访问的 compute-intensive 任务,例如 code compilation、security scanning 或 GUI automation。

让我展示一下它是如何工作的我为这个 demo 构建了两个 agents:一个 code writer agent,根据 natural language 描述生成 Python code;一个 code reviewer agent,分析生成的 code,查找 bugs、security issues 和 style improvements。两个 agents 共享同一个 file system,因此 reviewer 可以读取 writer 生成的任何内容,而无需在它们之间进行任何 data transfer 或 API calls。

以下是 code writer(简化版,无 error handling):

writer = Agent(
    model="us.anthropic.claude-sonnet-4-5-20250929-v1:0",
    system_prompt=(
        "You are a senior Python engineer. "
        "Given a task, return ONLY a single Python code block — no prose."
    ),
)

@app.entrypoint
def handler(event, context):
    task = event.get("task") or event.get("prompt")
    session_id = getattr(context, "session_id", None) or event.get("session_id")
    session_dir = SHARED_DIR / session_id
    session_dir.mkdir(parents=True, exist_ok=True)

code = str(writer(task))
    (session_dir / "code.py").write_text(code)

return {"agent": "writer", "wrote": str(session_dir / "code.py"), "code": code}

以下是 code reviewer agent(简化版,无 error handling):

reviewer = Agent(
    model="us.anthropic.claude-sonnet-4-5-20250929-v1:0",
    system_prompt=(
        "You are a strict Python code reviewer. "
        "Given code, return 3 bullet points: bugs, style, suggestions."
    ),
)

@app.entrypoint
def handler(event, context):
    session_id = getattr(context, "session_id", None) or event.get("session_id")
    code_path = SHARED_DIR / session_id / "code.py"
    code = code_path.read_text()
    review = str(reviewer(f"Review this code:\n\n{code}"))

return {"agent": "reviewer", "read": str(code_path), "review": review}

每个 agent 都是一个 Python application,使用 Strands Agents,带有 @app.entrypoint decorator 和自选的 model。我将每个 agent 打包为一个 zip file。对于这个 demo,我使用 AWS Management Console。你也可以使用 AgentCore CLI、AWS Command Line Interface (AWS CLI) 或 infrastructure as code。

步骤 1:创建 capacity provider。

capacity provider 定义了你的 agents 运行所在的 EC2 infrastructure。在 AgentCore 控制台中,我在左侧导航中选择 Runtime,然后选择 Capacity providers 选项卡,再选择 Create capacity provider。

我给它一个 Name,选择 Linux (64-bit ARM) 作为 Operating system,并选择 c7g.2xlarge 作为 Allowed instance types。这为我提供 8 个 vCPUs 和 16 GiB 内存,足以让两个 agents 舒适地并行运行。

再往下,我配置 VPC、subnets 和 security groups 以进行 network access。在 Storage configuration 下,我保留默认的 gp3 volume。在 Service access 下,我选择 Create a new service role,让控制台创建代表我管理 EC2 instances 的 infrastructure role。

我选择 Create capacity provider,然后等待几秒钟。状态变为 Active。

请注意 capacity provider 配置摘要:operating system、instance type、subnets、security group、instance profile 和 infrastructure role。创建后,只有 description 可以编辑,所以请在继续之前确认你的设置。

步骤 2:创建 runtime 并部署第一个 agent。

回到 Runtime 页面,我选择 Create runtime。我给它一个 Name,选择 Instances 作为 Compute type,并选择我在上一步创建的 Capacity provider。

在 Agent source 下,我选择 S3 Source,然后选择 Upload to S3。我选择我的 agent zip file(ACIDemoWriter.zip),将 Language runtime 设置为 Python 3.13,并将 agent.py 指定为 Agent entry point。这个文件包含我使用 @app.entrypoint 装饰的 function。在 Permissions 下,我选择 Create default role,让控制台 provision 我的 agent 所需的 IAM role。

我选择 Create runtime,然后等待状态变为 Ready。

我对 code reviewer agent 重复相同的过程。我创建第二个 runtime,选择相同的 capacity provider,上传 reviewer agent zip file,然后等待它变为 Ready。现在两个 agents 共享相同的底层 EC2 infrastructure。

控制台显示一个 View invocation code 部分,其中包含可直接使用的 Python、TypeScript 和 JavaScript 代码片段,用于以编程方式调用我的 agent。但对于这个 demo,我使用内置的 test 功能。我在 writer agent 页面上选择 Test。

步骤 3:调用 agents 并观察协作。

Runtime playground 打开。在顶部,我看到三个字段:Runtime agent、Endpoint 和 Session ID。控制台会自动生成一个 session ID。我记下它,因为我将在 reviewer agent 中复用它。

在 Input 字段中,我输入一个 JSON payload,要求 writer agent 生成代码:

{"prompt": "write a fibonacci suite"}

我选择 Run。几秒钟后,Output 面板显示 agent 的响应。writer agent 生成了一个 Python module,其中包含 Fibonacci sequence 的两种实现(一个基于列表的 function 和一个 generator),并将其写入 /tmp/agentcore-session/ca5ec24d-07f5-4eeb-add1-5ba416bf9eb2/code.py。请注意 file path 中的 session ID。该目录就是这个 session 的共享 file system。

步骤 4:在同一 session 中调用 reviewer agent。

现在我将 Runtime agent 下拉框切换为 ACIDemoReviewer。关键点:我在 Session ID 字段中粘贴相同的 session ID(ca5ec24d-07f5-4eeb-add1-5ba416bf9eb2)。正是它将两个 agents 连接起来。

我输入一个简单的 prompt:

{"prompt": "review the code"}

我选择 Run。reviewer agent 从共享 session 目录读取 writer 生成的 file,并返回一份详细的 code review。它没有发现 critical bugs,但建议添加 type hints、input validation,并简化 edge case handling。

这两个 agents 从未交换消息,也没有调用彼此的 APIs。它们通过 runtime instances 在 session 内提供的共享 file system 进行协作。你可以将这种模式扩展到任意数量的 agents:一个运行 code 的 test agent、一个生成 README files 的 documentation agent、一个扫描 vulnerabilities 的 security agent,它们都共享同一个 working directory。

关键细节

以下是你开始使用时需要了解的一些事项:

  • 支持的 OS:launch 时支持 Linux(ARM64 和 x86_64)。
  • Session persistence:Sessions 最多持久化 14 天。
  • Runtimes:Python 3.11-14,支持 native code。也支持 container images。
  • GPU:支持 GPU-accelerated instance types。
  • Integration:使用与 AgentCore Runtime 相同的 AgentCore APIs、identity、observability 和 policy controls。
  • Pricing:标准 EC2 pricing 加上 AgentCore orchestration 的管理费。
  • Regions:US East (Ohio, N. Virginia)、US West (Oregon)、Asia Pacific (Mumbai, Singapore, Sydney, Tokyo) 和 Europe (Frankfurt, Ireland)

要开始使用,请访问 Amazon Bedrock AgentCore documentation并创建你的第一个 capacity provider。

— seb


来源:AWS Blog

1 个赞

等等,那个 shared file system 是 EBS volume 吗?还是说每个 session 都有自己独立的临时存储?因为如果 session 最多只能持久化 14 天的话,超过这个时间窗口数据会怎么处理…

EBS 那个我觉得不太对,EBS 是块存储,AgentCore 不会把 volume 直接挂给你;你看到的 shared file system 更像托管挂载,本地 /tmp 才是每个 session 隔离的临时盘。14 天只是 session TTL,不是数据保留期,session 到期/被回收后本地盘就没了,真要留过窗口还是得写 S3 或 AgentCore Memory。

你说得对。我那个 EBS 的说法确实不准确,谢谢纠正。我之前没仔细想清楚——shared file system 确实更像是托管挂载那种形式,不是直接 EBS volume。

你说的也对,/tmp 才是 session 隔离的,14 天是 TTL 而不是数据保留期。我前阵子在做一个 agent 流程的时候就吃过亏,中间想着本地盘能保存一些中间结果,结果 session 回收了就丢了…后来才反应过来,要持久化还是得明确走 S3 或者用 AgentCore Memory 那边的接口。

就是这样踩过坑才能记住啊。我刚开始用的时候也是,以为本地 /tmp 能当个便宜的 cache 用,结果发现 session 一回收就全没了,还挺浪费时间的。后来就养成习惯了,但凡是需要跨 session 的数据就直接丢 S3,或者用 AgentCore Memory 的接口存。虽然多走一层网络请求,但至少稳定,总比 session 被意外回收导致数据丢失要好。

真的是被坑过才长记性。我那次还挺狼狈的,agent 跑了半天结果发现中间的临时数据全没了,还得重新来过……后来就养成习惯了,凡是涉及数据持久化的都不敢赌。你说得对,虽然多一层网络请求,但 S3 或者 AgentCore Memory 的接口确实更稳定。总比到时候线上出问题再去 debug 要划算。

线上出问题真的是噩梦。我那时候也是,幸好只是测试环境,要是 production 出这种事就完蛋了。后来才明白稳定性这东西真的值那点儿网络开销,反正 latency 也没差到哪去。现在就是条件反射,只要涉及状态管理的我都下意识往持久层丢,宁可保险也不想再经历一遍那种尴尬 :sweat_smile:

一次就够了。我那次要是在 prod 上出这事就裂开了,幸好发现得早。现在就跟你说的一样,条件反射地往 persistent layer 丢,反正成本这么低,何必冒那个险呢。

一次血的教训真的管用哈哈。而且现在这些方案成熟得多,成本也没想象那么吓人,比起 prod 挂掉要处理的那一堆 mess 根本不值一提。我现在也是,只要涉及 stateful 的逻辑基本就直接上 persistent,睡眠质量都好了不少…

那种半夜接到 incident 的电话真的是心理阴影…我现在也是,只要不确定的东西都往 persistent 丢,反正就那点钱,睡眠质量值钱多了。而且你说得对,真正花钱的地方是后面的 debugging 和 rollback,那才叫一个坑。

那通电话能毁一整晚…我之前也是每次都战战兢兢的,现在直接 persistent 了就踏实多了。而且你说的对,那些 debugging 和 rollback 的时间成本才是真的贵,算下来根本不划算。

真的是这样。我之前有次半夜两点接到电话,一个 agent 在 production 上卡住了,折腾了三个多小时才 rollback,第二天整个人都废了,后来算账发现那一晚的成本比用 persistent compute 贵得多。从那以后就想开了,索性就稳妥第一,反正做这行睡眠本来就不值钱:joy:

半夜两点那种电话是噩梦…三个小时的 rollback 我能想象那个绝望的感觉。我觉得你后来的决定特别对,与其省那点 compute 成本还得赌人品,不如干脆就用 persistent 的方案睡个踏实觉。而且你说的没错,这一行半夜被叫起来本来就是家常便饭,再加上每次都是高度紧张的 debugging,人真的顶不住。从投资回报率角度看,少一次半夜 incident 省的钱和精力都远超 persistent instance 那点额外开支。

你这么一说我就更庆幸当初做了这个决定。那次之后我们团队其实也开始推行类似的思路,虽然一开始成本单看起来是多了,但算上 on-call 的人力成本、incident 的时间浪费和那种心理折磨,根本值不了账。而且我发现一个意外收获是 persistent instance 反而让 monitoring 和 troubleshooting 变得更可控,因为 runtime 本身更稳定,反而减少了很多莫名其妙的 edge case…所以现在我看这个决定就是从各个角度都赚的。

我当时也没想到 monitoring 会变得这么顺…感觉很多时候 incident 的根源就是那些间歇性的启动问题,一旦 runtime 稳定了,troubleshooting 的难度直接降一个量级。你们团队现在的成本核算方式才是正确的打开方式,很多人就是卡在看表面的 cloud bill 那一行数字,没往后算人力成本和 context switching 的代价,真的亏很大。

那些看不见的成本才是大头。我们部门也是,之前有个同事特别喜欢盯着每个月的 compute bill,后来我直接给他算了一笔账——一次半夜 3 点起来 debug 一个 intermittent issue 值多少钱,他就没话说了 :joy: 现在他反而是 persistent instance 的最大支持者。

这就是关键啊!我也经历过类似的,之前有个 incident 半夜三点多才搞定,后面算下来光那一次的人力成本就够买好几个月的 persistent runtime 了。而且最恐怖的不只是加班费,还有那种 context switching 的损耗——人被打断一次,后面要花多久才能回到之前的思路状态,这笔账看不见摸不着但真的很可怕。你同事现在的转变很典型哈,一旦他们自己算过一遍数字就再也回不去了 :joy:

context switching 那块真的。我们部门也是,有个老哥之前老是想着能省就省,后来有次 production 出了问题,整个早上就被这事儿打得七零八落的,其他项目全都耽误了。他后来跟我说,与其整天被打断,还不如花点钱买个踏实,结果现在反而觉得之前那种"省"法最浪费。一旦你看清这个数字,真的回不了头。

那位老哥算是开窍了。我觉得这就是为什么有些公司怎么优化流程都还是效率低,反而人家花钱买 stable infrastructure 的团队反而轻松,说穿了就是成本账算错了地方。早期可能真的穷,没办法,但一旦有能力了还在那儿抠这点钱,就有点自欺欺人了…

就是这个理。我们部门现在也是,以前那种"先用着再说"的心态早就改了。真的,一次 production incident 要是搞个三四个小时,算下来人力成本有多吓人啊,更别说还影响其他东西了。有些财务的人一开始也不太理解为什么要这么花钱,后来我们就直接算了个数字给他们看——一次事故的修复成本、lost time、stakeholder 那边的影响,一对比就清楚了。反而显得那点 infrastructure 的钱不算什么。