调用 Lambda 时收到“InvalidSignatureException:签名已过期”

问题描述 投票:0回答:1

我有以下架构:

S3 ---> S3 Notification ---> SQS ---> Lambda

有时,我会从 Lambda 收到以下错误消息(当然时间不同):

"errorType": "Runtime.UnhandledPromiseRejection" 
"errorMessage": "InvalidSignatureException: Signature expired: 20221230T132433Z is now earlier than 20221230T132603Z (20221230T133103Z - 5 min.)"

我在SQS中有重试策略,所以当错误发生时,消息返回到SQS,然后Lambda再次处理它。当它再次处理时,同样的消息,它成功并被成功处理。

知道为什么吗?

node.js amazon-s3 lambda aws-lambda amazon-sqs
1个回答
0
投票

这可能是一个非常具体的用例,但我希望背景研究和解决方案有所帮助:

我的团队也看到了同样的零星错误消息。我们隔离了代码,发现 lambda 中的 aws-sdk 秘密调用似乎是罪魁祸首。当我们从完整的 aws-sdk v2 包切换到 aws-sdk v3 库时,它就开始了,例如@aws-sdk/客户端秘密管理器。我们还启用了预配置并发并排除了冷启动。

解决方案#1:恢复使用完整的 aws-sdk v2。这是相当短期的,因为 AWS 将在不久的将来的某个时候取消 v2。

解决方案#2:此线程注释讨论了 nodeJS 异步初始化问题以及它与 lambda 实例中处理程序的初始调用有何关系。发帖者的解决方案是每 4 分钟调用一次 lambda: https://github.com/aws/aws-sdk-js-v3/issues/4429#issuecomment-1451074059

解决方案#3:我们现在不这样做,而是使用 Secrets lambda 扩展作为一层来利用秘密缓存: https://aws.amazon.com/blogs/compute/using-the-aws-parameter-and-secrets-lambda-extension-to-cache-parameters-and-secrets/

© www.soinside.com 2019 - 2024. All rights reserved.