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
- 创建唯一的 sha 在存储桶内创建一个文件夹说 s3://response-bucket/
- 通过带有 sha
有效负载的 sdk 触发 SNS
- 从键 s3://response-bucket/ 进行轮询(设置超时)
- 如果放置结果,则响应从 Lambda1 发回 --> ApiGTW
- 如果超时则返回错误。
如果成功则触发 SNS 清理存储桶中的响应数据,有效载荷为 SHA,将由另一个 lambda 清理。
社交网络
现在 SNS 中有带有 SHA 的负载
Lambda2
- SNS 触发 lambda2
- 从payload中取出唯一的sha
- lambda 结果放在同一个 s3://response-bucket/
- 退出 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 秒。
我的设计是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
- 创建唯一的 sha 在存储桶内创建一个文件夹说 s3://response-bucket/
- 通过带有 sha 有效负载的 sdk 触发 SNS
- 从键 s3://response-bucket/ 进行轮询(设置超时)
- 如果放置结果,则响应从 Lambda1 发回 --> ApiGTW
- 如果超时则返回错误。
如果成功则触发 SNS 清理存储桶中的响应数据,有效载荷为 SHA,将由另一个 lambda 清理。
社交网络
现在 SNS 中有带有 SHA 的负载
Lambda2
- SNS 触发 lambda2
- 从payload中取出唯一的sha
- lambda 结果放在同一个 s3://response-bucket/
- 退出 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 秒。