הפעלת פונקציות באמצעות Functions Framework
פונקציות Cloud Run משתמשות בספריות Functions Framework בקוד פתוח כדי לעטוף את הפונקציות שפרסתם באפליקציית HTTP מתמשכת.
ה-Functions Framework יכול לפעול גם בכל פלטפורמה אחרת שתומכת בשפה עצמה, כולל במחשב המקומי, בשרתים מקומיים, ב-Compute Engine וב-Cloud Run.
התקנת יחסי תלות
בספרייה של הפונקציה, מתקינים את ספריית Functions Framework בשפה הרצויה:
מידע נוסף זמין בספריית Java Functions Framework.
Node.js
npm install --save-dev @google-cloud/functions-framework
Python
pip install functions-framework
Go
go install github.com/GoogleCloudPlatform/functions-framework-go/funcframework
Java
Maven
אם משתמשים ב-Maven, צריך להוסיף את הקוד הבא לקובץ pom.xml:
Gradle
אם משתמשים ב-Gradle, מוסיפים את הקוד הבא לקובץ build.gradle:
C#
הפקודות שבהמשך משתמשות בתבניות של .NET כדי ליצור בסיס קוד חדש של פונקציית Cloud Run ב- .NET עם ספריית .NET Functions Framework כתלות:
# HTTP functions dotnet new gcf-http # CloudEvent functions dotnet new gcf-event
Ruby
ב-Ruby, חובה להוסיף את Functions Framework לתלות של הפונקציה כדי לפרוס אותה לפונקציות Cloud Run:
bundle add functions_framework
PHP
composer require google/cloud-functions-framework
הגדרת Functions Framework
לפני שמריצים פונקציה באמצעות Functions Framework, צריך קודם לציין את הסוג והשם של הפונקציה שרוצים להריץ. אפשר לציין את המאפיינים האלה כדגל בממשק שורת הפקודה (CLI) או כמשתני סביבה.
סוגי הפונקציות הנתמכות
Functions Framework תומך בכל שלושת סוגי הפונקציות שנתמכות על ידי פונקציות Cloud Run דור ראשון. כל זמני הריצה של השפות תומכים ב-http ובאחת מהאפשרויות event או cloudevent.
| סוג הפונקציה | סוג החתימה | תיאור | זמני ריצה נתמכים |
|---|---|---|---|
| פונקציות שמופעלות על ידי HTTP |
http
|
פונקציות שמקבלות בקשות HTTP ומגיבות להן. | כל סביבות זמן הריצה |
| פונקציות ברקע |
event
|
פורמט אירועים ספציפי לפונקציות Cloud Run | Node.js, Python, Go, Java |
| פונקציות CloudEvent |
cloudevent
|
פורמט אירועים לפי התקן בתחום | .NET, Ruby, PHP |
ציון הפונקציה שרוצים להריץ
לפני שמריצים פונקציה באמצעות Functions Framework, צריך לציין איזו פונקציה בקוד תופעל. ברוב השפות, אפשר לעשות את זה על ידי ציון שם השיטה של פונקציית היעד, כמו שמוצג בטבלאות שלמטה. (חריגים לכלל הזה, כמו Java ו-.NET, מוצגים גם בהמשך).
הוראות לפי שפה
בטבלה שלמטה מפורטות אפשרויות ההגדרה שנתמכות בכל שפה.
Node.js
| ארגומנט של CLI | משתנה סביבה | תיאור |
|---|---|---|
--port
|
PORT
|
היציאה להאזנה לבקשות. (ברירת מחדל: 8080)
|
--target
|
FUNCTION_TARGET
|
השם של הפונקציה export שתופעל. (ברירת מחדל:
function)
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
סוג החתימה שמשמש את הפונקציה. יכול להיות אחד מהערכים הבאים: http (ברירת המחדל), event או cloudevent.
|
Python
| ארגומנט של CLI | משתנה סביבה | תיאור |
|---|---|---|
--port
|
PORT
|
היציאה להאזנה לבקשות. (ברירת מחדל: 8080)
|
--target
|
FUNCTION_TARGET
|
השם של הפונקציה export שתופעל. (ברירת מחדל:
function)
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
סוג החתימה שמשמש את הפונקציה. יכול להיות אחד מהערכים הבאים: http (ברירת המחדל), event או cloudevent.
|
Go
| משתנה סביבה | תיאור |
|---|---|
PORT
|
היציאה להאזנה לבקשות. (ברירת מחדל: 8080)
|
Java
| שם הארגומנט | משתנה סביבה | תיאור |
|---|---|---|
run.port
|
PORT
|
היציאה להאזנה לבקשות. (ברירת מחדל: 8080)
|
run.functionTarget
|
FUNCTION_TARGET
|
השם של הפונקציה export שתופעל. (ברירת מחדל:
function)
|
C#
| ארגומנט של CLI | משתנה סביבה | תיאור |
|---|---|---|
--port
|
PORT
|
היציאה להאזנה לבקשות. (ברירת מחדל: 8080)
|
--target (או הארגומנט היחיד)
|
FUNCTION_TARGET
|
שם המחלקה של הפונקציה שתופעל. (ברירת מחדל:
function)
|
Ruby
| ארגומנט של CLI | משתנה סביבה | תיאור |
|---|---|---|
--port
|
PORT
|
היציאה להאזנה לבקשות. (ברירת מחדל: 8080)
|
--target
|
FUNCTION_TARGET
|
השם של הפונקציה export שתופעל. (ברירת מחדל:
function)
|
PHP
| משתנה סביבה | תיאור |
|---|---|
FUNCTION_TARGET
|
השם של הפונקציה שתופעל. (ברירת מחדל:
function)
|
FUNCTION_SIGNATURE_TYPE
|
סוג החתימה שמשמש את הפונקציה. יכול להיות אחד מהערכים הבאים: http (ברירת המחדל), event או cloudevent.
|
כדי להגדיר ולהפעיל את Functions Framework, פועלים לפי ההוראות הבאות:
Node.js
ה-Node.js Functions Framework מאפשר לכם לציין את שם הפונקציה ואת סוג החתימה שלה כארגומנטים בשורת הפקודה או כמשתני סביבה.
אפשר גם לציין את הערכים האלה בקובץ buildfile package.json על ידי הוספת סקריפט start עם ארגומנטים נדרשים של CLI, כמו בדוגמה שלמטה.
"scripts": { "start": "npx functions-framework --target=YOUR_FUNCTION_NAME [--signature-type=YOUR_SIGNATURE_TYPE]" }
אפשר לעשות את אותו הדבר באמצעות משתני סביבה:
"scripts": { "start": "FUNCTION_TARGET=YOUR_FUNCTION_NAME FUNCTION_SIGNATURE_TYPE=YOUR_SIGNATURE_TYPE npx functions-framework" }
מחליפים את YOUR_FUNCTION_NAME בשם השיטה של הפונקציה, ואת YOUR_SIGNATURE_TYPE (אם רלוונטי) בסוג החתימה של הפונקציה, כמו שמופיע בטבלה שלמעלה.
Python
ה-Python Functions Framework מאפשר לציין את שם הפונקציה ואת סוג החתימה שלה כארגומנטים של שורת הפקודה או כמשתני סביבה. כשמריצים את המסגרת, צריך לציין את הארגומנטים בשורת הפקודה.
Go
ב-Go Functions Framework נעשה שימוש ב-funcframework.RegisterHTTPFunctionContext כדי לציין את יעד הפונקציה ואת סוג החתימה.
Java
Java Functions Framework מקבל נתוני הגדרה משלושה מקורות שונים, לפי סדר העדיפות הבא (מהספציפי ביותר לפחות ספציפי):
- ארגומנטים בשורת הפקודה
- קבצים של Build
- משתני סביבה
ארגומנטים בשורת הפקודה
Maven
כדי לציין את הפונקציה שרוצים להריץ, מוסיפים את הדגל הבא של ממשק שורת הפקודה (CLI) לפקודות mvn:
-Drun.functionTarget=YOUR_FUNCTION_NAMEאפשר גם לציין את יעד היציאה על ידי הוספת הדגל הבא של ה-CLI באופן דומה:
-Drun.port=12345
Gradle
הדגלים ב-CLI של Gradle כמעט זהים לאלה של Maven. השינוי היחיד ש-Gradle מבצע הוא החלפת התו -D שמופיע בתחילת כל דגל בתו -P, כמו שמוצג בדוגמה שלמטה:
# Maven version -Drun.functionTarget=... # Gradle version -Prun.functionTarget=...
קבצים של Build
אפשר גם לציין את הפונקציה שרוצים להפעיל בקובץ הבנייה של הפרויקט. ל-Maven ול-Gradle יש דגלים דומים ב-CLI, אבל הסעיפים בקובץ ה-build שונים מאוד.
Maven
שם קובץ ה-build של Maven הוא pom.xml. מוסיפים את הסעיף הבא לקובץ כדי לציין פונקציית יעד:
מחליפים את <functionTarget> בשם המחלקה של הפונקציה. (לדוגמה, לפונקציה בחבילה functions עם שם המחלקה HelloCloudFunctions יהיה שם המחלקה functions.HelloCloudFunctions. הנתיב הזה הוא יחסי לקובץ ה-build של האב – pom.xml או build.gradle).
Gradle
השם של קובצי ה-build של Gradle הוא build.gradle. מוסיפים את הסעיף הבא לקובץ הזה כדי לציין פונקציית יעד:
C#
אם יוצרים את הפרויקט באמצעות dotnet new ואחת מהתבניות שצוינו למעלה, ה-Functions Framework של .NET יזהה את הפונקציה באופן אוטומטי.
אם הפרויקט מכיל כמה פונקציות, בקטע הפעלת המסגרת מוסבר איך להפעיל פונקציה ספציפית.
Ruby
בעזרת Ruby Functions Framework אפשר לציין את שם הפונקציה ואת סוג החתימה שלה כארגומנטים בשורת הפקודה או כמשתני סביבה. כשמריצים את המסגרת, צריך לציין את הארגומנטים בשורת הפקודה.
PHP
ב-PHP Functions Framework אפשר לציין משתני סביבה כארגומנטים של שורת הפקודה.
אפשר גם לציין את הערכים האלה בקובץ buildfile composer.json על ידי הוספת סקריפט start כמו בדוגמה שלמטה.
"scripts": { "start": [ "Composer\\Config::disableProcessTimeout", "FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:${PORT:-8080} vendor/bin/router.php" ] }
מחליפים את YOUR_FUNCTION_NAME בשם הפונקציה ואת YOUR_SIGNATURE_TYPE (אם רלוונטי) בסוג החתימה של הפונקציה, כפי שמופיע בטבלה שלמעלה.
הפעלת Functions Framework
כדי להריץ את הפונקציה באמצעות Functions Framework, משתמשים בפקודה הבאה.
כברירת מחדל, הפונקציה תהיה נגישה בכתובת localhost:8080, אלא אם תציינו במפורש ערך של PORT.
Node.js
npm startPython
שימוש בארגומנטים בשורת הפקודה:
functions-framework --target=YOUR_FUNCTION_NAME
באמצעות משתני סביבה:
FUNCTION_TARGET=YOUR_FUNCTION_NAME functions-framework
מחליפים את YOUR_FUNCTION_NAME בשם השיטה של הפונקציה.
Go
cd cmd go build ./cmd
באמצעות משתני סביבה:
cd cmd go build PORT=8080 ./cmd
Java
Maven
כדי להריץ פונקציה שצוינה ב-pom.xml, משתמשים בפקודה הבאה:
mvn function:run
כדי להריץ פונקציה שצוינה בארגומנט של שורת הפקודה, משתמשים בפקודה הבאה:
mvn function:run -Drun.functionTarget=YOUR_FUNCTION_NAME
כדי להריץ פונקציה שצוינה כמשתנה סביבה, משתמשים בפקודה הבאה:
FUNCTION_TARGET=YOUR_FUNCTION_NAME mvn function:run
מחליפים את YOUR_FUNCTION_NAME בשם המחלקה של הפונקציה.
Gradle
כדי להריץ פונקציה שצוינה ב-build.gradle, משתמשים בפקודה הבאה:
./gradlew runFunctionכדי להריץ פונקציה שצוינה בארגומנט של שורת הפקודה, משתמשים בפקודה הבאה:
./gradlew runFunction -Prun.functionTarget=YOUR_FUNCTION_NAME
כדי להריץ פונקציה שצוינה כמשתנה סביבה, משתמשים בפקודה הבאה:
FUNCTION_TARGET=YOUR_FUNCTION_NAME ./gradlew runFunction
מחליפים את YOUR_FUNCTION_NAME בשם המחלקה של הפונקציה.
C#
כדי להריץ את הפונקציה כשקיימת בדיוק פונקציה אחת בפרויקט הנוכחי של .NET, משתמשים בפקודה הבאה. (זהו מבנה ברירת המחדל של פרויקטים שנוצרו מתבנית).
dotnet runאם פרויקט .NET מכיל כמה פונקציות, משתמשים בפקודה הבאה כדי להריץ פונקציה ספציפית. מחליפים את YOUR_FUNCTION_CLASSNAME בשם המחלקה של הפונקציה, כולל מרחב השמות.
dotnet run YOUR_FUNCTION_CLASSNAME
אם רוצים להריץ כמה פונקציות בו-זמנית, צריך להריץ כמה מופעים של Functions Framework. כדי למנוע התנגשויות בין מופעים של מסגרות פעילות, כל מופע צריך להשתמש בערך PORT שונה. הפקודה הבאה מראה איך להפעיל פונקציה עם ערך PORT של 8080.
שימוש בארגומנטים בשורת הפקודה:
dotnet run --target YOUR_FUNCTION_CLASSNAME --port 8080
באמצעות משתני סביבה:
FUNCTION_TARGET=YOUR_FUNCTION_CLASSNAME PORT=8080 dotnet run
Ruby
שימוש בארגומנטים בשורת הפקודה:
bundle exec functions-framework-ruby --target YOUR_FUNCTION_NAME
באמצעות משתני סביבה:
FUNCTION_TARGET=YOUR_FUNCTION_NAME bundle exec functions-framework-ruby
מחליפים את YOUR_FUNCTION_NAME בשם השיטה של הפונקציה.
PHP
export FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:8080 vendor/bin/router.php
מחליפים את YOUR_FUNCTION_NAME בשם הפונקציה.
הפעלת הפונקציה
בקישור הבא מוסבר איך ליצור אינטראקציה עם הפונקציה שפועלת באופן מקומי: קריאה לפונקציות מקומיות.
הסרת המשאבים
כשמסיימים להריץ את הפונקציה, מפסיקים את הפעלה של מופע המסגרת על ידי הקשה על Control+C.