一个Lambda以同步方式调用另一个Lambda,获取一些数据并继续进行处理。
这意味着,通话期间两个Lambda的费用都已考虑在内。
在这种情况下是否可以使用AWS Step Functions而不会将处理分为状态机块,这会使代码过于复杂?
Node.js 8.10代码:
const AWS = require('aws-sdk');
const lambda = new AWS.Lambda({ apiVersion: '2015-03-31' });
exports.handle = async event => {
try {
const packageId = event.pathParameters['id'];
const entry = await packageEntry(packageId);
const tags = await tagsForEntry(entry.id);
return httpResponse(200, { ...entry, tags });
}
catch (err) {
return httpResponse(500, err.message);
}
}
async function tagsForEntry(entryId) {
const response = await lambda.invoke({
FunctionName: process.env.TAGGING_LAMBDA,
InvocationType: 'RequestResponse',
Payload: JSON.stringify({
method: 'GET_TAGS',
payload: { entryId }
})
}).promise();
const payload = response.Payload ? JSON.parse(response.Payload.toString()) : {};
return payload.tags || [];
}
async function packageEntry(packageId) {
// return a package entry from a database
}
function httpResponse(statusCode, data) {
// return a HTTP response object
}
答案 0 :(得分:0)
您只需要做的就是从第二个函数要求的第一个函数返回数据。步进功能会自动将第一个功能的输出作为第二个功能的输入。
此外,您不需要处理lambda函数之间的函数调用,状态机将处理该调用。
此外,除了lambda执行成本外,该服务将没有额外的成本,因此您的成本保持不变。