Amazon web services Lamda功能重用最佳实践

Amazon web services Lamda功能重用最佳实践,amazon-web-services,aws-lambda,serverless-framework,Amazon Web Services,Aws Lambda,Serverless Framework,Lambda函数应该调用其他Lambda函数还是应该是自包含的 我的环境是 无服务器框架 Nodejs AWS API网关 AWS拉姆达 自动气象站发电机 我已经为每个Dynamo表构建了几个用于API资源的CRUD,现在我正在创建一些跨表的专用CRUD 如果我有一个函数createTeamForecast,并且我需要从表Team获取一行,那么我应该导入函数getTeam还是只编写Dynamo查询。我倾向于导入这个函数,但我没有看到任何可以这样说的东西 getTeam.js 从“/libs

Lambda函数应该调用其他Lambda函数还是应该是自包含的

我的环境是

  • 无服务器框架
  • Nodejs
  • AWS API网关
  • AWS拉姆达
  • 自动气象站发电机
我已经为每个Dynamo表构建了几个用于API资源的CRUD,现在我正在创建一些跨表的专用CRUD

如果我有一个函数createTeamForecast,并且我需要从表Team获取一行,那么我应该导入函数getTeam还是只编写Dynamo查询。我倾向于导入这个函数,但我没有看到任何可以这样说的东西

getTeam.js

从“/libs/dynamodb lib”导入*为dynamoDbLib;
从“/libs/response-lib”导入{apiResponse}”;
导出异步函数main(事件、上下文、回调){
常量参数={
表格名称:“团队”,
关键:{
id:event.pathParameters.team\u id
}
};
试一试{
const result=等待dynamoDbLib.call(“get”,params);
如果(结果项){
//返回检索到的项目
回调(null,apiResponse(200,“OK”,result.Item));
}否则{
回调(null,apiResponse(404,“找不到团队”);
}
}捕获(e){
回调(null,apiResponse(500,'Server error',e));
}

}
从另一个模块导入所需的代码而不是重写代码是合理的。这样做的另一个好处是可以更容易地维护应用程序,因为您不会到处都有重复的逻辑

无服务器应用程序的诀窍在于找到代码重用和关注点分离之间的平衡。如何做到这一点的细节在某种程度上取决于应用程序。但是,如果您在每个函数中放入了太多的代码,那么很可能您的应用程序耦合太紧密,可能需要将其分解为更小的函数,从而对其问题空间进行更紧密的建模。如果在Lambda函数中发现大量共享代码,这可能是一个很好的指标,表明它们应该重构为其他函数


如果你正在建模非常复杂的业务域,那么你也可以考虑从lambda函数中调用其他lambda函数,或者研究AWS步进函数,它提供了lambda之上的状态机。

具体地说,不太熟悉无服务器框架,但作为一个一般规则,我将亲自尝试。在一个Lambda内完成任务,因此导入代码,而不是调用第二个Lambda(在第二个Lambda中,您要为子Lambda的持续时间支付2倍的费用,并且可能会遇到处理超时重试的困难问题)。当然,除非你的模型是故意异步扇出的,这是有道理的。只是不确定是否有一个移动的目标威瑟无服务器,Lamda和API网关。问题稍有不同,但在设置多个晚间环境时,我发现我的策略正在崩溃,因为我的无服务器更改正在生成一个新的API密钥。我想我可能会遇到类似的事情。