在 AgentCore 运行时会话中执行 shell 命令
该InvokeAgentRuntimeCommand操作允许您直接在正在运行的 AgentCore 运行时会话中执行 shell 命令,然后将输出串流回去 HTTP/2。命令与您的代理在同一个容器、文件系统和环境中运行,使用的会话与使用的InvokeAgentRuntime会话相同。这样,您的应用程序就可以使用代理来推理任务的工作流程,并使用命令执行确定性操作(例如运行测试、git 操作或环境设置)。
要拨打电话InvokeAgentRuntimeCommand,您需要bedrock-agentcore:InvokeAgentRuntimeCommand权限。
工作原理
InvokeAgentRuntimeCommand在活动 AgentCore 运行时会话的容器内运行 shell 命令并将输出流回去。
同一个代理,同一个会话
InvokeAgentRuntimeCommand在与相同的代理运行时和会话上运行InvokeAgentRuntime。您无需创建单独的资源。您部署的代理在任何活动会话上都CreateAgentRuntime接受代理调用和命令执行。
注意
默认情况下, AgentCore Runtime microVM 不包含开发者工具,例如gitnpm、或语言运行时。你的命令所依赖的任何工具都必须包含在你的容器镜像中(通过你的 Dockerfile),或者在运行时动态安装。
响应是由三种事件类型组成的流:
| 事件 | 时间 | 包含 |
|---|---|---|
|
|
第一块 |
确认命令已启动 |
|
|
在执行期间 |
|
|
|
最后一块 |
|
实时输出流。你可以在他们运行时看到结果,而不是在他们完成之后看到结果。
先决条件
-
bedrock-agentcore:InvokeAgentRuntimeCommandIAM 权限 -
有效的 AgentCore 运行时端节点 ARN
注意
2026 年 3 月 17 日之后创建的代理支持自动执行命令。如果您在此日期之前部署了代理,则必须重新部署代理以更新代理运行时。
执行命令
例
编码代理工作流程示例
一种常见的模式是在同一个会话中InvokeAgentRuntimeInvokeAgentRuntimeCommand用于推理和确定性运算。
End-to-end 编码代理工作流程示例
import boto3 import json client = boto3.client('bedrock-agentcore', region_name='us-west-2') AGENT_ARN = 'arn:aws:bedrock-agentcore:us-west-2:account-id:runtime/my-agent' SESSION_ID = 'session-id-at-least-33-characters-long' def run_command(command, timeout=60): """Helper to run a command and return the exit code.""" response = client.invoke_agent_runtime_command( agentRuntimeArn=AGENT_ARN, runtimeSessionId=SESSION_ID, contentType='application/json', accept='application/vnd.amazon.eventstream', body={'command': command, 'timeout': timeout} ) for event in response.get('stream', []): if 'chunk' in event and 'contentStop' in event['chunk']: return event['chunk']['contentStop'].get('exitCode') return None # Step 1: Invoke the agent to analyze and write a fix response = client.invoke_agent_runtime( agentRuntimeArn=AGENT_ARN, runtimeSessionId=SESSION_ID, payload=json.dumps({"prompt": "Read JIRA-1234 and implement the fix in /workspace"}).encode() ) # Process agent response... # Step 2: Run tests deterministically exit_code = run_command('/bin/bash -c "cd /workspace && npm test"', timeout=300) # Step 3: If tests pass, commit and push if exit_code == 0: run_command('/bin/bash -c "cd /workspace && git checkout -b fix/JIRA-1234"') run_command('/bin/bash -c "cd /workspace && git add -A && git commit -m \'Fix JIRA-1234\'"') run_command('/bin/bash -c "cd /workspace && git push origin fix/JIRA-1234"')
代理编写代码。平台运行命令。每个人都做自己最擅长的事情。
常见使用案例
- 运行测试套件
-
代理编写代码后,将项目的测试套件作为命令运行。流式响应允许您尽早检测故障,并将特定的错误输出反馈给代理进行迭代。
/bin/bash -c "cd /workspace && npm test 2>&1" - Git 操作
-
分支、提交和推送是确定性操作。代理完成工作后,将它们作为命令运行,将版本控制逻辑排除在 LLM 之外。
/bin/bash -c "cd /workspace && git add -A && git commit -m 'Fix issue'" - 依赖关系安装
-
在调用代理-clone 存储库、安装软件包、设置构建工具之前先引导环境。这种准备作为直接命令运行得更快、更可靠。
/bin/bash -c "pip install -r requirements.txt" - 编译和编译
-
编译步骤和资产生成——任何使用应完全按照指定运行的已知命令运行的已知命令。
/bin/bash -c "cd /workspace && cargo build --release" - 整理和验证
-
在代理编写代码之后,在提交之前,将代码质量检查作为验证门运行。
/bin/bash -c "cd /workspace && npx eslint src/ --format json" - 环境检查
-
检查运行时状态、已安装的软件包、可用工具,这对于调试代理失败很有用。
/bin/bash -c "python --version && node --version && git --version" - 数据操作
-
获取数据集、上传结果、运行数据转换——作为直接命令运行得更快的网络和计算操作。
/bin/bash -c "aws s3 cp s3://my-bucket/data.csv /workspace/"
主要设计选择
- One-shot,非交互式执行
-
每个命令都会生成一个新的 bash 进程,运行到完成(或超时),然后返回。命令之间没有持久的 shell 会话。这与代理框架使用命令执行的方式相匹配——制作命令、运行命令、读取输出、决定下一步要做什么。
- 直播回复已结束 HTTP/2
-
输出在生成时到达,直到完成才进行缓冲。需要两分钟
npm test的 A 会实时直播结果。您的应用程序可以在最初的几秒钟内检测到故障,并提早取消,而不必等待完整运行。 - 容器隔离
-
命令与代理代码在同一个容器内执行。他们看到的是相同的文件系统、环境变量和已安装的软件包。
/workspace/fix.py正在运行的命令可以立即看到代理写入的文件cat /workspace/fix.py。 - Non-blocking 到运行时
-
命令执行不会阻止代理调用。可以在同一个会话中同时调用代理和运行命令。平台处理并发。
- 命令间无状态
-
每个命令都重新启动——没有 shell 历史记录,与之前的命令相比,环境变量的更改不会延续。如果你需要状态,请在命令本身中对其进行编码:
cd /workspace && export NODE_ENV=test && npm test。
安全注意事项
提示
有关所有 Runtime 安全建议的综合视图,请参阅 R AgentCore untime 安全最佳实践。
重要
在责任 AWS 共担模式下,您应对在 AgentCore 运行时会话中执行的命令的安全性负责。 AWS 在 microVM 级别提供安全的基础设施和隔离。您对所运行的命令、处理的数据以及您配置的访问控制负责。
命令执行的安全边界是 microVM。每个 AgentCore 运行时会话都在具有自己的内核、内存和文件系统的隔离的 microVM 中运行。您执行的命令无法访问其他客户的工作负载或逃离虚拟机边界。但是,在您的虚拟机中,命令可以完全访问容器文件系统以及您配置的任何凭据或机密。
使用 CloudWatch 日志进行审计
AgentCore Runtime 会将请求编号和输入命令发送到您的代理的 Amazon CloudWatch 日志组。您可以使用这些日志来监视命令活动,并对会话中执行了哪些命令进行审计跟踪。命令执行输出(stdout 和 stderr)将流式传输回您的应用程序,并且不会由服务记录。
使用审计 CloudTrail
AWS CloudTrail 在您的账户中记录 InvokeAgentRuntimeCommand API 调用。每条记录都包含元数据,例如来电者身份、时间戳、源 IP 地址和响应状态。 CloudTrail 不记录请求或响应有效负载。 CloudTrail 用于审计谁执行了命令以及何时执行了命令,然后使用请求 ID 与 Logs CloudWatch 日志关联以查看执行了什么命令。
对于敏感工作负载,可以考虑实施其他控制措施,例如:
-
使用 IAM 策略限制哪些委托人可以调用
InvokeAgentRuntimeCommand -
配置 VPC 终端节点以保持网络内的流量
-
设置 CloudWatch 日志指标筛选器和警报以检测意外的命令模式
-
定期查看 CloudTrail 日志中是否有未经授权的访问尝试
错误处理
使用该InvokeAgentRuntimeCommand操作时,您可能会遇到以下错误:
- ValidationException
-
在请求参数无效时发生。检查您的代理 ARN、会话 ID 和命令的格式是否正确。该命令必须介于 1 字节到 64 KB 之间,超时时间必须介于 1 到 3600 秒之间,并且会话 ID 必须至少为 33 个字符。
- ResourceNotFoundException
-
在找不到指定的代理运行时或会话时发生。验证代理 ARN 是否正确以及会话是否处于活动状态。
- AccessDeniedException
-
当你没有必要的权限时发生。确保您的 IAM 策略包含
bedrock-agentcore:InvokeAgentRuntimeCommand权限。 - ThrottlingException
-
当您超过 25 TPS 的请求速率限制时发生。在应用程序中实现指数退避和重试逻辑。
以非零退出代码结束的命令不是 API 错误。检查contentStop事件exitCode中的以确定命令本身是否成功。如果status为,TIMED_OUT则表示命令已超过指定的超时时间。
最佳实践
使用InvokeAgentRuntimeCommand操作时,请遵循以下最佳实践:
-
InvokeAgentRuntimeCommand用于确定性操作(测试、git、构建)和推InvokeAgentRuntime理任务。不要通过 LLM 路由确定性操作。 -
通过 Dockerfile 在容器映像中包含您的命令所依赖的任何开发者工具(例如
gitnpm、或语言运行时)。 -
务必
exitCode在contentStop事件中检查,以确定命令是否成功。 -
设置适当的超时时间。一个测试套件可能需要 5 分钟,而一个测试套件
git push可能只需要 30 秒。 -
以增量方式处理流式输出,以尽早发现故障。您可以取消长时间运行的命令,而不必等待命令完成。
-
使用
&&链接(例如cd /workspace && export NODE_ENV=test && npm test)对命令本身的状态进行编码,因为每个命令都会启动一个新的 bash 进程。 -
使用 UUID 作为会话 ID,以满足 33 个字符的最低要求(例如)。
12345678-1234-1234-1234-123456789012