הפונקציה שלכם ב-Cloud Run פועלת בסביבה שכוללת גרסת מערכת הפעלה עם חבילות של תוספים, תמיכה בשפה וספריית Node.js Functions Framework שתומכת בפונקציה ומפעילה אותה. הסביבה הזו מזוהה לפי גרסת השפה, והיא נקראת מזהה זמן הריצה.
הכנת הפונקציה
אפשר להכין פונקציה ישירות ממסוף Google Cloud או לכתוב אותה במחשב המקומי ולהעלות אותה. כדי להכין את המחשב המקומי לפיתוח ב-Node.js, אפשר לעיין במאמר הגדרת סביבת פיתוח ב-Node.js.
סביבות זמן ריצה וקובצי אימג' בסיסיים נתמכים של Node.js
| זמן ריצה | המזהה של סביבת זמן הריצה | מקבצים | תמונת בסיס בזמן ריצה | הוצאה משימוש | הוצאה משימוש |
|---|---|---|---|---|---|
| Node.js 24 | nodejs24 |
|
|
2028-04-30 | 2028-10-31 |
| Node.js 22 | nodejs22 |
|
|
2027-04-30 | 2027-10-31 |
| Node.js 20 | nodejs20 |
|
|
2026-04-30 | 2026-10-30 |
| Node.js 18 | nodejs18 |
|
|
2025-04-30 | 2025-10-30 |
| Node.js 16 | nodejs16 | google-18-full | google-18-full/nodejs16 | 2024-01-30 | 2025-01-30 |
| Node.js 14 | nodejs14 | google-18-full | google-18-full/nodejs14 | 2024-01-30 | 2025-01-30 |
| Node.js 12 | nodejs12 | google-18-full | google-18-full/nodejs12 | 2024-01-30 | 2025-01-30 |
| Node.js 10 | nodejs10 | google-18-full | google-18-full/nodejs10 | 2024-01-30 | 2025-01-30 |
| Node.js 8 | nodejs8 | הוצא משימוש | הוצא משימוש | 2020-06-05 | פברואר 2021 |
| Node.js 6 | nodejs6 | הוצא משימוש | הוצא משימוש | 2019-04-17 | אוגוסט 2020 |
בחירת זמן הריצה
במהלך הפריסה, אפשר לבחור באחת מסביבות זמן הריצה הנתמכות של Node.js עבור הפונקציה.
אפשר לבחור גרסת זמן ריצה באמצעות Google Cloud המסוף או ה-CLI של gcloud. לוחצים על הכרטיסייה עם ההוראות לשימוש בכלי הרצוי:
gcloud
מציינים את תמונת הבסיס של Node.js לפונקציה באמצעות הדגל --base-image במהלך פריסת הפונקציה. לדוגמה:
gcloud run deploy FUNCTION \
--source . \
--function FUNCTION_ENTRYPOINT \
--base-image nodejs24
מחליפים את:
FUNCTION בשם הפונקציה שאתם פורסים. אפשר להשמיט את הפרמטר הזה לגמרי, אבל אם תשמיטו אותו, תתבקשו לציין את השם.
FUNCTION_ENTRYPOINT עם נקודת הכניסה לפונקציה בקוד המקור. זה הקוד ש-Cloud Run מריץ כשהפונקציה פועלת. הערך של הדגל הזה צריך להיות שם של פונקציה או שם מלא של מחלקה שקיימים בקוד המקור.
הוראות מפורטות לפריסת פונקציה באמצעות ה-CLI של gcloud מופיעות במאמר פריסת פונקציות ב-Cloud Run.
המסוף
אפשר לבחור גרסת זמן ריצה כשיוצרים או מעדכנים פונקציית Cloud Run במסוף Google Cloud . הוראות מפורטות לפריסת פונקציה זמינות במאמר פריסת פונקציות ב-Cloud Run.
כדי לבחור סביבת ריצה במסוף Google Cloud כשיוצרים פונקציה, פועלים לפי השלבים הבאים:
במסוף Google Cloud , נכנסים לדף Cloud Run:
לוחצים על כתיבת פונקציה.
ברשימה Runtime בוחרים גרסה של זמן ריצה של Node.js.
לוחצים על Create ומחכים ש-Cloud Run ייצור את השירות באמצעות גרסת פלייסהולדר.
המסוף יפנה אתכם לכרטיסייה מקור, שבה תוכלו לראות את קוד המקור של הפונקציה. לוחצים על שמירה ופריסה מחדש.
הוראות מפורטות לעדכון גרסת זמן הריצה אחרי פריסת הפונקציה מופיעות במאמר פריסה מחדש של קוד מקור חדש.
מבנה קוד המקור
כדי שפונקציות Cloud Run יוכלו למצוא את ההגדרה של הפונקציה, קוד המקור צריך להיות במבנה מסוים. מידע נוסף זמין במאמר בנושא כתיבה של פונקציות Cloud Run.
ציון יחסי תלות
אפשר לציין יחסי תלות של הפונקציות על ידי רישום שלהם בקובץ package.json. מידע נוסף זמין במאמר Specify dependencies in Node.js.
סקריפט build של NPM
כברירת מחדל, סביבת זמן הריצה של Node.js מפעילה את הפקודה npm run build אם מזוהה סקריפט build ב-package.json. אם אתם צריכים שליטה נוספת בשלבי הבנייה לפני הפעלת האפליקציה, אתם יכולים לספק שלב בנייה בהתאמה אישית על ידי הוספת סקריפט gcp-build לקובץ package.json.
כדי למנוע את הרצת הסקריפט npm run build ב-build, אפשר:
הוספת סקריפט
gcp-buildעם ערך ריק לקובץpackage.json:"gcp-build":"".הגדרת משתנה הסביבה של ה-build
GOOGLE_NODE_RUN_SCRIPTSלמחרוזת ריקה כדי למנוע את ההפעלה של כל הסקריפטים.
השלמה של פונקציה אסינכרונית
כשעובדים עם משימות אסינכרוניות שכוללות קריאות חוזרות או אובייקטים מסוג Promise, צריך לציין במפורש לסביבת זמן הריצה שהפונקציה סיימה להריץ את המשימות האלה. אפשר לעשות את זה בכמה דרכים שונות, כמו בדוגמאות הבאות. הדבר החשוב הוא שהקוד ימתין עד שהמשימה האסינכרונית או Promise יושלמו לפני שיחזיר ערך. אחרת, יכול להיות שהרכיב האסינכרוני של הפונקציה יופסק לפני שהוא יושלם.
פונקציות מבוססות-אירועים
החזרה מרומזת
exports.implicitlyReturning = async (event, context) => {
return await asyncFunctionThatReturnsAPromise();
};
החזרה מפורשת
exports.explicitlyReturning = function (event, context) {
return asyncFunctionThatReturnsAPromise();
};
פונקציות HTTP
שימוש בתווכה לטיפול בבקשות HTTP
פונקציות HTTP ב-Node.js מספקות אובייקטים של request ו-response שתואמים ל-ExpressJS, כדי לפשט את השימוש בבקשות HTTP. פונקציות Cloud Run קוראות באופן אוטומטי את גוף הבקשה, כך שתמיד תקבלו את גוף הבקשה בלי קשר לסוג המדיה. כלומר, צריך להניח שקריאת בקשות ה-HTTP הסתיימה עד שהקוד מופעל. צריך להשתמש בהטמעה של אפליקציות ExpressJS עם ההערה הבאה – במיוחד, יכול להיות שתוכנות ביניים שמצפות שגוף הבקשה לא ייקראו לא יתנהגו כמו שמצפים.
שימוש במודולים של ES
מודולי ECMAScript (מודולי ES או ESM) הם תכונה ללא סימון בדגל בתקן TC39 ב-Node גרסה 14 ואילך לטעינת מודולי JavaScript. בניגוד ל-CommonJS, ESM מספק API אסינכרוני לטעינת מודולים. הוא גם מספק שיפור פופולרי בתחביר עם הצהרות import ו-export שאפשר להשתמש בהן בפונקציה של Cloud Run (במקום בהצהרות require).
כדי להשתמש ב-ESM בפונקציית Cloud Run, צריך להצהיר על "type": "module" בתוך package.json.
{
...
"type": "module",
...
}
אחר כך תוכלו להשתמש בהצהרות import ו-export.
מידע נוסף על שימוש במודולים של ES