Я пытаюсь вернуть файл шаблона YAML CloudFormation в CodePipeline, чтобы его можно было передать в CloudFormation. Файл загружен в S3, и Lambda может легко получить к нему доступ и прочитать. Моя проблема заключается в том, чтобы превратить этот файл в выходной артефакт.
В настоящее время я могу вывести необработанный текст как «Выходную переменную», что я подтвердил из истории выполнения CodePipeline в консоли AWS. На этой же странице есть артефакт:
Однако эта ссылка приводит меня к ошибке в 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, но я не могу понять, как это сделать.
Любая помощь очень ценится.
В конечном итоге кажется, что я поступил неправильно. Я изменил конвейер, чтобы он имел только исходное действие S3 и запускал его с помощью настраиваемого события CloudWatch, когда новое изображение помещается в ECR. Затем я вручную отключил событие S3, созданное CodePipeline, чтобы только нажатие ECR запускало развертывание.
Подробнее здесь.