通过AWS Step Functions调用AWS Lambda?

时间:2019-02-28 10:07:23

标签: amazon-web-services aws-lambda aws-step-functions

一个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
}

1 个答案:

答案 0 :(得分:0)

您只需要做的就是从第二个函数要求的第一个函数返回数据。步进功能会自动将第一个功能的输出作为第二个功能的输入。

此外,您不需要处理lambda函数之间的函数调用,状态机将处理该调用。

此外,除了lambda执行成本外,该服务将没有额外的成本,因此您的成本保持不变。