发送 SQS 消息超时
Sending SQS message timeout
我在 NodeJs 中编写了一个 AWS lambda 函数,它将 id 从数据库中提取出来并将它们排入 AWS SQS 队列。在我部署一个函数来接收消息之前,我让它工作得很好,现在原来的函数不工作了。相关代码如下:
async function sendHelper(rows)
{
let i;
let params;
let res;
let sqs = new AWS.SQS({apiVersion: '2012-11-05'});
for (i = 0; i < rows.length; i++) {
params = {
MessageBody: rows[i].ID.toString(),
QueueUrl: 'https://sqs.' + process.env.AWS_REGION_NAME + '.amazonaws.com/' + process.env.AWS_ID_SHORT + '/' + process.env.SQS_VENDPERSON_QUEUE_NAME
};
res = await sqs.sendMessage(params).promise().catch(err => errorHandler(err));
console.log(res);
}
return null;
}
问题是它没有在任何地方抛出错误。无论你给它多长时间,它都会在第一个 sendMessage 上超时。我已经删除了消息接收功能,问题仍然存在。一些可能有帮助的附加信息是我一直在使用无服务器进行部署。
您没有包含其余的 lambda 函数,但我假设您的数据库实例位于 VPC 中。如果是这样,您需要:
- 将您的 lambda 放在您的 VPC 中
- 为 SQS 或 NAT 网关设置 VPC 端点(取决于您是只需要访问 SQS 还是还需要访问互联网)。
要点(我从惨痛的教训中学到的): 将 lambda 函数添加到子网时,请确保仅将其添加到 private 个子网,否则无效。
需要大量修改才能正确,但这是可行的。以下是一些相关文档:
https://docs.aws.amazon.com/lambda/latest/dg/vpc.html
和
https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/
我在 NodeJs 中编写了一个 AWS lambda 函数,它将 id 从数据库中提取出来并将它们排入 AWS SQS 队列。在我部署一个函数来接收消息之前,我让它工作得很好,现在原来的函数不工作了。相关代码如下:
async function sendHelper(rows)
{
let i;
let params;
let res;
let sqs = new AWS.SQS({apiVersion: '2012-11-05'});
for (i = 0; i < rows.length; i++) {
params = {
MessageBody: rows[i].ID.toString(),
QueueUrl: 'https://sqs.' + process.env.AWS_REGION_NAME + '.amazonaws.com/' + process.env.AWS_ID_SHORT + '/' + process.env.SQS_VENDPERSON_QUEUE_NAME
};
res = await sqs.sendMessage(params).promise().catch(err => errorHandler(err));
console.log(res);
}
return null;
}
问题是它没有在任何地方抛出错误。无论你给它多长时间,它都会在第一个 sendMessage 上超时。我已经删除了消息接收功能,问题仍然存在。一些可能有帮助的附加信息是我一直在使用无服务器进行部署。
您没有包含其余的 lambda 函数,但我假设您的数据库实例位于 VPC 中。如果是这样,您需要:
- 将您的 lambda 放在您的 VPC 中
- 为 SQS 或 NAT 网关设置 VPC 端点(取决于您是只需要访问 SQS 还是还需要访问互联网)。
要点(我从惨痛的教训中学到的): 将 lambda 函数添加到子网时,请确保仅将其添加到 private 个子网,否则无效。
需要大量修改才能正确,但这是可行的。以下是一些相关文档:
https://docs.aws.amazon.com/lambda/latest/dg/vpc.html
和
https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/