Как вернуть файл YAML в качестве выходного артефакта из Lambda в CodePipeline

Я пытаюсь вернуть файл шаблона YAML CloudFormation в CodePipeline, чтобы его можно было передать в CloudFormation. Файл загружен в S3, и Lambda может легко получить к нему доступ и прочитать. Моя проблема заключается в том, чтобы превратить этот файл в выходной артефакт.

В настоящее время я могу вывести необработанный текст как «Выходную переменную», что я подтвердил из истории выполнения CodePipeline в консоли AWS. На этой же странице есть артефакт:

Ссылка на артефакт S3 в истории выполнения CodePipeline

Однако эта ссылка приводит меня к ошибке в S3, что заставляет меня думать, что артефакт никогда не заполняется каким-либо образом.

Неудачный артефакт S3

Это лямбда-функция, которая у меня есть на данный момент:

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, но я не могу понять, как это сделать.

введите описание изображения здесь

Любая помощь очень ценится.

См. также:  Крестики-нолики - Возвращение отмеченного квадратного числа
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Tom Barden

    В конечном итоге кажется, что я поступил неправильно. Я изменил конвейер, чтобы он имел только исходное действие S3 и запускал его с помощью настраиваемого события CloudWatch, когда новое изображение помещается в ECR. Затем я вручную отключил событие S3, созданное CodePipeline, чтобы только нажатие ECR запускало развертывание.

    Подробнее здесь.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: