שרת ווב רגיל אמור פשוט להאזין לפורט ולענות לבקשות. במשך יותר מעשור, מי שניסה להריץ שרת ווב על גבי תשתית Serverless של אמזון נאלץ לעטוף את הקוד בשכבות תרגום מסורבלות כמו aws-serverless-express, להמיר אירועי JSON לבקשות HTTP ובחזרה, ולספוג עונשי זמני תגובה. אתמול זה השתנה כשאמזון הכריזה על AWS Lambda Web Functions, פרימיטיב שמביא שרתי ווב רגילים ישירות אל תוך סביבת ההרצה.
זה שינוי מהותי באופן שבו אמזון תופסת עומסי ווב.
בלי ספריות תרגום באמצע
השינוי הטכני כאן ישיר. במקום לפעול לפי מודל האירועים הוותיק שבו פונקציה מקבלת אובייקט אירוע יחיד ומחזירה תשובה, שרתי ווב בפורמט החדש מקבלים תעבורת רשת חיה ישירות על פורט TCP מקומי. המשתנה היחיד שנוסף לקוד הוא משתנה סביבה שמציין את כתובת ה-IP והפורט להאזנה, כך ששרת Express או Fastify רץ בענן בדיוק כמו שהוא רץ על המחשב המקומי שלכם. ההשקה הזו גם מסדרת מחדש את שירות Lambda לשלושה פורמטים נפרדים המבוססים על בידוד של Firecracker, כשהחלוקה העיקרית מפרידה בין Event Functions לאירועים אסינכרוניים לבין Web Functions לאפליקציות ווב ולממשקי API.
אתם יכולים לקחת שרת סטנדרטי שמאזין לפורט שנבנה עם Express, Hono, Fastify, Next.js או כל שלד Node.js, לפרוס אותו בפקודה אחת, ו-Lambda תנהל אוטומטית שרידות, הפצה מרובת אזורים ותמחור מעבד פעיל.AWS News Blog
משלמים על מעבד ולא על המתנה
הבשורה הכלכלית מורגשת מיד בחשבון החודשי. במודל הוותיק של Lambda, השעון תקתק על כל מילי-שנייה מרגע כניסת הבקשה ועד שהתשובה נמסרה חזרה, גם כשהפונקציה בעיקר המתינה לשאילתה ממסד הנתונים או לקריאת רשת חיצונית. לפי דף התמחור הרשמי של Lambda, פורמט Web Functions מחייב לפי בקשות וזמן מעבד פעיל. בדוקומנטציה ובפוסט ההכרזה מוסבר שבמקביל נמדד הזיכרון על פני כל משך החיים של סביבת ההרצה.
המודל הזה משתלם במיוחד בזכות היכולת לטפל בעד 128 בקשות במקביל בתוך אותה סביבת הרצה בודדת. במקום להקצות מופע נפרד לכל בקשה ולשלם על זמן המתנה ל-I/O, עומסי עבודה חולקים סביבות חמות ומנצלים את המעבד ביעילות גבוהה בהרבה. אם אתם מריצים שירותי ווב עתירי המתנה לרשת, כמו Server-Side Rendering או נקודות קצה שמזרימות טוקנים ממודלי AI, המעבר עשוי לחתוך חלק ניכר מעלויות השרתים שלכם.
| פורמט ריצה | מודל תכנות | ריבוי בקשות במקביל | שיטת תמחור | תרחיש שימוש מרכזי |
|---|---|---|---|---|
| Event Functions | קבלת אירוע ומענה באמצעות Handler ייעודי | בקשה אחת לכל סביבת הרצה | משך ריצה כולל לפי זיכרון מוקצה ובקשות | עיבוד אירועים אסינכרוני, תורים ואינטגרציות AWS |
| Web Functions | האזנה ישירה על פורט HTTP מקומי | עד 128 בקשות לסביבת הרצה | זמן מעבד פעיל, זיכרון פעיל ובקשות | שרתי ווב, אפליקציות Next.js וממשקי API |
| MicroVMs | סביבת Sandbox עם מחזור חיים בניהול לקוח | לא פורסם | לפי מופע לשנייה | הרצת קוד לא מהימן וקוד משתמשים מבודד |
רק שפה אחת ובלי ישראל
כאן מתחילות האותיות הקטנות. נכון להשקה, השירות תומך אך ורק בסביבת ריצה אחת: Node.js 24 על גבי ארכיטקטורת Arm64 בלבד. אם הקוד שלכם נכתב ב-Python או Go, אם פרויקט ה-Node שלכם תקוע על גרסה ישנה, או אם יש לכם תלויות בינאריות שמחייבות x86, הפתרון הזה לא רלוונטי עבורכם כרגע. הדוקומנטציה לא מספקת תאריך להרחבת התמיכה לסביבות ריצה נוספות.
זה משאיר הרבה מפתחים בחוץ.
מגבלה משמעותית נוספת נוגעת לזמינות הגאוגרפית. השירות הושק בחמישה אזורים בלבד: צפון וירג'יניה, אוהיו, אורגון, טוקיו ואירלנד. האזור המקומי בישראל (il-central-1) נשאר בחוץ. חברות ישראליות שמחויבות ברגולציה להחזיק נתוני לקוחות בגבולות המדינה לא יוכלו לאמץ את השירות. מי שאינו כפוף למגבלות כאלה יידרש לנתב את התעבורה לאירופה, ולהסתמך על נקודות הקצה של Amazon CloudFront כדי לצמצם את זמני השיהוי באמצעות חתימת אבטחה בפורמט Origin Access Control.
מה כדאי לבדוק לפני שמקנפגים
לפי פוסט ההכרזה של אמזון, פריסה ראשונית מתבצעת בפקודה בודדת דרך כלי הפקודה AWS CLI, ללא צורך בהקמת משאבים מוקדמת. מי שמחזיק שירות עצמאי קטן שכבר רץ על Node.js עדכני יכול להרים סביבת בדיקה בתוך דקות בודדות, לבדוק את התנהגות המערכת תחת עומס במקביל, ולראות אם זמני ה-Cold Starts אכן פוחתים כמובטח.
לא הייתי ממהר להגר מערכות ייצור מורכבות. המגבלה לסביבת הרצה בודדת והיעדר תמיכה באזור המקומי הופכים את הצעד הזה למסוכן עבור רוב הצוותים, לפחות עד שאמזון תרחיב את הפריסה הגאוגרפית ותתמוך בגרסאות נוספות. בינתיים, רוב השרתים יישארו על המכולות הרגילות שלהם.
מקורות
- Announcing AWS Lambda Web Functionshttps://aws.amazon.com/blogs/aws/announcing-aws-lambda-web-functions-for-fast-consistent-web-app-performance-anywhere/
- AWS Lambda Pricinghttps://aws.amazon.com/lambda/pricing
- Restrict access to an AWS origin - Amazon CloudFronthttps://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-origin.html
- AWS Lambda Web Functions - AWS Lambdahttps://docs.aws.amazon.com/lambda/latest/dg/web-functions.html
- AWS Lambda Pricinghttps://aws.amazon.com/lambda/pricing/
- AWS Command Line Interface (AWS CLI)https://aws.amazon.com/cli/
- Amazon CloudFronthttps://aws.amazon.com/cloudfront/
הידיעה נכתבה מהמקורות שלמעלה בתאריך הפרסום, וכל טענה בה נבדקה מולם. מצאתם טעות? כתבו.