Длительное задание Lambda выполняется без ошибок два раза. - PullRequest
0 голосов
/ 25 февраля 2020

Я вызываю лямбду через aws -sdk с явным RequestResponse

const Lambda = require("aws-sdk/clients/lambda");
const lambda = new Lambda({region: "region"});

const params = {
  FunctionName: "myFunctionArn",
  InvocationType: "RequestResponse",
  Payload: JSON.stringify({
    //... my payload
  })
};

lambda.invoke(params).promise().then(data => {
  console.log(data);
});

Это длительное задание> ~ 5 минут и мое время ожидания установлено на 10 минут . Я загружаю mp3, сжимаю его, сохраняю в S3 и затем возвращаю URL-адрес клиенту. В cloudwatch нет ошибок, и процесс идет гладко, mp3 хранится с более низким качеством до S3, однако функция выполняется два раза.

Если файл mp3 достаточно мал (~ 8 МБ), есть только одно выполнение, однако, если это большой файл (~ 100 МБ), он будет выполнен два раза и, конечно, функция отключится. Я использую папку / tmp для временного хранения файла, я также удалю их после того, как mp3 будет безопасно сохранен в S3. Я разбросал свою функцию с журналированием, и абсолютно никаких признаков ошибок и это происходит каждый раз, а не спорадически.

Это мои журналы Cloudwatch enter image description here

Спасибо

EDIT_1: я пытался добавить некоторые параметры для лямбда-клиента

const Lambda = require("aws-sdk/clients/lambda");
const lambda = new Lambda({
  region: "ap-southeast-1",
  httpOptions: { timeout: 10 * 60 * 1000, connectTimeout: 10 * 60 * 1000 }
});

Но, похоже, ничего не изменилось

EDIT_2: похоже, что теперь это происходит и для краткосрочных задач и является совершенно случайным. Я в недоумении, я действительно не знаю, что делать

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Установка maxRetries на 0 в параметрах конфигурации SDK отключит повторные попытки, вызываемые самим SDK.

const Lambda = require("aws-sdk/clients/lambda");
const lambda = new Lambda({
  maxRetries: 0,
  region: "ap-southeast-1",
  httpOptions: { timeout: 10 * 60 * 1000, connectTimeout: 10 * 60 * 1000 }
});
0 голосов
/ 03 марта 2020

Потратив бесчисленное количество часов на отладку, я обнаружил, что причиной этого странного поведения было то, что функции не хватало памяти. Достаточно невероятно, что на Cloudwatch ничего не появилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...