Лямбда-функция AWS отлично работает при вызове вручную, но не через конечную точку - PullRequest
0 голосов
/ 06 мая 2018

У меня есть лямбда-функция, подключенная к конечной точке шлюза API, которая перечисляет элементы под идентификатором в DynamoDB.

Я построил свою функцию с использованием Serverless Framework. Когда я вызываю функцию локально (serverless invoke local ...), она работает нормально. Когда я тестирую его вручную на консоли AWS Lambda, он работает нормально, но когда я вызываю его из шлюза API, он не работает.

Он настроен на использование этой полезной нагрузки: (что я использовал для тестирования)

{
    "requestContext": {
        "identity": {
            "cognitoIdentityId": "468648c5-b135-4075-910a-8a648d66e67d"
        }
   }
}

В моем приложении я использую пакет aws-amplify. Вот как я называю конечную точку:

data = await API.get('endpoint-name', '/endpoint', {
    body: {
        requestContext: {
            cognitoIdentityId: '468648c5-b135-4075-910a-8a648d66e67d'
        }
    }
});

Здесь я получаю ошибку 403. Если я позвоню без дополнительных данных, то есть:

data = await API.get('endpoint-name', '/endpoint');

Я получаю пустой список [ ], но без ошибок. aws-amplify автоматически заполняет поле cognitoIdentityId? Я следую учебному пособию по serverless-stack , и они как бы замаскируют это.

У меня также настроено CloudWatch, и я не вижу там ничего прикольного. Любые идеи о том, как исправить / отладить эту проблему?

Ура!

1 Ответ

0 голосов
/ 07 мая 2018

Ах, кажется, я решил это!

Я настроил свою конечную точку на получение параметров из тела запроса GET, однако (я думаю) либо aws-amplify, либо API Gateway не поддерживает тело запроса при выполнении GET. Я заметил это, вручную протестировав API Gateway (чего я раньше не делал), и там было указано Request Body is not supported for GET methods.

Так что я думаю, что мне придется передать мои параметры в самом URL.

...