我正在使用无服务器API,并且有一个从sqs队列触发的lambda函数,批处理大小为1,这意味着我打算在将消息发送到队列后立即触发lambda,它是工作正常,但是当我第一次部署该功能时,它不会触发;当我第二次请求该功能时,它正在发送第一条消息,它始终是我发送的消息之后的一条消息。我已经附加了我的代码,不确定我在这里缺少什么,感谢您的帮助。
serverless.yml
iamRoleStatements:
- Effect: "Allow"
Action:
- "sqs:SendMessage"
- "sqs:ReceiveMessage"
Resource: "arn:aws:sqs:${self:provider.region}:*:EmailQueueDev"
functions:
sendGrid:
handler: handler.sendGrid
events:
- sqs:
arn: arn:aws:sqs:us-east-1:${file(./config.js):sqs.account_id}:EmailQueueDev
batchSize: 1
resources:
Resources:
EmailQueue:
Type: "AWS::SQS::Queue"
Properties:
QueueName: "EmailQueueDev"
代码
module.exports.sendEmail = async (event) => {
// Trigger the SQS for SendGrid Function To Execute
const sqs = new aws.SQS();
const params = {
MessageBody: JSON.stringify(transaction.data),
QueueUrl: process.env.QUE_URL
}
sqs.sendMessage(params, (err, data) => {
if(err) {
log(JSON.stringify({info: 'Errors sending message to the Queue', trace: err}));
}
else console.log('data is', data);
});
};
答案 0 :(得分:1)
“ batchSize”参数指示每次函数调用要处理的最大消息数,并且不影响lambda函数何时触发。当您将SQS定义为事件源时,AWS创建了5个并行的长轮询连接,当它在队列中接收到某些内容时,它将触发您的功能。发送第一条消息后,您要等待多长时间才能查看它是否触发了该功能?在队列中接收消息和触发函数之间可能会有一个小的延迟。