我已经设置了一个 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 的完全访问权限,因此我认为那里没有问题。