aws api网关如何监听2个lambda函数?

问题描述 投票:0回答:3

我的设计是api会触发第一个lambda函数,这个函数然后发送sns并返回,sns触发第二个lambda函数。现在我希望api从第二个lambda函数得到响应。

这是流程:api从用户获取请求然后触发第一个lambda函数,第一个lambda函数创建一个sns并返回。现在api处于lambda函数阶段,仍在等待第二个lambda的响应。 sns触发第二个lambda函数;第二个lambda函数返回一些结果并将其传递给api。 api获得响应并将其发送回用户。

我知道有一种方法可以使用sdk获取第二个lambda函数并设置事件类型以使其成为异步。但在这里我想使用sns,这可能吗?

需要一些帮助/建议。提前致谢!

node.js amazon-web-services lambda amazon-sns
3个回答
0
投票

你需要一些东西来与lambda_func_1共享lambda_func_2的返回,只有当你在func1上调用callback时才会返回api网关请求上下文,你无法保存或发送request contex到另一个lb_func。我对这种情况的解决方案是使用Dynamodb(或每个数据库)来共享f2的结果。

F1将数据发送到sns,日期包括像transactionID(uuid或timestamp)这样的密钥。然后“等待”直到F1收到表中的结果(例如:tbl_f2_result)并执行带有结果的callback函数。也许用transactionID查询,直到你收到数据或只尝试10次(一次超时2s,最坏的情况下你会等待20秒)

F2被SNS触发,用数据包括transactionID,然后用tbl_f2_result => transactionID将结果(成功与否,错误信息......)插入结果表(result),回调结束F2。

transactionID是表的索引键:D

你必须增加F1的超时 - 默认是6秒。


0
投票

当然可以。 Lambda为您提供了一种方法来实现您想要的几乎任何任意功能,无论是将记录插入DynamoDB,从S3存储桶读取对象,计算电子商务网站上所选项目的税额,还是只是调用一个API。 请注意,在这里你不需要任何事件来从lambda调用你的api,就像你直接调用api一样。 在使用Node时,您只需使用http请求即可;这样的事情:

var options = {
  host: YOUR_API_URL,
  port: 80,
  path: 'REST_API_END_POINT',
  method: 'YOUR_HTTP_METHOD' //POST/GET/...
};

http.request(options, function(res) {
  //Whatever you want to do with the reply...
}).end();

0
投票

以下是您的问题可能出现的问题,但需要轮询。

API GTW

集成到 - > Lambda1

Lambda1

  1. 创建唯一的sha在桶内创建一个文件夹说s3:// response-bucket /
  2. 通过具有sha的有效载荷的sdk触发SNS
  3. 从密钥s3:// response-bucket /(具有超时设置)轮询
  4. 如果放置了结果,则从Lambda1 - > ApiGTW发回响应
  5. 如果超时则返回错误。

如果成功,则触发SNS清除存储桶中的响应数据,其中有效负载为SHA,将由另一个lambda清理。

SNS

现在,带有SHA的有效负载存在于SNS中

Lambda2

  1. SNS触发lambda2
  2. 从有效载荷中拉出独特的sha
  3. lambda结果放在同一个s3:// response-bucket /
  4. 退出lambda2
© www.soinside.com 2019 - 2024. All rights reserved.