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

.NET 6调用AWS Lambda超5分钟触发签名过期异常求助

解决方案

方案1:延长请求签名有效期(推荐,适合必须同步调用的场景)

AWS SDK for .NET 默认的请求签名有效期是5分钟,这就是Lambda运行超5分钟后客户端抛出签名过期异常的原因。你可以通过修改AmazonLambdaConfig的SignatureDuration属性,将签名有效期延长至与Lambda超时一致的15分钟:

var lambdaClient = new AmazonLambdaClient(new AmazonLambdaConfig
{
    Timeout = TimeSpan.FromMinutes(15),
    SignatureDuration = TimeSpan.FromMinutes(15) // 把签名有效期设为15分钟
});

var request = new InvokeRequest
{
    FunctionName = LAMBDA_FUNCTION_NAME,
    InvocationType = InvocationType.RequestResponse,
    Payload = PAYLOAD
};

var response = await lambdaClient.InvokeAsync(request);

这个设置会让请求签名的有效期覆盖Lambda的整个执行时长,客户端等待响应时签名不会过期,同时不会触发SDK的重试逻辑,也就不会导致Lambda多次执行。

方案2:改用异步调用模式(适合长耗时Lambda任务)

如果你的Lambda运行时间经常接近或达到15分钟,更推荐使用异步调用模式,避免客户端长时间保持连接:

  1. 将InvocationType改为InvocationType.Event,客户端会立即收到确认响应,无需等待Lambda执行完成:
var request = new InvokeRequest
{
    FunctionName = LAMBDA_FUNCTION_NAME,
    InvocationType = InvocationType.Event, // 异步调用
    Payload = PAYLOAD
};

var response = await lambdaClient.InvokeAsync(request);
  1. 在Lambda函数内部,执行完成后将结果写入S3、DynamoDB等存储服务,或者通过SNS/SQS发送通知。

  2. 客户端通过轮询存储服务或监听通知来获取最终执行结果。

这种方式从根源上避免了签名过期问题,也更符合AWS Lambda长耗时任务的最佳实践。

注意事项

  • 确保Lambda控制台或部署配置中的超时时间确实设置为15分钟,与客户端的Timeout和SignatureDuration保持一致。
  • 使用SignatureDuration时,该设置会应用于当前Lambda客户端的所有请求,短耗时请求也会使用15分钟的签名有效期,这通常不会带来安全风险,但如果有特殊需求可以单独创建客户端实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:52:33