Javascript aws从lambda调用step函数
所以我设置了一个step函数来调用lamba,它将发送一封电子邮件 我已经手动测试了这个函数,它可以工作了…现在我想用一个新的lambda来调用这个step函数…我在网上找到了一些代码,并对它进行了处理…通过了测试,没有引发任何错误…有人知道我缺少了什么,因为它不工作了吗 我在Javascript aws从lambda调用step函数,javascript,node.js,amazon-web-services,amazon-s3,aws-lambda,Javascript,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,所以我设置了一个step函数来调用lamba,它将发送一封电子邮件 我已经手动测试了这个函数,它可以工作了…现在我想用一个新的lambda来调用这个step函数…我在网上找到了一些代码,并对它进行了处理…通过了测试,没有引发任何错误…有人知道我缺少了什么,因为它不工作了吗 我在https://www.youtube.com/watch?v=9MKL5Jr2zZ4&t=306s我认为直接复制它是可以的,因为它的唯一用途是调用step函数 谢谢 'use strict'; const AWS =
https://www.youtube.com/watch?v=9MKL5Jr2zZ4&t=306s
我认为直接复制它是可以的,因为它的唯一用途是调用step函数
谢谢
'use strict';
const AWS = require('aws-sdk');
const stepFunctions = new AWS.StepFunctions();
//module.exports.hello = (event, context, callback) => {
exports.handler = function(event, context) {
const response = {
statusCode:200,
body: JSON.stringify({
message: 'Hello World!',
input: event,
}),
};
// callback(null, response);
};
module.exports.init = (event, context, callback) => {
const params = {
stateMachineArn: 'STATE-MACHINE-ARN',
input: '',
name: 'Execution lambda'
}
stepFunctions.startExecution(params, (err, data) => {
if(err) {
console.log(err);
const response = {
statusCode: 500,
body:JSON.stringify({
message: 'There was an error'
}),
};
callback(null, response);
} else {
console.log(data);
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Step function worked'
})
};
callback(null, response);
}
});
};
我只想让这个lambda调用step函数executeSendEmailLambda
任何帮助都是非常感谢的
更新
多亏了我的帮助,我想我离我们更近了一点,但是我们已经回到了测试通过的第一步,但是兰姆达并没有叫F步
console.log('Loading function');
const AWS = require('aws-sdk');
exports.handler = function(event, context) {
console.log('Loading step functions');
const stepFunctions = new AWS.StepFunctions({
region: 'US West (Oregon)'
});
console.log('Loading init');
module.exports.init = (event, context, callback) => {
console.log('Loading params');
const params = {
stateMachineArn: 'STATE-MACHINE-ARN',
// input: JSON.stringify({}), Optional if your statemachine requires an application/json input, make sure its stringified
name: 'TestExecution' // name can be anything you want, but it should change for every execution
};
console.log('start step functions');
stepFunctions.startExecution(params, (err, data) => {
if (err) {
console.log(err);
const response = {
statusCode: 500,
body: JSON.stringify({
message: 'There was an error'
})
};
callback(null, response);
} else {
console.log(data);
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Step function worked'
})
};
callback(null, response);
console.log(response);
}
});
};
};
此日志显示以下内容
23:54:47
2017-12-07T23:54:47.448Z 016133fa-dbaa-11e7-8473-7147adf52922 Loading function
23:54:47
START RequestId: 016133fa-dbaa-11e7-8473-7147adf52922 Version: $LATEST
23:54:47
2017-12-07T23:54:47.767Z 016133fa-dbaa-11e7-8473-7147adf52922 Loading step functions
23:54:47
2017-12-07T23:54:47.905Z 016133fa-dbaa-11e7-8473-7147adf52922 Loading init
23:54:47
END RequestId: 016133fa-dbaa-11e7-8473-7147adf52922
23:54:47
REPORT RequestId: 016133fa-dbaa-11e7-8473-7147adf52922 Duration: 178.97 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 31 MB
No newer events found at the moment. Retry.
我对您的代码进行了一些修改,并使用我的一个Step函数对其进行了测试,这段代码似乎适合我:)
嘿,克沙夫,谢谢你花时间回复…我已经尝试了你建议在我的地区名称中添加的内容,以及状态机arn。但这会触发一个错误响应:{“errorMessage”:“模块‘index’’上缺少处理程序‘Handler’”}……因此我在缺少的exports.Handler=函数(事件,上下文){const Response={statusCode:200,body:JSON.stringify中添加了({消息:'Hello World!',输入:event,},};};这似乎可行,在测试中没有引发错误,但它不会调用step函数。您知道这可能不起作用的原因吗?您好,很抱歉回复太晚,但是如果您只是将serverless.yml文件中的处理程序名称从handler.handler更改为handler.init,我的代码应该可以工作,您不需要导出另一个名为处理程序,因为当你这样做时,LAMBDA只会在这个模块中运行代码,它不会考虑init模块。我已经更新了区域和状态机ARN值。但是当我执行这个时,我得到下面的错误消息:<代码> {“Error Meime:”:“2021-03-31T11:53:06.420Z*某些键使用-*任务在3.02秒后超时”}您找到解决方案了吗?我尝试了更新部件代码,lambda执行成功,但它没有调用step函数。请看这里。我做了完全相同的事情,从lambda调用了step函数。代码可以适当缩进,以提供更多精彩
const AWS = require('aws-sdk');
const stepFunctions = new AWS.StepFunctions({
region: 'YOUR_REGION_NAME'
});
module.exports.init = (event, context, callback) => {
const params = {
stateMachineArn: 'YOUR_STATE_MACHINE_ARN',
// input: JSON.stringify({}), Optional if your statemachine requires an application/json input, make sure its stringified
name: 'TestExecution' // name can be anything you want, but it should change for every execution
};
stepFunctions.startExecution(params, (err, data) => {
if (err) {
console.log(err);
const response = {
statusCode: 500,
body: JSON.stringify({
message: 'There was an error'
})
};
callback(null, response);
} else {
console.log(data);
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Step function worked'
})
};
callback(null, response);
}
});
};
{
"Comment": "Call Library_ReIndex Lambda",
"StartAt": "Library_StepFun_RDSAccess",
"States": {
"Library_StepFun_RDSAccess": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-
1:163806924483:function:Library_StepFun_RDSAccess",
"OutputPath": "$",
"Next": "MappingState"
},
"MappingState": {
"Type": "Map",
"InputPath": "$",
"ItemsPath": "$.documents",
"MaxConcurrency": 10,
"Iterator": {
"StartAt": "Choice",
"States": {
"Choice": {
"Type": "Choice",
"InputPath": "$",
"Choices": [
{
"Variable": "$.doc_source_type",
"StringEquals": "slides",
"Next": "callSlides"
},
{
"Variable": "$.doc_source_type",
"StringEquals": "docs",
"Next": "callDocs"
}
]
},
"callDocs": {
"Type": "Task",
"InputPath": "$",
"Resource": "arn:aws:lambda:us-east-1:163806924483:function:Library-Docs-
Parser-2",
"Catch": [ {
"ErrorEquals": ["States.ALL"],
"Next": "CatchAllFallback"
} ],
"OutputPath": "$",
"End": true
},
"callSlides": {
"Type": "Task",
"InputPath": "$",
"Resource": "arn:aws:lambda:us-east-1:163806924483:function:Library-Slides-Parser",
"Catch": [ {
"ErrorEquals": ["States.ALL"],
"Next": "CatchAllFallback"
} ],
"OutputPath": "$",
"End": true
},
"CatchAllFallback": {
"Type": "Pass",
"Result": "This is a fallback from any error code",
"End": true
}
}
},
"End": true
}
}
}