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

How can aws api gateway listen to 2 lambda functions?

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

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

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

需要一些 help/advices。提前致谢!

当然可以。 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();

以下是您的问题的可能解决方案,但需要轮询。

API GTW

集成到 --> Lambda1

Lambda1

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

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

社交网络

现在 SNS 中有带有 SHA 的负载

Lambda2

  1. SNS 触发 lambda2
  2. 从payload中取出唯一的sha
  3. lambda 结果放在同一个 s3://response-bucket/
  4. 退出 lambda2

您需要一些东西来与 lambda_func_1 共享 lambda_func_2 的 return,当您调用 [=] 时,api 网关请求上下文仅 return func1 上的 10=],您无法将 request contex 保存或发送到另一个 lb_func。 我对这种情况的解决方案是使用 Dynamodb(或每个数据库)共享 f2 的结果。

F1 向 sns 发送数据,日期包括像 transactionID 这样的键(uuid 或时间戳)。然后 "wait" 直到 F1 在 table 中收到结果(例如:tbl_f2_result)并用结果执行 callback 函数。也许用 transactionID 查询直到收到数据或只尝试 10 次(一次超时 2s,最坏情况下你将等待 20 秒)

F2 已被 SNS 触发,用数据做一些事情包括 transactionID 然后将结果(成功与否,错误消息...)插入结果 table(tbl_f2_result) transactionID => result, 回调完成 F2.

transactionID 是 table 的索引键 :D

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