Что такое лямбда-функция?
По определению лямбда-функции — это анонимные функции, не привязанные к каким-либо идентификаторам. Эти функции обычно передаются в качестве аргументов другим функциям более высокого порядка. Однако когда дело доходит до Netlify или любого другого облачного провайдера, лямбда-функции приобретают другое значение. Лямбда-функции — отличный способ определить небольшой фрагмент бессерверного кода для запуска от имени ваших приложений. Допустим, у вас есть приложение, работающее исключительно на стороне клиента, и вам нужен небольшой фрагмент кода, который будет выполняться на стороне сервера, поднимая совершенно новый сервер, и развертывание только для выполнения одной небольшой задачи кажется немного накладные расходы. В таких случаях на помощь приходит лямбда-функция.
Netlify лямбда
Netlify — это облачное предложение, которое также предоставляет лямбда-функции без учетной записи AWS, а управление функциями осуществляется непосредственно в Netlify. Эти бессерверные функции контролируются версиями, создаются и развертываются вместе с остальной частью сайта Netlify.
В этом руководстве мы реализуем лямбда-функцию для обработки вызова POST, поступающего с вашего сайта. Этот вызов выполняет еще один вызов общедоступного API и возвращает данные на ваш веб-сайт.
Перейдите в корневую папку вашего проекта и установите следующий пакет:
npm install netlify-lambda
Этот пакет поможет вам создать лямбда-функцию локально, чтобы вы могли выполнять вызовы API и тестировать функциональность.
Откройте файл netlify.toml
и добавьте путь к папке, в которой находится лямбда-функция. Очень важно добавить это на шаге build вашего файла netlify. Это гарантирует, что лямбда-функция будет собираться каждый раз для создания и развертывания ваших изменений.
// netlify.toml
[build]
publish = "public"
command = "yarn run build"
functions = "lambda"
Теперь, когда у нас есть готовый путь сборки, пришло время написать лямбда-функции. Создайте новую папку lambda
и файл index.js
. Добавьте свою лямбда-функцию.
// lambda/index.js
const { REVUE_KEY } = process.env;
const fetch = require("node-fetch");
const API_ENDPOINT = "https://someendpoint";
exports.handler = async (event, context) => {
const headers = {
'Access-Control-Allow-Origin': '*',
// Add any other headers as per requirement
};
if (event.httpMethod === 'OPTIONS') {
callback(null, { statusCode: '204', headers });
return;
}
if(event.httpMethod === 'POST') {
const { email } = JSON.parse(event.body) || "";
const { name } = JSON.parse(event.body) || "";
return fetch(`${API_ENDPOINT}/api/v2/subscribers`, {
method: 'POST',
headers: {
'Authorization': `Token ${ENDPOINT_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"email": email,
"name": name,
"double_opt_in": true
})
})
.then(() => ({ statusCode: 201 }))
.catch(error => ({ statusCode: 422, body: String(error) }));
}
};
Лямбда-функции — это, по сути, любая функция javascript, которая работает поверх событий. При вызове метода HTTP вы определяете тип метода и выполняете соответствующее действие.
В приведенной выше лямбда-функции мы обрабатываем запросы к двум методам. OPTIONS
и POST
. Это выполнение методов остается таким же, как и для любой другой асинхронной функции.
Вызов лямбда-функции
После написания лямбда-функции важно вызвать ее и убедиться, что она работает так, как задумано. Все лямбда-функции, развернутые в netlify, доступны по URL-адресу base_url/.netlify/functions/lambda_function_file_name
. Используйте этот URL-адрес и сделайте POST-вызов своего метода.
Запустите лямбда-функцию с помощью следующей команды:
netlify-lambda build <folder>
netlify-lambda install [folder]
Когда лямбда-функция запущена, вы можете вызвать ее, используя fetch
любой другой вызов API:
fetch(`${base_url}/.netlify/functions/index`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"email": email,
"name": name
})
})
Отправьте свои изменения и разверните их на netlify.
Если вы следовали инструкциям, то вуаля!!! У вас есть лямбда-функция, работающая в Netlify. Если у вас возникли трудности с выполнением этого руководства, обратитесь к моему репозиторию GitHub: https://github.com/AparnaJoshi007/explained. Пожалуйста, не стесняйтесь пинговать меня, если у вас есть какие-либо сомнения. Ваше здоровье!!!