【问题标题】:Lambda timeout on sqs sendmessagesqs sendmessage上的Lambda超时
【发布时间】:2019-12-17 04:22:36
【问题描述】:

我正在从 lambda 函数向队列发送消息。但是有时 sqs.sendMessage 不返回任何内容,并且 lambda 超时。有时会发生这种情况

我尝试多次更改解码代码,以使用等待、承诺和回调,但错误仍然存​​在。

Lambda log

const sqs = new aws.SQS({apiVersion: '2012-11-05'});

//TODO: Validar campos obrigatórios nas mensagens de acordo com o tipo de mensagem
exports.sendMessage =  async (message) => {
  let params = {
    MessageBody: JSON.stringify(message),
    QueueUrl: 'https://sqs.us-east-1.amazonaws.com/....',
  };

  try {
    await sqs.sendMessage(params).promise();
    return {statusCode: 200, body: {data: "Notification sent successfully"}};
  } catch (e) {
    return {statusCode: 400, body: {data: e}};
  }
}

【问题讨论】:

  • 您的 Lambda 函数中配置的内存大小是多少?代码看起来不错。
  • 你好,128mb。在 CloudWatch 日志中,最昂贵的使用是 80mb。
  • 问题可能是它。您配置的内存越多,运行代码的机器的配置就越好。例如,在 1792MB 时,您将获得一个专用内核。将其增加到 1024MB 并进行测试。
  • A 更改了我的代码并在创建 sqs 实例时设置了 httpOptions: {connectTimeout: 5000}。现在我的 lambda 没有超时,但它需要 5 秒才能完成。第二个aws docs这个参数是:在与服务器建立连接失败后将套接字设置为超时。所以问题是与服务器的连接。
  • @hansmosh 我很好奇您的 lambda 是否附加了 VPC?

标签: node.js aws-lambda amazon-sqs


【解决方案1】:

我有类似的问题。我所做的就是将端点 url 添加到 boto3 客户端调用中。

例如:boto3.client('sqs',endpoint_url='https://YourVPCDNSEndpointforSQS')

【讨论】:

  • 尝试格式化您的答案,使其更具可读性。干杯
【解决方案2】:

我也遇到了同样的问题。问题是 lambda 分配了 3 个子网,其中只有 1 个具有到 0.0.0.0/0 的路由条目 即使 2/3 的子网缺少该路由条目,也只有 1-3% 的请求随机超时,因此请务必检查!

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2020-11-14
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2021-05-14
    • 2014-09-04
    相关资源
    最近更新 更多