Вероятно, проблема в том, что ваша лямбда-функция завершается до регистрации ответа.
Мы постоянно используем заголовки Authorization
для вызова наших лямбд.Вопрос о том, можете ли вы использовать один для вызова стороннего API, зависит от них, а не от вас, поэтому проверьте документацию.
Поскольку ваш HTTP-вызов выполняется асинхронно, выполнение лямбды продолжается, пока этот вызоврешается.Поскольку в лямбде больше нет команд, она завершается до возврата вашего ответа и может быть зарегистрирована.
EDIT : модуль http.get
трудно использовать чисто с async / await.По этой причине я обычно использую superagent
, axios
или request
, или даже node-fetch
.Я буду использовать request
в своем ответе.Если вы должны использовать собственный модуль, см. EG этот ответ .В противном случае, npm install request request-promise
и используйте мой ответ ниже.
Схема, которую многие люди используют в эти дни для такого рода вызовов, использует, например, async/await
(требуется Узел 8 +):
var request = require('request-promise')
exports.handler = async function(event, context, callback) {
console.log('start request to Mocky');
try {
const res = await request.get('http://www.mocky.io/v2/5c62a4523000004a00019907')
console.log(res)
callback(null, { statusCode: 200, body: JSON.stringify(res) })
}
catch(err) {
console.error(err.message)
callback('Got error ' + err.message)
}
};
За асинхронной / ожидающей версией намного проще следовать IMO.
Все, что находится внутри функции async
, помеченной await
, должно быть разрешено до продолжения выполнения.Вокруг этого много статей, попробуйте этот .