AWS CodePipeline передает неправильный JobId в Lambda (nodejs) - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть конвейер с четырьмя этапами: источник, сборка, развертывание, а затем этап Lambda.На стадии лямбды я запускаю одну функцию для перемещения некоторых файлов в s3.

Функция s3 работает, я вижу, что файлы s3 были перемещены, но стадия лямбда никогда не завершается успешно, она всегда истекает.После некоторых размышлений я думаю, что это потому, что CodePipeline передает неправильный JobId в Lambda, потому что, если я регистрирую входящее событие, я вижу, что значение id отличается от идентификатора, который выполняется на вкладке истории конвейера.

Функция настроена на запуск и putJobSuccessResult(), и putJobFailureResult(), и они работают, потому что, если я затем скопирую идентификатор из вкладки истории конвейера и вставлю его в тестовое событие в Lambda и выполнютест, а затем конвейер проходит успешно, а не по тайм-ауту.

Я искал ответы часами, но, похоже, я не могу найти никакого решения, или даже кого-то еще с такой же проблемой.Я довольно новичок в AWS в целом, поэтому, возможно, я что-то упускаю.

Любая помощь будет очень признательна, спасибо.

Обновлено:

Я используюследующие, чтобы получить работу:

var jobId = event["CodePipeline.job"].id;

1 Ответ

0 голосов
/ 28 ноября 2018

Не могли бы вы опубликовать лямбда-код?

Такая проблема может возникнуть, если запрос на успешное / неудачное выполнение конвейера не завершен.Например, когда лямбда выходит перед завершением вызова.

  1. Проверьте асинхронное выполнение, например, если ваш лямбда-обработчик является функцией async, вызовите API конвейера с ключевым словом await.

  2. Перехват ошибок и установка конвейера как сбоя при возникновении исключения.

Пример:

const AWS = require('aws-sdk')
const codepipeline = new AWS.CodePipeline({apiVersion: '2015-07-09'})

exports.handler = async function(event, context) {
  const jobId = event["CodePipeline.job"].id
  try {
    ...
    const params = {
      jobId
    }
    await codepipeline.putJobSuccessResult(params).promise()
  }
  catch (err) {
    const params = {
      jobId,
      failureDetails: {
         message: err.toString(),
         type: 'JobFailed',
         externalExecutionId: context.invokeid
      }
    }
    await codepipeline.putJobFailureResult(params).promise()
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...