Функции шага лямбда: запустить и забыть шаблон

#aws-lambda #aws-step-functions

#aws-лямбда #aws-пошаговые функции

Вопрос:

У меня есть лямбда-код на основе Python (core Lambda), обслуживающий синхронный API. API запускается из пользовательского интерактивного приложения. Теперь мне нужно добавить некоторые журналы и метрики (немного требующие больших вычислительных затрат) к лямбде. Я не хочу, чтобы это задерживало основную лямбду. Я хочу поместить это в новую лямбду (logging Lambda). Чего я хочу, так это — core Lambda завершает свою работу, запускает logging Lambda (fire amp; forget) и немедленно возвращает ответ на вызов API. Конечное состояние (успех / неудача) лямбды протоколирования не имеет значения.

Могут ли «Пошаговые функции» достичь этого? Основные и логирующие лямбды имеют свое собственное конечное состояние, и я не уверен, что шаблон функции «Шаг» может вместить это.

Комментарии:

1. я бы предложил использовать SNS. Доставка сообщений в SNS по-прежнему будет синхронной, но вычисления в вашем лямбде ведения журнала будут асинхронными.

2. @kkesley- Спасибо, это вариант, который я могу попробовать

Ответ №1:

Вы можете запустить асинхронный вызов лямбда-функции, используя "InvocationType": "Event" in ваши параметры Invoke. Чтобы сделать это в пошаговых функциях, код ASL выглядит следующим образом:

 {
  "StartAt": "Invoke Lambda function asynchronously",
  "States": {
    "Invoke Lambda function asynchronously": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": {
        "FunctionName": "myFunction",
        "Payload.$": "$",
        "InvocationType": "Event"
      },
      "End": true
    }
  }
}
 

Наличие асинхронной лямбда-задачи (как показано выше) после вашей основной лямбда-задачи кажется, что она должна работать. Чтобы убедиться, что сбой лямбда-кода ведения журнала не влияет на общий рабочий процесс, вы можете добавить к нему ловушку States.ALL и перенаправить в Succeed состояние.

https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html#error-handling-fallback-states

Комментарии:

1. Смогли ли вы отправить пользовательскую полезную нагрузку, когда использовали InvocationType as Event ? В настоящее время я не могу отправлять полезную нагрузку при использовании Event .

Ответ №2:

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

Комментарии:

1. @aws-jordan- Спасибо. Требуется ли для этого функция step или это просто основная лямбда, вызывающая лямбда-логирование асинхронно? Я не знал, что можно асинхронно запускать дочернюю лямбду.