Ger*_*uña 3 aws-lambda aws-codepipeline
好吧,根据日志,我的 lambda 函数工作得很好,但它从未在 codepipeline 阶段完成,我已经为允许通知管道设置了角色权限(“codepipeline:PutJobSuccessResult”,“codepipeline:PutJobFailureResult”),甚至设置了 maximun时间到 20 秒但仍然不起作用(实际上在 800 毫秒时结束)。
const axios = require('axios')
const AWS = require('aws-sdk');
const url = 'www.exampleurl.com'
exports.handler = async (event, context) => {
const codepipeline = new AWS.CodePipeline();
const jobId = event["CodePipeline.job"].id;
const stage = event["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters;
const putJobSuccess = function(message) {
var params = {
jobId: jobId
};
codepipeline.putJobSuccessResult(params, function(err, data) {
if (err) {context.fail(err); }
else {context.succeed(message);}
});
};
const putJobFailure = function(message) {
var params = {
jobId: jobId,
failureDetails: {
message: JSON.stringify(message),
type: 'JobFailed',
externalExecutionId: context.invokeid
}
};
codepipeline.putJobFailureResult(params, function(err, data) {
if (err) console.log(err)
context.fail(message);
});
};
try {
await axios.post(url, { content: stage})
putJobSuccess('all fine')
} catch (e) {
putJobFailure(e)
}
Run Code Online (Sandbox Code Playgroud)
};
小智 5
因为nodeJS 默认情况下异步运行所有内容,codepipeline.putJobSuccessResult所以正在异步运行。问题似乎是 Lambda 函数在codepipeline.putJobSuccessResult有机会完成之前就完成了执行。
同步运行codepipeline.putJobSuccessResult,以便在将响应返回到 lambdaHandler 的 Lambda 之前强制完成。
const putJobSuccess = function(id) {
//await sleep(60);
console.log("Telling Codepipeline test passed for job: " + id)
var params = {
jobId: id
};
return codepipeline.putJobSuccessResult(params, function(err, data) {
if(err) {
console.error(err)
} else {
console.log(data)
}
}).promise()
};
exports.lambdaHandler = async (event, context) => {
...
await putJobSuccess( jobId )
return response
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1191 次 |
| 最近记录: |