1

我已经设置了一个 AWS Step Function 状态机,它链接了 3 个 lambda 函数,并且在我手动创建执行时运行得非常好。我创建了第四个 lambda 函数来从 API Gateway 获取输入,将我想要的内容传递给 Step Function 并开始新的执行。

我相信我已经遵循了我可以在网上找到的所有建议,但无论我尝试了什么,Lambda 函数似乎总是超时(无论是从 API Gateway 调用还是自行测试),我得到了CloudWatch 中没有任何错误可言,即使我已将 console.log 行移至函数中的几乎每个点。似乎该stepfunctions.StartExecution行实际上从未被调用过,但该函数也从未返回(无论回调是否在 stepfunction 块内),所以我只能用头撞桌子。

这是 Lambda 函数:

'use strict';
const AWS = require('aws-sdk');
const moment = require('moment');

exports.postArchive = (event, context, callback) => {
    const parsedInput = JSON.parse(event.body);
    const stepInput = JSON.stringify({ "thingId": parsedInput.thingId });
    const rightNow = moment().format('YYYYMMDD-hhmmss');
    const params = {
        stateMachineArn: 'arn:aws:states:us-east-1:ACCOUNT_ID:stateMachine:create-archive',
        input: stepInput,
        name: `ArchiveAt${rightNow}`
    };
    console.log(JSON.stringify(params));
    const stepfunctions = new AWS.StepFunctions({apiVersion: '2016-11-23'});

    stepfunctions.startExecution(params, function (err, data) {
        if (err) {
            console.log(err, err.stack);
            callback(err, null);
            return;
        }
        const response = {
            statusCode: 200,
            headers: {
                "Content-Type": "application/json"
            },
            body: JSON.stringify({
                message: "State Machine started successfully.",
                result: data
            })
        };
        callback(null, response);
     });
};

此外,Lambda IAM 角色拥有对 AWS Step Functions 的完全访问权限,因此我认为那里没有问题。

4

1 回答 1

0

我用于 Lambda 函数以在状态机上开始执行的一个或全部 VPC/子网/安全组组合显然存在问题。

我找不到任何关于此的文档,所以我可能错了或遗漏了一些东西,但这对我有用。这可能没问题,因为我仍然可以运行与私有子网内的数据库实际交互的所有函数,并将它们链接到 Step Functions 中。

于 2017-07-10T19:18:16.633 回答