Amazon web services 通过SQS lambda发送SQS消息

Amazon web services 通过SQS lambda发送SQS消息,amazon-web-services,aws-lambda,amazon-sqs,Amazon Web Services,Aws Lambda,Amazon Sqs,我有一个连接到lambda的种子指示符信息qs-dev.fifo队列(fifo)。我想在种子指示信息QS-dev-d13dfe0lambda中向评估配置SQS dev标准队列发送一条消息。但没有发送/接收任何消息。然而,如果我尝试从非SQS连接的lambda(通过AppSync)发送它,它会工作 种子指示信息QS-dev-d13dfe0lambda具有以下权限: 我查过: lambda有权发送SQS消息(您可以在那里看到) 由于我已成功地从另一个lambda(非SQS)向标准队列发送消息,因

我有一个连接到lambda的
种子指示符信息qs-dev.fifo
队列(fifo)。我想在
种子指示信息QS-dev-d13dfe0
lambda中向
评估配置SQS dev
标准队列发送一条消息。但没有发送/接收任何消息。然而,如果我尝试从非SQS连接的lambda(通过AppSync)发送它,它会工作

种子指示信息QS-dev-d13dfe0
lambda具有以下权限:

我查过:

  • lambda有权发送SQS消息(您可以在那里看到)
  • 由于我已成功地从另一个lambda(非SQS)向标准队列发送消息,因此正确配置了
    EvaluationConfigSQS dev
    标准队列
  • SQS URL是否正确
  • 控制台中不会显示任何错误
  • async/await的位置正确(我试过使用和不使用它们)
以下是试图发送内容的
seedIndicationInformationQS-dev-d13dfe0
lambda的CloudWatch日志:成功发送到正确的URL,JSON解析为字符串,但什么都没有

这是CloudWatch日志:您可以看到<代码>种子指示信息QS-dev-d13dfe0成功地从另一个lambda函数接收消息并对其进行处理,但不会发送更多消息

种子指示信息QS-dev-d13dfe0中未报告任何错误

EvaluationConfigSQS dev

但是,如果我尝试在非SQS lambda中发送它,它会工作。

收到的事件:

这是成功发送到
EvaluationConfigSQS dev
classes-dev-eefa2af
lambda(同时也是触发
种子指示器SQS-dev.fifo
SQS的lambda)。

以下是
EvaluationConfigSQS-dev-6da8b90
的权限(
EvaluationConfigSQS dev
标准队列触发的lambda)

我是否需要向
种子指示符信息QS-dev.fifo
队列添加特殊权限?

这是被调度的JS(我使用了一个中介模式,它成功地被调度了,你可以在上面的“调度创建的机构类”日志中看到它)。我还打印了URL,并验证了它实际上是与之对应的URL

导出异步函数institutionClassCreatedEventHandler(
evt:InstitutionClassCreatedEvent
) {
const json=json.stringify({
…evt,
类型:“已创建类”,
});
sqsDispatchMessage(
“InstitutionClassCreatedEvent”,
evt.tenantId+evt.subject.id,
json,
Config.SQS.evaluationConfigSQS.url,
假的
);
}
这是sqsDispatchMessage函数。正如您所看到的,有一个catch块,每当出现错误时(它可以工作),它就会打印我。但是到目前为止,还没有记录任何错误

导出异步函数sqsDispatchMessage(
eventName:string,
唯一标识:字符串,
jsonObjStringifiedToSend:string,
sqsURL:string,
isFifoQueue:boolean=true
) {
试一试{
等待sqs
.sendMessage({
消息属性:{
事件名称:{
数据类型:“字符串”,
StringValue:eventName,
},
},
…(isFifoQueue&&{MessageGroupId:eventName}),
MessageBody:jsonObjStringifiedToSend,
QueueUrl:sqsURL,
…(isFifoQueue&&{MessageDeduplicationId:uniqueId}),
})
.promise();
}捕获(e){
error(`error While Sending the${eventName}`);
控制台错误(e.message);
log(jsonObjStringifiedToSend);
}
}

有什么想法吗?可能吗?

问题出在我的调度员身上:

过去是这样的:


导出异步函数dispatchOfEvents({
类型,
埃夫塔格斯,
}字体事件:承诺{
对数时间(类型);
(任意事件)[type].forEach((evt:Function)=>{
evt(evtArgs);
});
}
我把它改成:

导出异步函数dispatchOfEvents({
类型,
埃夫塔格斯,
}字体事件:承诺{
对数时间(类型);
const evts:Promise[]=[];
for(const evt of(事件作为任何事件)[类型]){
evt.push(evt(evtArgs));
}
等待承诺。全部(EVT);
}

BTW,没有VPC参与查看发布的代码片段,我认为这可能是异步调用未被正确等待的情况。请为AWS SDK启用详细日志记录,以检查是否确实进行了SQS
sendMessage
API调用并收到了响应。@就是这样!我的问题是中介模式我实现的。对于基于事件的调度,我从未等待过实现!全部修复!!!非常感谢!!