Триггеры Amazon AWS Cognito Lambda не работают с простой функцией PHP BREF

Недавно я начал экспериментировать с использованием пакета bref (https://bref.sh/docs/) для использования PHP для функций Lambda на Amazon AWS. Я отлично могу использовать этот пакет для загрузки простой лямбда-функции, настолько простой, насколько это возможно:

<?php

require __DIR__.'/vendor/autoload.php';

lambda(function ($event) {
    return $event;
});

Затем я беру эту лямбда-функцию и начинаю назначать ее триггерам Cognito. Он отлично работает с триггером предварительной регистрации, при создании новой учетной записи из панели администратора в Cognito никаких проблем не возникает.

Однако когда я беру тот же самый триггер и добавляю его к триггеру Cognito предварительной аутентификации, затем тестирую его с помощью простого локального приложения Symfony, которое действует как простой механизм аутентификации с использованием Cognito (разработано с использованием этого руководства: https://tech.mybuilder.com/managing-authentication-in-your-symfony-project-with-aws-cognito/), он сразу же возвращает ошибку:

Error executing "AdminInitiateAuth" on "https://cognito-idp.us-east-2.amazonaws.com"; AWS HTTP error: Client error: `POST https://cognito-idp.us-east-2.amazonaws.com` resulted in a `400 Bad Request` response:
{"__type":"InvalidLambdaResponseException","message":"Unrecognizable lambda output"}
InvalidLambdaResponseException (client): Unrecognizable lambda output - {"__type":"InvalidLambdaResponseException","message":"Unrecognizable lambda output"}

Когда я отключаю указанную выше лямбду, она сразу же начинает работать без ошибок, так что проблема не в моем приложении Symfony, а в какой-то лямбде (даже если она просто возвращает событие, которое ему задано, и работает для других триггеров, как указано выше).

Даже когда я заменяю это простой лямбдой, которая практически эквивалентна в Node, она работает нормально:

exports.handler = async (event) => {
    return event;
};

Кто-нибудь знает, почему лямбда PHP, похоже, не работает с триггером предварительной аутентификации Cognito? Я бы предпочел сделать это на PHP, если это возможно.

2 ответа

Решение

Проблема в преобразовании $event в JSON. Лямбда для этих двух событий ожидает:

"response": {}

и брат возвращается

"response": []

Это недопустимый ответ для AWS. Так что взломать. Самый быстрый способ - установить

$event['response'] = ['property' => 'name']

чтобы заставить брафа вернуться:

"respose": {"property":"name"}

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

      public function handle($event, Context $context): mixed
{
    ...

    //hack, because bref lambda trigger doesn't support 'response' key as an array
    $event['response'] = (object) [];

    return $event;
}
Другие вопросы по тегам