Функция AWS Lambda отлично работает при ручном вызове, но не через конечную точку.

У меня есть функция Lambda, прикрепленная к конечной точке шлюза 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, и я не вижу там ничего странного. Есть идеи, как исправить / отладить эту проблему?

Ваше здоровье!


person haz    schedule 06.05.2018    source источник


Ответы (1)


Ах, думаю, я решил это!

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

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

person haz    schedule 07.05.2018
comment
Я думаю, что метод GET в HTTP по определению не включает тело. - person jackxujh; 08.09.2018