如何 return 将 YAML 文件作为从 Lambda 到 CodePipeline 的输出工件
How to return a YAML file as an output artifact from Lambda to CodePipeline
我正在尝试 return 将 YAML CloudFormation 模板文件发送到 CodePipeline,以便将其传递给 CloudFormation。该文件已上传到 S3,Lambda 可以正常访问和读取它。我遇到的问题是将此文件转换为输出工件。
我目前能够将原始文本输出为 'Output variable',我已经从 AWS 控制台的 CodePipeline 执行历史记录中确认了这一点。在同一页面中还有一个工件:
然而,这个 link 让我在 S3 中出错,让我相信这个工件实际上从未以任何方式填充。
这是我目前拥有的 Lambda 函数:
var AWS = require('aws-sdk')
var s3 = new AWS.S3();
var codepipeline = new AWS.CodePipeline();
exports.handler = (events, context) => {
const params = {
Bucket: 'myBucket',
Key: 'myFile.yml'
};
s3.getObject(params, function(err, data) {
if (err) {
// Handling
} else {
var yamlString = data.Body.toString('utf-8');
var params = {
jobId: jobId,
outputVariables: {
s3Artifact: file
}
};
codepipeline.putJobSuccessResult(params, function(err, data) {
if(err) {
context.fail(err);
} else {
context.succeed(message);
}
});
return;
}
});
}
让我感到困惑的是,CodePipeline 显然允许我为此 Lambda 函数指定一个输出工件,但我不知道该怎么做。
非常感谢任何帮助。
最终我似乎走错了路。我将管道更改为只有一个 S3 源操作,并让它在新图像被推送到 ECR 时由自定义 CloudWatch 事件触发。然后我手动禁用了 CodePipeline 创建的 S3 事件,这样只有 ECR 推送才能触发部署。
我正在尝试 return 将 YAML CloudFormation 模板文件发送到 CodePipeline,以便将其传递给 CloudFormation。该文件已上传到 S3,Lambda 可以正常访问和读取它。我遇到的问题是将此文件转换为输出工件。
我目前能够将原始文本输出为 'Output variable',我已经从 AWS 控制台的 CodePipeline 执行历史记录中确认了这一点。在同一页面中还有一个工件:
然而,这个 link 让我在 S3 中出错,让我相信这个工件实际上从未以任何方式填充。
这是我目前拥有的 Lambda 函数:
var AWS = require('aws-sdk')
var s3 = new AWS.S3();
var codepipeline = new AWS.CodePipeline();
exports.handler = (events, context) => {
const params = {
Bucket: 'myBucket',
Key: 'myFile.yml'
};
s3.getObject(params, function(err, data) {
if (err) {
// Handling
} else {
var yamlString = data.Body.toString('utf-8');
var params = {
jobId: jobId,
outputVariables: {
s3Artifact: file
}
};
codepipeline.putJobSuccessResult(params, function(err, data) {
if(err) {
context.fail(err);
} else {
context.succeed(message);
}
});
return;
}
});
}
让我感到困惑的是,CodePipeline 显然允许我为此 Lambda 函数指定一个输出工件,但我不知道该怎么做。
非常感谢任何帮助。
最终我似乎走错了路。我将管道更改为只有一个 S3 源操作,并让它在新图像被推送到 ECR 时由自定义 CloudWatch 事件触发。然后我手动禁用了 CodePipeline 创建的 S3 事件,这样只有 ECR 推送才能触发部署。