אתר ה-JAMstack שלך גדל, והגיע הזמן להוסיף לוגיקה בצד השרת ללא backend ייעודי. Netlify Functions הם handlers ללא שרת (serverless) שנפרסים לצד ה-frontend שלך תוך דקות. פשוט צור קובץ ב-netlify/functions/ והפונקציה מוכנה. בעיה אופיינית: טופס יצירת קשר באתר סטטי נכשל בשליחת נתונים, או שאתה צריך לטפל ב-webhooks משירותים חיצוניים. במקום להקים שרת נפרד, אנו משתמשים ב-Netlify Functions. עלות התשתית כמעט אפסית, וקנה מידה אוטומטי מסיר כאבי ראש.
אנו כותבים פונקציות serverless עבור Netlify מאז השקת הפלטפורמה. במשך יותר מ-5 שנים, יישמנו 50+ פונקציות עבור 15 פרויקטים: עיבוד טפסים, יצירת PDF, אינטגרציות webhook עם CRM ומערכות תשלום. המהנדסים שלנו מוסמכים ב-JAMstack; אנו מבטיחים ביצועים יציבים של פונקציות תחת עומס של 1000+ בקשות לדקה.
שני סוגי פונקציות
Sync Functions — בקשה/תגובה סטנדרטית. תומכות ב-Node.js 18+, Go, Rust. זמן קצוב (timeout) של 10 שניות (חינם) / 26 שניות (Pro).
Background Functions — למשימות ארוכות טווח (עד 15 דקות). מחזירות מיד 202 Accepted, והביצוע נמשך ברקע. שמות קבצים: *.mts או *-background.ts.
| פרמטר | Sync Function | Background Function |
|---|---|---|
| זמן ביצוע | עד 10/26 שניות | עד 15 דקות |
| תגובה ללקוח | לאחר השלמה | מיידית 202 Accepted |
| שימוש אופייני | API, webhooks, טפסים | יצירת PDF, עיבוד נתונים, שליחת אימיילים |
איך לבחור בין Sync ל-Background Functions?
| תרחיש | סוג פונקציה |
|---|---|
| עיבוד טופס יצירת קשר | Sync |
| יצירת דוח PDF | Background |
| Webhook ממערכת תשלום | Sync |
| שליחת אימיילים המונית | Background |
| API ל-frontend (CRUD) | Sync |
| עיבוד תמונות | Background |
יתרונות ומהירות פיתוח
Netlify Functions נפרסות פי 3-5 מהר יותר מאשר שרת נפרד על AWS EC2. אין צורך לנהל תשתית: קנה מידה, תיקוני אבטחה ואיזון עומסים מתרחשים אוטומטית. זה מפחית עלויות ניהול פי 2-3 (חיסכון של $500–$2000 לחודש בהשוואה לשרת ייעודי). אינטגרציה עם מאגר Git מאפשרת לפרוס פונקציות לצד ה-frontend עם git push אחד — אין צורך להקים pipeline CI/CD נפרד. פיתוח מקומי דרך netlify dev מדמה את סביבת הייצור. ניתן להפחית cold start באמצעות bundling עם esbuild והגדרת Warm Functions בתוכנית Pro.
איך לייעל cold start?
Cold start הוא העיכוב בקריאה הראשונה לפונקציה כאשר סביבת הביצוע אינה מוכנה. ב-Netlify Functions, ברירת המחדל היא 200–500 אלפיות שנייה. כדי להפחית ל-50–100 אלפיות שנייה, השתמש ב-esbuild ל-bundling (הוא מאחד תלויות לקובץ אחד) ובחר בתוכנית Pro עם Warm Functions, ששומרת על הפונקציות חמות. כמו כן, הימנע מתלויות מונוליטיות: ייבא רק את המודולים הדרושים.
טעויות נפוצות בפיתוח Netlify Functions
- התעלמות מ-cold start: בדוק פונקציות עם סביבה מחוממת. - ללא טיפול בשגיאות: תמיד החזר קוד סטטוס HTTP נכון. - אי שימוש במשתני סביבה: אחסן מפתחות בקובץ `.env`, לא בקוד. - שכחת מגבלות: זמן קצוב של 10 שניות ל-Sync, 15 דקות ל-Background.דוגמה לפונקציית 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 }),
};
};הפונקציה נגישה בכתובת 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 }), }; }; או דרך הפניה (redirect). לדוגמה, באמצעות /.netlify/functions/contact: הפנה את netlify.toml ל-/api/contact.
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
/.netlify/functions/contact מאיץ בניות ומפחית את גודל החבילה ב-40% בהשוואה לארכיון zip.
משתני סביבה
Netlify Dashboard → Site Settings → Environment variables. לפיתוח מקומי, השתמש בקובץ // 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); }; :
SENDGRID_API_KEY=SG.xxx DATABASE_URL=postgresql://... תהליך עבודה והיקף שירותים
אנו מבצעים את מחזור הפיתוח המלא של פונקציות serverless:
- אנליטיקה — הגדרת הפונקציות הנדרשות, החתימות שלהן ואינטגרציות.
- עיצוב — ארכיטקטורה, בחירת סוגי פונקציות, אופטימיזציה של cold start.
- יישום — קידוד עם bundling של esbuild.
- בדיקות — הרצה מקומית דרך
[build] command = "npm run build" publish = "dist" functions = "netlify/functions" [functions] node_bundler = "esbuild" included_files = ["templates/**"] [dev] command = "npm run dev" port = 8888, אימות מקרי קצה. - פריסה — הגדרת פריסה אוטומטית דרך Git.
מה כלול (תוצרים)
- קוד פונקציות עם טיפול בשגיאות ו-logging
-
node_bundler = "esbuild"והגדרת הפניות (redirects) - הגדרת משתני סביבה
- בדיקות מקומיות וייצור
- תיעוד קריאה ופריסה
- גישה למאגר ול-pipeline CI/CD
- הדרכה של שעה אחת על תחזוקה
- תמיכה ל-30 יום לאחר מסירת הפרויקט
לוחות זמנים ועלות
פונקציות בסיסיות (טופס, webhook) עם הגדרת הפניות — 1–2 ימים, החל מ-$500. אינטגרציות מורכבות (יצירת PDF, APIs חיצוניים) — מ-3 ימים, החל מ-$1500. צור קשר לייעוץ על הארכיטקטורה ה-serverless שלך.
תיעוד רשמי של Netlify Functions: Netlify Functions overview







