发送SQS消息超时

时间:2019-01-05 05:04:29

标签: node.js amazon-web-services serverless

我在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上超时。此后,我删除了消息接收功能,问题仍然存在。一些可能有用的其他信息是我一直在使用无服务器部署。

1 个答案:

答案 0 :(得分:0)

您没有包括其余的lambda函数,但我假设您的数据库实例在VPC中。如果是这样,您需要:

  1. 将lambda放入VPC中
  2. 为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/