AgentCore 运行时故障排除
本疑难解答主题可帮助您识别和解决使用 AgentCore Runtime 时的常见问题。通过遵循这些解决方案,您可以快速诊断和修复代理运行时的问题。
我的代理调用失败,并显示 “此运行时不是” MMDSv2-enabled ValidationException
发生这种情况时:通过InvokeAgentRuntime、、ExecuteCommandInvokeAgentRuntimeWithWebSocketStream、或调用代理运行时InvokeAgentRuntimeCommandShell时 GetAgentCard
为什么会发生这种情况:从 2026 年 6 月 30 日起,亚马逊 Bedrock Run AgentCore time 要求所有代理运行时都使用 mmdsV2(microVM 元数据服务版本 2)。该服务拒绝针对未metadataConfiguration设置或设置为或的运行时的调用requireMMDSV2。false null
解决方案:true在requireMMDSV2设置UpdateAgentRuntime为 in 的情况下拨打电话metadataConfiguration:
import boto3 client = boto3.client('bedrock-agentcore-control', region_name='us-west-2') try: client.update_agent_runtime( agentRuntimeId='your-agent-runtime-id', metadataConfiguration={ 'requireMMDSV2': True } ) print("MMDSv2 enabled successfully.") except client.exceptions.ResourceNotFoundException as e: print(f"Runtime not found: {e}") except Exception as e: print(f"Error enabling MMDSv2: {e}")
更新后,新的调用将成功。现有会话不受影响。
我的代理调用失败,出现 504 网关超时错误
发生这种情况时:通过 SDK 或控制台调用代理期间
为什么会发生这种情况:多种因素可能会使您的代理无法在超时时间内做出响应
有几个因素可能导致这种情况:
-
容器问题:确保你的 Docker 镜像暴露了端口 8080 并且有路径
/invocations -
ARM64 兼容性:目前您的容器必须兼容 ARM64
-
重试逻辑:查看用于处理临时问题的重试机制
拉取 Python 基础镜像时,我的 Docker 构建失败并显示 “403 禁止”
发生这种情况时:在使用基础映像期间docker build或使用public.ecr.aws基础映像docker run时
为什么会出现这种情况:ECR 公共身份验证问题——身份验证过期或缺失是一个常见问题。
解决方案:要么登录 ECR Public,要么完全注销:
# Option 1: Login to ECR Public aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws # Option 2: Logout (recommended for avoiding token expiration) docker logout public.ecr.aws # Option 3: Use Docker Hub directly in Dockerfile FROM python:3.10-slim # instead of public.ecr.aws/docker/library/python:3.10-slim
使用 boto3 时出现了 “未知服务:'bedrock-agent-core-runtime'” 错误
发生这种情况时:使用 boto3 软件开发工具包调用 Amazon Bedrock AgentCore API 时
为什么会发生这种情况:boto3 库过时——常见问题,因为大多数安装都没有最新的 SDK
解决方案:更新到最新的 boto3 和 botocore 版本:
pip install --upgrade boto3 botocore # Minimum versions: boto3 1.39.8+, botocore 1.33.8+
尝试创建 Amazon Bedrock AgentCore 运行时我得到 AccessDeniedException “”
发生这种情况时:在通过控制台、SDK 或 CLI 创建代理期间
发生这种情况的原因:可能是您的用户缺少权限,或者没有为 Amazon Bedrock 正确配置执行角色 AgentCore
解决方案:有几个因素可能导致这种情况:
-
呼叫者缺少权限。确保来电者的凭据有
bedrock-agentcore:CreateAgentRuntime。 -
执行角色不能由 Bedrock Amazon Bedrock 担任。 AgentCore确保执行角色遵循此关于 Amazon Bedrock AgentCore Runtime 执行角色权限的指南。
我的 Docker 构建失败并出现 “exec/bin/sh: exec 格式错误”
发生这种情况时:为 Amazon Bedrock AgentCore 部署构建容器时
为什么会发生这种情况:在没有适当的跨平台设置的情况下在 x86 系统上构建 ARM64 容器
解决方案:构建兼容 ARM64 的容器。你可以考虑使用 buildx
与 Amazon Bedrock AgentCore Runtime 一起使用的 Docker 容器有哪些要求?
请查看 Amazon Bedrock AgentCore 运行时要求,了解完整详情。
总之,您的 Docker 容器必须满足以下要求:
-
端口:公开端口 8080(即将支持其他端口)
-
端点:必须有可用
/invocations路径 -
架构:必须兼容 ARM64
-
响应:应处理预期的有效载荷格式
我的长时间运行的工具在 15 分钟后中断了
有关信息,请参阅使用 Amazon Bedrock Amazon Bedrock Runtime 处理异步和长 AgentCore 时间运行的代理,了解完整详情。
发生这种情况时:在长时间运行的代理操作或复杂的工作流程中
发生这种情况的原因:Amazon Bedrock AgentCore 会在处于非活动状态 15 分钟后自动终止会话。平台根据/ping响应确定活动:会话报告保持活动状态,而会话报告HealthyBusyHealthy则被视为符合闲置资格,其空闲时间是从status上次更改时开始计算的(参见下面的time_of_last_update字段)。
解决方案:确保您的/ping端点在后台工作进行HealthyBusy时返回:
{"status": "HealthyBusy"}
如果你使用的是 Bedrock AgentCore SDK,ping 响应会自动处理。对于自定义实现,请确保您的 ping 处理程序HealthyBusy在处理时返回。
我的闲置会话没有被释放,而且我的会话配额已经用完了
发生这种情况时:会话计数在负载下持续攀升,即使每个会话都处于空闲状态,也不会在空闲超时后释放会话(例如,在突发调用期间maxVms出现 ServiceQuotaExceededException /错误)。
为什么会发生这种情况:当会话报告时Healthy,平台会衡量您的/ping响应中它在time_of_last_update现场闲置了多长时间,这必须反映出status上次更改的时间。如果您的 ping 处理程序在每次 ping 时都设置time_of_last_update为当前时间,则报告的空闲时间会不断重置,从而防止触发空闲超时。然后,会话将持续到MaxLifetime并且可能会耗尽您的会话配额。
解决方案:time_of_last_update仅在status实际更改时更新,或者完全省略它,以便平台自行跟踪状态变化:
{"status": "Healthy"}
如果您使用的是 Bedrock AgentCore SDK,请升级到最新版本,以便正确处理 ping 响应。作为权宜之计,调用会话会StopRuntimeSession话卡住。
如何在代理代码SessionId 中访问运行时以标记或分组资源?
何时适用:您想按当前代理运行时会话对资源(例如 S3 对象、日志)进行分组、标记或跟踪。
解决方案
-
如果你使用的是 Bedrock Agents SDK,请使用
context.session_id。 -
如果您要构建自定义运行时服务器,请将其从
X-Amzn-Bedrock-AgentCore-Runtime-Session-IdHTTP 标头中提取。
解决方案 1:对于使用 Bedrock Amazon Bedrock AgentCore SDK 的代理,请context.session_id从您的代理入口点使用
@app.entrypoint def my_agent(payload, context): session_id = context.session_id # Use session_id for S3 object tagging/organization s3_client = boto3.client('s3') s3_client.put_object( Bucket='my-bucket', Key=f'agent-outputs/{session_id}/output.json', Body=json.dumps(result), Tagging=f'SessionId={session_id}' ) return result
解决方案 2:对于自定义运行时 HTTP 服务器
运行时会话 ID 在此 HTTP 标头中传递。从传入的请求中解析它,然后将其用于标记、关联或下游传播。
X-Amzn-Bedrock-AgentCore-Runtime-Session-Id: <value>
我有 RuntimeClientError (403) 个问题
问题
尝试调用代理运行时时,您将收到 403 RuntimeClientError “”。
原因
发生此错误的原因通常是:
-
容器启动失败
-
执行角色的权限问题
-
持有者令牌的身份验证问题
解决方法
请按照以下步骤解决问题:
-
检查 CloudWatch 日志:启动容器时出现的任何问题都将反映为 403- RuntimeClientError。导航到以下 CloudWatch 日志组以检查启动错误:
/aws/bedrock-agentcore/runtimes/<agent_id>-<endpoint_name>/[runtime-logs] -
验证执行角色:确保您的代理的执行角色具有必要的权限。有关更多信息,请参阅AgentCore 运行时执行角色。
-
验证身份验证:对于 MCP 协议代理,请确保您的持有者令牌有效且未过期。
我的 CloudWatch 日志丢失或为空
问题
你遇到了错误,但看不到任何相关的登录信息 CloudWatch。
解决方案
尝试以下方法来诊断问题:
-
检查正确的日志组:确保您在正确的 CloudWatch 日志组中查找。标准模式是:
/aws/bedrock-agentcore/runtimes/<agent_id>-<endpoint_name>/runtime-logs -
在本地运行以进行诊断:如果没有 CloudWatch 日志,请尝试使用与运行时调用时使用的完全相同的有效负载在本地 AgentCore 运行代理容器。这可以帮助识别日志中可能看不到的问题。
-
启用 Verbose Logging:更新代理代码以包含更详细的日志记录,尤其是在入口点和任何错误处理逻辑周围。
我有有效载荷格式问题
问题
即使容器成功启动,您的代理运行时调用也会失败。
解决方法
请按照以下步骤解决负载格式问题:
-
验证有效负载结构:确保您的有效负载结构与代理的期望相匹配。特别注意:
-
如果您的代理代码需要在有效负载中包含
input关键字,请务必将其包括在内:{ "input": { "prompt": "Your question here" } } -
不只是:
{ "prompt": "Your question here" }
-
-
查看文档:查看文档中预期的输入格式。
我需要帮助来理解 HTTP 错误代码
问题
您的代理返回难以解释的 HTTP 错误代码。
错误消息示例
你可能会看到如下错误:
An error occurred (RuntimeClientError) when calling the InvokeAgentRuntime operation: Received error (<HTTP Status Code>) from runtime. Please check your CloudWatch logs for more information
解决方法
以下是最常见的错误代码及其含义:
- 422 无法处理的实体
-
当容器遇到输入负载的验证问题时,就会发生这种情况。
常见原因:
-
有效载荷中缺少必填字段(例如,缺少 “输入” 字段)
-
字段的数据类型不正确
-
有效载荷的格式无效
-
- 403 禁止访问
-
身份验证或授权问题。
检查您的不记名令牌或 IAM 权限。
- 500 内部服务器错误
-
代理代码中的运行时异常。
查看 CloudWatch 日志以获取详细的堆栈跟踪。
我需要有关测试代理的建议
要系统地调试代理运行时问题,请执行以下操作:
先在本地测试
部署到 AgentCore 运行时之前:
-
使用相同的 Docker 镜像在本地运行代理容器
-
验证它是否适用于完全相同的有效载荷
比较有效载荷
确保环境之间的一致性:
-
确保本地测试和 AgentCore 运行时调用之间的负载结构相同
-
特别注意嵌套诸如 “输入” 和 “提示” 之类的字段
我需要帮助调试容器问题
如果您怀疑与容器有关的问题:
在本地拉取并运行
在本地计算机上测试您的容器镜像:
docker pull <your-ecr-repo-uri> docker run -p 8080:8080 <your-ecr-repo-uri>
用卷曲测试
向你的本地容器发送测试请求:
curl -X POST http://localhost:8080/invocations \ -H "Content-Type: application/json" \ -d '{"input": {"prompt": "Hello world!"}}'
查看容器日志
检查容器的输出是否有错误:
docker logs <container-id>
我需要帮助 MCP 协议代理故障排除
对于 MCP 协议代理,请执行以下特定的故障排除步骤:
验证端点路径
MCP 服务器应该监听 0.0.0.0:8000/mcp/
使用 MCP Inspector
使用 MCP Inspector 工具进行测试:
-
安装并运行 MCP Inspector:
npx @modelcontextprotocol/inspector -
通过 Connect 连接到您的本地服务器
http://localhost:8000/mcp -
对于已部署的代理,请使用正确的 URL-encoded 端点
身份验证问题
检查身份验证配置:
-
确保在标题中正确设置了不记名令牌
-
验证您的 Cognito 用户池设置是否正确
我需要帮助来排除使用双向流媒体的问题 WebSocket
对于使用 WebSocket 代理进行双向流式传输,请按照以下特定的故障排除步骤进行操作:
验证端点配置
WebSocket 代理必须在端口 8080 上运行并在路径上/ws提供 WebSocket 连接
在本地进行测试,复杂性越来越高
在部署之前,先从简单的本地测试开始:
-
测试基本连接:验证您的代理是否接受 WebSocket 连接
ws://localhost:8080/ws -
测试消息处理:发送简单短信并验证回复
-
测试会话管理:验证持续对话是否按预期运行
-
测试错误处理:确保您的代理优雅地处理连接中断和格式错误的消息
身份验证问题
检查已部署代理的身份验证配置:
-
对于 OAuth:确保持有者令牌有效且未过期
-
对于 Sigv4:确保签名算法的输入正确,包括 WebSocket 网址、标头和请求方法
-
使用与您的代理配置相匹配的正确身份验证方法
常见的连接问题
解决常见的 WebSocket 连接问题:
-
验证您的代理和客户期望之间的消息格式兼容性
-
配置消息帧分段或实现分块,使其保持在消息帧大小 (64 KB) 和消息帧速率(每秒 250 帧)限制之内,以防止连接关闭
我的代码更改未反映在现有会话中
问题
您已经使用新代码更新了代理运行时,但现有会话继续使用旧版本。
为什么会发生这种情况
每个 microVM 会话都是使用创建会话时部署的代码资产 (agentRuntimeArtifact) 创建的。建立会话后,它将继续使用该版本的代码,直到会话终止,即使在执行UpdateAgentRuntime操作的过程中更新了代码资产也是如此。
解决方案
要访问更新后的代码,请使用新的会话 ID。
从 Lambda 函数调用我的运行时时,跨度丢失了
发生这种情况时:从 Lambda AgentCore 函数调用运行时时
为什么会发生这种情况:Lambda 会生成自己的X-Amzn-Trace-Id标头。如果 Lambda 跟踪有Sampled=0,则此非采样上下文将传播到 AgentCore 运行时,运行时会跳过该调用的跨度生成。
解决方案:
-
启用 Lambda 主动跟踪:在 Lambda 函数上启用 X-Ray 主动跟踪,使其生成采样跟踪 ()。
Sampled=1 -
验证 CloudWatch 交易搜索:确保您已完成配置可观测性中的设置,并且您的跟踪区段目标已设置为 CloudWatch 日志。
-
检查采样决定:在 Lambda 函数中记录
_X_AMZN_TRACE_ID环境变量。如果显示Sampled=0,则表示未启用主动跟踪,或者上游调用方正在做出采样决定。
我的 S3 文件或 EFS 挂载失败,显示 “访问被拒绝”
发生这种情况时:在调用配置了 S3 文件或 EFS 存储的代理期间
为什么会发生这种情况:执行角色缺少所需的文件系统权限。有关配置永久存储的更多信息,请参阅 AgentCore Runtime 的文件系统配置。
解决方案:
对于 S3 文件,请确保您的执行角色具有:
{ "Effect": "Allow", "Action": [ "s3files:ClientMount", "s3files:ClientWrite" ], "Resource": "arn:aws:s3files:<region>:<account>:file-system/*", "Condition": { "StringEquals": { "s3files:AccessPointArn": "<your-access-point-arn>" } } }
对于 EFS,请确保您的执行角色具有:
{ "Effect": "Allow", "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite" ], "Resource": "arn:aws:elasticfilesystem:<region>:<account>:file-system/<fs-id>", "Condition": { "StringEquals": { "elasticfilesystem:AccessPointArn": "<your-access-point-arn>" } } }
elasticfilesystem:ClientWrite如果您的代理只需要读取权限,则省略s3files:ClientWrite或者。
我的 S3 文件或 EFS 挂载失败,显示 “ResourceNotFound”
发生这种情况时:在调用配置了 S3 文件或 EFS 存储的代理期间
为什么会出现这种情况:文件系统或接入点在代理创建后被删除,或者 ID 不正确。
解决方案:
-
验证文件系统是否存在:
-
S3 文件:
aws s3files list-file-systems --region <region> -
EFS:
aws efs describe-file-systems --region <region>
-
-
验证接入点是否存在:
-
S3 文件:
aws s3files list-access-points --file-system-id <fs-id> --region <region> -
EFS:
aws efs describe-access-points --file-system-id <fs-id> --region <region>
-
-
验证所有必需的可用区中是否存在挂载目标:
-
S3 文件:
aws s3files list-mount-targets --file-system-id <fs-id> --region <region> -
EFS:
aws efs describe-mount-targets --file-system-id <fs-id> --region <region> -
确保每个挂载目标都显示可用状态并且与代理运行时位于同一 VPC 中。
-
-
如果资源已删除,请重新创建该资源并使用新的接入点 ARN 更新代理运行时
我的 S3 文件或 EFS 挂载超时了
发生这种情况时:在调用配置了 S3 文件或 EFS 存储的代理期间。调用可能比平时更长的时间才会失败。
发生这种情况的原因:VPC 网络配置阻塞了代理计算和文件系统挂载目标之间的 NFS 流量(端口 2049)。
解决方案:
-
检查挂载目标上的安全组:验证挂载目标上的安全组允许代理运行时使用的安全组在端口 2049 上入站 TCP
-
在代理运行时检查安全组:验证代理运行时使用的安全组允许端口 2049 上的出站 TCP 进入装载目标安全组
-
验证挂载目标是否存在于正确的可用区中:挂载目标必须与代理运行时配置的子网位于相同的可用区中:
-
S3 文件:
aws s3files list-mount-targets --file-system-id <fs-id> --region <region> -
EFS:
aws efs describe-mount-targets --file-system-id <fs-id> --region <region>
-
-
验证子网路由:确保您的子网具有正确的路由(CIDR 范围内的本地 VPC 路由)
写入已安装的文件系统时,我收到 “权限被拒绝”
发生这种情况时:代理调用成功,代理可以从装载中读取文件,但写入失败并显示 “权限被拒绝”
为什么会发生这种情况:要么是 IAM 角色缺少写入权限,要么是创建接入点时设置的目录上的 POSIX 权限不允许代理的用户写入。
解决方案:
-
检查 IAM 权限:确保您的执行角色包括
s3files:ClientWrite(S3 文件)或elasticfilesystem:ClientWrite(EFS)。如果没有写入权限,则挂载是只读的。有关更多信息,请参阅 Amazon Bedrock AgentCore 运行时执行角色的权限。 -
检查 POSIX 权限:如果目录由与您的容器进程不同的用户所有,则写入将被拒绝。或者:
-
将接入点的 PosixUser 设置为与容 uid/gid 器的运行方式相匹配,因此所有操作都以该用户身份执行。
-
将目录权限设置为 777 以允许所有用户写入。
-
我的容器启动失败,在高层图像上出现 HTTP 424 错误
发生这种情况时:您的InvokeAgentRuntime呼叫返回 HTTP 424(依赖关系失败),并且会显示Failed to mount overlay: No such file or directory代理日志。当你的容器镜像有超过 53 个图层并且使用非数字 USER 指令(例如,USER myuser代替USER 1000)时,就会发生这种情况。
为什么会发生这种情况:包含许多层的容器镜像与非数字 USER 指令相结合,可能会导致初始化失败。
解决方案:使用以下解决方法之一:
-
使用数字用户指令:在你的 Dockerfile 中,
USER myuser替换为数字 UID(例如)。USER 1000您可以通过在容器id myuser内运行来找到用户的 UID。这完全避免了文件系统的挂载。 -
减少图像层:使用多阶段 Docker 版本将图像缩小到 53 层以下。您可以通过以下方式检查图像的图层数:
docker inspect <image> | jq '.[0].RootFS.Layers | length'
-
压平图层:使用
docker build --squash或类似的工具docker-squash来拼合图像图层。
最佳实践
启用全面日志
在代理中实现彻底的登录:
-
包括 request/response 登录您的代理
-
记录关键路径和错误情况
使用结构化错误处理
实施清晰的错误报告:
-
返回带有特定代码的清晰错误消息
-
在错误响应中包含可操作的信息
测试增量更改
遵循有条不紊的测试方法:
-
修改代理时,请在部署之前在本地进行测试
-
验证有效载荷与本地和已部署环境的兼容性
监控性能
为您的代理设置监控:
-
使用 CloudWatch 指标来跟踪调用模式
-
为错误率和延迟设置警报