Что такое лямбда-функция?

По определению лямбда-функции — это анонимные функции, не привязанные к каким-либо идентификаторам. Эти функции обычно передаются в качестве аргументов другим функциям более высокого порядка. Однако когда дело доходит до 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. Пожалуйста, не стесняйтесь пинговать меня, если у вас есть какие-либо сомнения. Ваше здоровье!!!