无法 运行 AWS Lambda 中的 AWS StepFunctions
Unable to run AWS StepFunctions inside an AWS Lambda
我正在尝试从 AWS Lambda 内部开始执行 AWS StepFunction,但我收到 null
结果,没有错误消息。这里的 StepFunctions 是一个 Express 状态机,所以我使用方法 startSyncExecution(params = {}, callback)
,如 docs.
中所指出的
这是 Lambda 的代码:
const AWS = require('aws-sdk');
exports.handler = async(event, context, callback) => {
var params = {
stateMachineArn: "arn:aws:states:us-east-1:[AccountID]:stateMachine:BookLectureStateMachine",
input: JSON.stringify(event),
name: "test-from-lambda"
}
var stepfunctions = new AWS.StepFunctions();
console.log("Everything okay") //This one is logged
stepfunctions.startSyncExecution(params, function(err, data) {
console.log("This log isn't shown"); //This one isn't logged
if (err) {
callback(null, {
statusCode: 400,
body: err,
headers: {
'Access-Control-Allow-Origin': '*'
}
})
} else {
callback(null, {
statusCode: 200,
body: 'Lecture booked',
headers: {
'Access-Control-Allow-Origin': '*'
}
})
}
});
};
响应是 null
,没有别的。
我检查了权限,Lambda 具有对 Step Functions 的完全访问权限。
知道如何解决吗?
更新
- 我认为 StepFunction 没有执行,因为日志是空的。
- 我将 Lambda 超时增加到 1 分钟以避免超时情况。计费时长约半秒
我认为这可能与回调和 async
的混合有关。由于您没有在任何地方的处理程序中使用 await
,我会尝试从处理程序中删除 async
。
或者您可以尝试将代码更改为:
var data = await stepfunctions.startSyncExecution(params).promise()
我正在尝试从 AWS Lambda 内部开始执行 AWS StepFunction,但我收到 null
结果,没有错误消息。这里的 StepFunctions 是一个 Express 状态机,所以我使用方法 startSyncExecution(params = {}, callback)
,如 docs.
这是 Lambda 的代码:
const AWS = require('aws-sdk');
exports.handler = async(event, context, callback) => {
var params = {
stateMachineArn: "arn:aws:states:us-east-1:[AccountID]:stateMachine:BookLectureStateMachine",
input: JSON.stringify(event),
name: "test-from-lambda"
}
var stepfunctions = new AWS.StepFunctions();
console.log("Everything okay") //This one is logged
stepfunctions.startSyncExecution(params, function(err, data) {
console.log("This log isn't shown"); //This one isn't logged
if (err) {
callback(null, {
statusCode: 400,
body: err,
headers: {
'Access-Control-Allow-Origin': '*'
}
})
} else {
callback(null, {
statusCode: 200,
body: 'Lecture booked',
headers: {
'Access-Control-Allow-Origin': '*'
}
})
}
});
};
响应是 null
,没有别的。
我检查了权限,Lambda 具有对 Step Functions 的完全访问权限。
知道如何解决吗?
更新
- 我认为 StepFunction 没有执行,因为日志是空的。
- 我将 Lambda 超时增加到 1 分钟以避免超时情况。计费时长约半秒
我认为这可能与回调和 async
的混合有关。由于您没有在任何地方的处理程序中使用 await
,我会尝试从处理程序中删除 async
。
或者您可以尝试将代码更改为:
var data = await stepfunctions.startSyncExecution(params).promise()