Amazon AWS Триггеры Cognito Lambda не работают с простой PHP функцией BREF - PullRequest
0 голосов
/ 03 февраля 2020

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

<?php

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

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

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

Однако, когда я беру этот же точный триггер и добавляю его в Pre -authentication Триггер 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, если это возможно.

1 Ответ

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

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

"response": {}

и bref возвращает

"response": []

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

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

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

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