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

时间:2017-12-16 22:44:21

标签: node.js amazon-web-services lambda amazon-sns

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

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

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

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

3 个答案:

答案 0 :(得分:0)

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

console.log('username is ' + cognitoUser.getUsername());

答案 1 :(得分:0)

以下是您的问题可能出现的问题,但需要进行投票。

API GTW

整合到 - > Lambda1

Lambda1

  1. 创建唯一的sha在桶内创建一个文件夹,例如s3:// response-bucket /
  2. 通过具有sha
  3. 的有效负载的sdk触发SNS
  4. 从密钥s3:// response-bucket /(设置超时)
  5. 进行轮询
  6. 如果放置了结果,则从Lambda1发回响应 - > ApiGTW
  7. 如果超时则返回错误。
  8. 如果成功,则触发SNS清理存储桶中的响应数据,其中有效负载为SHA,将由另一个lambda清理。

    SNS

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

    Lambda2

    1. SNS触发lambda2
    2. 从有效载荷中拉出唯一的sha
    3. lambda结果放在相同的s3:// response-bucket /
    4. 退出lambda2

答案 2 :(得分:0)

你需要一些东西来与lambda_func_1共享lambda_func_2的返回,api网关请求上下文仅在你在func1上调用#Do a group by on df_one on A, B, and C and find the mean df_group = df_one.groupby(['A','B','C']).mean() #Change the index df_two.index = [df_two['A'],df_two['B'],df_two['C']] #Transfer the value of mean from D to df_two['D'] = df_group['D'] 时返回,你不能保存或发送callback到另一个lb_func。 我的解决方案是使用Dynamodb(或每个数据库)来共享f2的结果。

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

F2被SNS触发,用数据包括transactionID然后将结果(成功或不成功,错误消息......)插入结果表(transactionID){{1 }} => tbl_f2_result,回调结束F2。

transactionID是表的索引键:D

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