Разработка Serverless Functions для сайта (Netlify Functions)
Netlify Functions — serverless-функции, работающие на AWS Lambda под капотом, но деплоящиеся автоматически вместе с сайтом. Настройка занимает минуты: создал файл в netlify/functions/, задеплоил — функция работает.
Два типа функций
Sync Functions — стандартный request/response. Поддерживают Node.js 18+, Go, Rust. Таймаут 10 секунд (бесплатно) / 26 секунд (Pro).
Background Functions — для долгих задач (до 15 минут). Немедленно возвращают 202 Accepted, выполнение продолжается в фоне. Имя файла: *.mts или *-background.ts.
Пример sync-функции
Файл netlify/functions/contact.ts:
import type { Handler, HandlerEvent } from "@netlify/functions";
export const handler: Handler = async (event: HandlerEvent) => {
if (event.httpMethod !== "POST") {
return { statusCode: 405, body: "Method Not Allowed" };
}
const data = JSON.parse(event.body || "{}");
const { name, email, message } = data;
// Отправка через Netlify Email Integration или внешний API
await fetch("https://api.sendgrid.com/v3/mail/send", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SENDGRID_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
personalizations: [{ to: [{ email: "[email protected]" }] }],
from: { email: "[email protected]" },
subject: `Сообщение от ${name}`,
content: [{ type: "text/plain", value: `${name} (${email}): ${message}` }],
}),
});
return {
statusCode: 200,
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ ok: true }),
};
};
Функция доступна по /.netlify/functions/contact или через redirect в netlify.toml:
[[redirects]]
from = "/api/contact"
to = "/.netlify/functions/contact"
status = 200
Background Function для отчётов
// netlify/functions/generate-report-background.ts
import type { BackgroundHandler } from "@netlify/functions";
export const handler: BackgroundHandler = async (event) => {
const { reportId } = JSON.parse(event.body || "{}");
// Долгая операция: генерация PDF, обработка данных
const pdf = await generatePDFReport(reportId);
// Сохраняем в S3 и уведомляем пользователя
await uploadToS3(pdf, `reports/${reportId}.pdf`);
await notifyUser(reportId);
};
netlify.toml
[build]
command = "npm run build"
publish = "dist"
functions = "netlify/functions"
[functions]
node_bundler = "esbuild"
included_files = ["templates/**"]
[dev]
command = "npm run dev"
port = 8888
node_bundler = "esbuild" ускоряет сборку и уменьшает размер бандла по сравнению с zip-архивом.
Переменные окружения
Netlify Dashboard → Site Settings → Environment variables. Для локальной разработки — файл .env:
SENDGRID_API_KEY=SG.xxx
DATABASE_URL=postgresql://...
Netlify CLI подхватывает .env при netlify dev.
Netlify Forms как альтернатива
Для простых контактных форм Netlify предлагает встроенную обработку без написания функции:
<form name="contact" method="POST" data-netlify="true">
<input type="hidden" name="form-name" value="contact" />
<!-- поля формы -->
</form>
Netlify автоматически принимает отправки, хранит их в панели и отправляет уведомления. Бесплатно до 100 отправок в месяц.
Сроки
Базовые функции (форма, вебхук) с настройкой редиректов — 1–2 дня.







