【发布时间】:2018-03-30 11:23:22
【问题描述】:
Lambda 函数应该调用其他 Lambda 函数还是应该是自包含的?
我的环境是
- 无服务器框架
- Nodejs
- AWS API 网关
- AWS 拉姆达
- AWS DynamoDB
我为每个 Dynamo 表的 API 资源构建了几个 CRUD,现在我正在创建一些跨表的专用资源。
如果我有一个函数 createTeamForecast,并且我需要从表 Team 中获取一行,我应该导入函数 getTeam 还是只编写 Dynamo 查询。我倾向于导入该函数,但我没有看到任何可以说明的内容。
getTeam.js
import * as dynamoDbLib from "./libs/dynamodb-lib";
import { apiResponse } from "./libs/response-lib";
export async function main(event, context, callback) {
const params = {
TableName: "teams",
Key: {
id: event.pathParameters.team_id
}
};
try {
const result = await dynamoDbLib.call("get", params);
if (result.Item) {
// Return the retrieved item
callback(null, apiResponse(200,"OK",result.Item));
} else {
callback(null, apiResponse(404, "Team not found."));
}
} catch (e) {
callback(null, apiResponse(500,'Server error',e));
}
}
在我的 createTeamForecast 中,我可以只导入该函数然后调用它吗?
import { main as getTeam } from "./getTeam";
我的替代方法是在我的 createTeamForecast.js 函数中执行 Dynamo 获取和检查结果。这更加独立,但不是很干燥。
Serverless 和 Lambda 管理函数的方式,感觉有点脱节。大家有什么优缺点吗?
【问题讨论】:
-
不太熟悉无服务器框架,但作为一般规则,我个人会尝试在单个 Lambda 中完成任务,因此请导入代码,而不是调用第二个 Lambda(您在为子 Lambda 的持续时间支付 2 倍,加上在处理超时重试时可能遇到困难)。当然,除非你的模型是故意异步扇出的。
标签: amazon-web-services aws-lambda serverless-framework