从另一种方法调用api网关方法的最佳做法是什么?

时间:2016-06-07 01:43:07

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

在无服务器中,我有以下文件夹结构

/component_a/function_1/function_1.js (get)
/component_a/function_2/function_2.js (get)

使用无服务器框架从function_1调用function_2的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

不要从function_1调用function_2。

编写这两个函数,以便能够独立完成各自的任务。

为了控制执行流程,您应该使用AWS Step Functions,它可以让您在各种lambda函数之间进行协调。

如果要保留信息,请使用其他存储服务(如S3或DynamoDB)来存储function_2可以使用的信息。然后让Step Functions引导流量。但请检查您正在部署功能的区域中是否存在此服务。

以下是AWS步骤功能的快速指南:

http://docs.aws.amazon.com/step-functions/latest/dg/welcome.html

答案 1 :(得分:1)

这通常不赞成,因为它创建了一个依赖。直接调用其他lambda函数是一个选项(Can an AWS Lambda function call another)但是lambda的意思是让它们独立运行。如果你最终得到一个递归的lambda模式也可能是危险的。如果您需要快速响应时间,最好的方法通常是通过SQS和SNS进行通信。

答案 2 :(得分:1)

这取决于您是否对function_2的返回值感兴趣。

如果需要获取function_2的返回值,则必须直接调用它。您有两种选择:

  1. 同步调用Function 2 Lambda 。请参阅AWS-SDK文档中的Lambda.invoke()

  2. 如果你可以在你的Function 1包中包含Function 2(默认情况下serverless会这样做),你可以直接导入它,具体取决于代码的编写方式。

  3. 如果函数1不需要知道函数2的响应或返回值,则应使用SNS将其作为异步调用。为此,请参考以下建议方法:

    1. 创建SNS主题。
    2. 配置功能2以订阅上述SNS主题。 (Serverless Docs
    3. 拥有功能1,在步骤1中向SNS主题发布消息。