为什么我的 Lambda 函数不在 AWS 状态机上开始执行?
Why doesn't my Lambda function start an execution on an AWS State Machine?
我已经设置了一个 AWS Step Function 状态机,它链接 3 个 lambda 函数并且在我手动创建执行时运行得非常好。我创建了第四个 lambda 函数以从 API Gateway 获取输入,将我想要的内容传递给 Step Function 并开始新的执行。
我相信我已经遵循了我可以在网上找到的所有建议,但无论我尝试了什么,Lambda 函数似乎总是超时(无论是从 API 网关调用还是自行测试),我在 CloudWatch 中没有任何错误可言,即使我已经将 console.log 行移动到函数中的几乎每个点。看起来 stepfunctions.StartExecution
行似乎从未真正被调用过,但该函数也从未 returns 过(无论回调是否在 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 的完全访问权限,因此我认为这没有问题。
我用于 Lambda 函数在状态机上开始执行的 VPC/Subnets/Security 组组合中的一个或全部显然有问题。
我找不到任何关于此的文档,所以我可能错了或遗漏了什么,但这对我有用。这可能没问题,因为我仍然可以 运行 所有实际与私有子网内的数据库交互的函数,并将它们链接到 Step Functions 中。
我已经设置了一个 AWS Step Function 状态机,它链接 3 个 lambda 函数并且在我手动创建执行时运行得非常好。我创建了第四个 lambda 函数以从 API Gateway 获取输入,将我想要的内容传递给 Step Function 并开始新的执行。
我相信我已经遵循了我可以在网上找到的所有建议,但无论我尝试了什么,Lambda 函数似乎总是超时(无论是从 API 网关调用还是自行测试),我在 CloudWatch 中没有任何错误可言,即使我已经将 console.log 行移动到函数中的几乎每个点。看起来 stepfunctions.StartExecution
行似乎从未真正被调用过,但该函数也从未 returns 过(无论回调是否在 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 的完全访问权限,因此我认为这没有问题。
我用于 Lambda 函数在状态机上开始执行的 VPC/Subnets/Security 组组合中的一个或全部显然有问题。
我找不到任何关于此的文档,所以我可能错了或遗漏了什么,但这对我有用。这可能没问题,因为我仍然可以 运行 所有实际与私有子网内的数据库交互的函数,并将它们链接到 Step Functions 中。