может лямбда вызвать другую лямбду, а затем выйти до завершения дочерней лямбды? - PullRequest
1 голос
/ 10 марта 2020

У меня есть две AWS лямбды, написанные на go. Одна лямбда вызывает другую следующим образом:

payload, err := json.Marshal(request)
if err != nil {
    log.Printf("ERROR: could not marshal request [%v] into model.ChildLambdaRequest - %v\n", request, err)
    return false
}

log.Printf("--- debug sending payload: %s", payload)

// Invoke Child

result, err := client.Invoke(&lambda.InvokeInput{
    FunctionName: aws.String(lambdaName),
    Payload:      payload,
})
if err != nil {
    log.Printf("ERROR: could not invoke Lambda function client [%v] - %v\n", lambdaName, err)
    return false
}

Дочерняя лямбда завершается следующим образом:

return model.EventResponse{Success: true}, nil

Я знаю, что это делает две вещи: 1.) она заканчивает выполнение и 2 .) это возвращает значение. Есть ли способ разделить эти два действия, чтобы я мог вернуть значение сверху, но завершить выполнение позже?

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Да, вам нужно передать InvocationType: "Event" на Invoke вызов, задокументированный здесь . Тип вызова по умолчанию - RequestResponse, который ожидает ответа от вызванной лямбды.

0 голосов
/ 10 марта 2020

Это возможно с Направлениями в Lambda .

Хотя я бы проверил AWS Шаг Функции , который дает вам эту функцию вместе со встроенными повторными попытками и обработка ошибок. Он работает с существующими функциями Lambda и имеет довольно простой в использовании интерфейс.

Последний вариант, который может сработать: вы отправляете сообщение из первой функции в очередь SQS, и ваша вторая лямбда запускается из очереди SQS. Это также дает вам возможность повторной попытки.

...