如何 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 推送才能触发部署。