Розробка 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 або через редирект у 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 відправлень на місяць.
Терміни
Базові функції (форма, webhook) з налаштуванням редиректів — 1–2 дні.







