You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Lambda时出现InvalidSignatureException: Signature expired错误求助

问题分析:S3→SQS→Lambda架构中的签名过期错误

架构与问题现象

  • 业务流程:S3 ---> S3 Notification ---> SQS ---> Lambda
  • 偶发错误日志:
"errorType": "Runtime.UnhandledPromiseRejection" 
"errorMessage": "InvalidSignatureException: Signature expired: 20221230T132433Z is now earlier than 20221230T132603Z (20221230T133103Z - 5 min.)"
  • 重试行为:SQS配置了重试策略,错误消息回队后,Lambda再次处理即可成功完成任务。

根因解析

这个错误的核心是S3事件附带的请求签名过期,具体逻辑是:

  1. S3生成事件通知时,会附带一个临时签名,用于后续访问对应的S3资源,这个签名默认有效期只有5分钟。
  2. 当消息在SQS中因为队列积压、Lambda冷启动延迟、前一次执行中断等原因,等待处理的时间超过了5分钟,Lambda真正执行时,这个签名已经失效,就会抛出InvalidSignatureException。
  3. 重试时,Lambda处理消息的时机在有效时间窗口内(或直接使用Lambda自身的IAM角色权限重新生成有效凭证),所以能顺利完成S3操作。

常见触发场景:

  • SQS队列消息积压,消息等待处理时长超出5分钟;
  • Lambda冷启动耗时过长,从消息入队到实际执行的间隔超出签名有效期;
  • 第一次处理时Lambda意外中断,消息回队后滞留时间过长,但重试时处理及时。

优化方案

  • 调整SQS消息可见性超时:设置为3分钟以内(短于签名有效期),确保消息在签名失效前被处理;
  • 提升Lambda并发能力:如果是并发不足导致积压,增加预留并发数,减少消息等待时长;
  • 改用Lambda IAM角色访问S3:放弃使用S3事件附带的签名,直接通过Lambda的IAM权限访问S3,每次请求都会生成有效临时凭证,彻底避开签名过期问题。

内容的提问来源于stack exchange,提问作者Maor agai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:40:32