【发布时间】:2019-12-17 04:22:36
【问题描述】:
我正在从 lambda 函数向队列发送消息。但是有时 sqs.sendMessage 不返回任何内容,并且 lambda 超时。有时会发生这种情况
我尝试多次更改解码代码,以使用等待、承诺和回调,但错误仍然存在。
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