Node.js Lambda调用S3 ListObjectsV2出现RequestTimeTooSkewed错误
Lambda调用S3 ListObjectsV2报RequestTimeTooSkewed错误排查思路
问题描述
我有一个运行在Node.js环境中的Lambda函数,用于列出已启用版本控制的S3存储桶内的对象。调用ListObjectsV2接口时抛出了RequestTimeTooSkewed错误。该错误通常由系统时钟不同步引发,但为何会出现在Lambda实例上?日志中的时间戳与当前时间一致,恳请提供相关排查思路。
错误日志
RequestTimeTooSkewed: The difference between the request time and the current time is too large. at throwDefaultError (/var/runtime/node_modules/@aws-sdk/node_modules/@smithy/smithy-client/dist-cjs/default-error-handler.js:8:22) at /var/runtime/node_modules/@aws-sdk/node_modules/@smithy/smithy-client/dist-cjs/default-error-handler.js:18:39 at de_ListObjectsV2CommandError (/var/runtime/node_modules/@aws-sdk/client-s3/dist-cjs/protocols/Aws_restXml.js:5227:20) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async /var/runtime/node_modules/@aws-sdk/node_modules/@smithy/middleware-serde/dist-cjs/deserializerMiddleware.js:7:24 at async /var/runtime/node_modules/@aws-sdk/middleware-signing/dist-cjs/awsAuthMiddleware.js:30:20 at async /var/runtime/node_modules/@aws-sdk/node_modules/@smithy/middleware-retry/dist-cjs/retryMiddleware.js:27:46 at async /var/runtime/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/region-redirect-endpoint-middleware.js:14:24 at async /var/runtime/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/region-redirect-middleware.js:9:20 at async /var/runtime/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:7:26
排查思路
- 检查区域一致性:确认S3存储桶和Lambda函数是否在同一AWS区域,跨区域请求的网络延迟可能放大时间差,触发S3的时间校验。尝试将Lambda部署到与S3桶相同的区域,或者验证跨区域请求的时间补偿逻辑。
- 升级AWS SDK版本:部分旧版
@aws-sdk/client-s3或依赖库可能存在时间处理bug,尤其是自定义客户端配置的场景。直接升级到最新稳定版,排查是否因SDK内部时间签名逻辑异常导致报错。 - 验证Lambda实例时钟:虽然日志时间戳正常,但可以在函数中添加代码打印
new Date().toISOString()和process.hrtime(),对比运行时时间与UTC标准时间,确认是否存在瞬时时钟漂移。 - 检查请求签名时间参数:如果代码中手动指定了签名时间(比如复用旧签名、自定义签名逻辑),会导致请求时间与S3服务器时间差过大。排查是否在S3客户端配置中设置了
signingDate,或有第三方库篡改了请求时间参数。 - 排查VPC网络延迟:若Lambda部署在VPC内,通过NAT网关访问S3时,网络链路的延迟或阻塞可能让请求到达S3时的时间超出允许范围。检查VPC路由表、NAT网关状态,以及网络ACL/安全组是否限制了请求速度。
- 确认S3服务状态:虽然概率极低,但S3服务端的时间异常也可能触发该错误。可以调用HeadBucket等简单接口测试是否同样报错,或查看AWS服务健康面板确认对应区域S3的运行状态。
内容的提问来源于stack exchange,提问作者Rakesh N
相关产品推荐
相关产品推荐

