יצירה ופריסה של פונקציית HTTP ב-Cloud Run באמצעות Java (דור ראשון)
במדריך הזה נסביר איך לכתוב פונקציית Cloud Run באמצעות זמן הריצה של Java. יש שני סוגים של פונקציות Cloud Run:
- פונקציית HTTP, שמפעילים אותה מבקשות HTTP רגילות.
- פונקציה מבוססת-אירועים, שמשמשת לטיפול באירועים מהתשתית של Cloud, כמו הודעות בנושא Pub/Sub או שינויים בקטגוריה של Cloud Storage.
במסמך הזה מוסבר איך ליצור פונקציית HTTP פשוטה ולבנות אותה באמצעות Maven או Gradle.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Cloud Functions API ואת Cloud Build API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable cloudfunctions
cloudbuild.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Cloud Functions API ואת Cloud Build API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable cloudfunctions
cloudbuild.googleapis.com - מכינים את סביבת הפיתוח.
יצירת פונקציה
בקטע הזה נסביר איך ליצור פונקציה.
Maven
יוצרים ספרייה במערכת המקומית לקוד הפונקציה:
Linux או Mac OS X:
mkdir ~/helloworld cd ~/helloworldWindows:
mkdir %HOMEPATH%\helloworld cd %HOMEPATH%\helloworldיוצרים את מבנה הפרויקט שיכיל את ספריית קובצי המקור ואת קובץ המקור.
mkdir -p src/main/java/functions touch src/main/java/functions/HelloWorld.javaמוסיפים את התוכן הבא לקובץ
HelloWorld.java:הפונקציה בדוגמה הזו מחזירה את הברכה 'Hello World!'.
Gradle
יוצרים ספרייה במערכת המקומית לקוד הפונקציה:
Linux או Mac OS X:
mkdir ~/helloworld-gradle cd ~/helloworld-gradleWindows:
mkdir %HOMEPATH%\helloworld-gradle cd %HOMEPATH%\helloworld-gradleיוצרים את מבנה הפרויקט שיכיל את ספריית קובצי המקור ואת קובץ המקור.
mkdir -p src/main/java/functions touch src/main/java/functions/HelloWorld.javaמוסיפים את התוכן הבא לקובץ
HelloWorld.java:הפונקציה בדוגמה הזו מחזירה את הברכה 'Hello World!'.
ציון יחסי תלות
השלב הבא הוא הגדרת יחסי תלות:
Maven
עוברים לספרייה helloworld שיצרתם למעלה ויוצרים קובץ pom.xml:
cd ~/helloworld
touch pom.xml
כדי לנהל יחסי תלות באמצעות Maven, מציינים את יחסי התלות בקטע <dependencies> בקובץ pom.xml של הפרויקט. לצורך התרגיל הזה, מעתיקים את התוכן הבא לקובץ pom.xml.
דוגמה מלאה שמבוססת על Maven זמינה במאמר helloworld.
Gradle
עוברים לספרייה helloworld-gradle שיצרתם למעלה, ויוצרים קובץ build.gradle:
cd ~/helloworld-gradle
touch build.gradle
כדי לנהל יחסי תלות באמצעות Gradle, מציינים את יחסי התלות בקובץ build.gradle של הפרויקט. לצורך התרגיל הזה, מעתיקים את התוכן הבא לקובץ build.gradle. שימו לב שהקובץ build.gradle הזה כולל משימה בהתאמה אישית שתעזור לכם להריץ פונקציות באופן מקומי.
דוגמה מלאה שמבוססת על Gradle זמינה במאמר helloworld-gradle.
פיתוח ובדיקה באופן מקומי
לפני שמפיצים את הפונקציה, אפשר ליצור ולבדוק אותה באופן מקומי:
Maven
מריצים את הפקודה הבאה כדי לוודא שהפונקציה נוצרת:
mvn compile
אפשרות נוספת היא להשתמש בפקודה mvn package כדי לקמפל את קוד ה-Java, להריץ בדיקות ולארוז את הקוד בקובץ JAR בספריית היעד. מידע נוסף על מחזור החיים של Maven build
כדי לבדוק את הפונקציה, מריצים את הפקודה הבאה:
mvn function:run
Gradle
מריצים את הפקודה הבאה כדי לוודא שהפונקציה נוצרת:
gradle build
כדי לבדוק את הפונקציה, מריצים את הפקודה הבאה:
gradle runFunction -Prun.functionTarget=functions.HelloWorld
אם הבדיקה מסתיימת בהצלחה, מוצגת כתובת ה-URL שאפשר להיכנס אליה בדפדפן האינטרנט כדי לראות את הפונקציה בפעולה:
http://localhost:8080/. אמורה להופיע ההודעה Hello World!.
לחלופין, אפשר לשלוח בקשות לפונקציה הזו באמצעות curl מחלון טרמינל אחר:
curl localhost:8080
# Output: Hello World!
פריסת הפונקציה
Maven
כדי לפרוס את הפונקציה עם טריגר HTTP, מריצים את הפקודה הבאה בספרייה helloworld:
gcloud functions deploy my-first-function --no-gen2 --entry-point functions.HelloWorld --runtime java17 --trigger-http --memory 512MB --allow-unauthenticated
my-first-function הוא השם הרשום שבאמצעותו הפונקציה תזוהה במסוף Google Cloud , ו---entry-point מציין את שם המחלקה המוגדר במלואו (FQN) של הפונקציה.Gradle
כדי לפרוס את הפונקציה עם טריגר HTTP, מריצים את הפקודה הבאה בספרייה helloworld-gradle:
gcloud functions deploy my-first-function --no-gen2 --entry-point functions.HelloWorld --runtime java17 --trigger-http --memory 512MB --allow-unauthenticated
my-first-function הוא השם הרשום שבאמצעותו הפונקציה תזוהה במסוף Google Cloud , ו---entry-point מציין את שם המחלקה המוגדר במלואו (FQN) של הפונקציה.בדיקת הפונקציה שנפרסה
אחרי שהפונקציה מסיימת את הפריסה, רושמים את המאפיין
httpsTrigger.urlאו מאתרים אותו באמצעות הפקודה הבאה: הוא אמור להיראות כך:gcloud functions describe my-first-function
https://GCP_REGION-PROJECT_ID.cloudfunctions.net/my-first-function
נכנסים לכתובת ה-URL הזו בדפדפן. אמורה להופיע ההודעה
Hello World!.
צפייה ביומנים
אפשר לראות את היומנים של פונקציות Cloud Run באמצעות Google Cloud CLI ובממשק המשתמש של Cloud Logging.
שימוש בכלי שורת הפקודה
כדי להציג את היומנים של הפונקציה באמצעות ה-CLI של gcloud, משתמשים בפקודה logs read ואחריה בשם הפונקציה:
gcloud functions logs read my-first-function
הפלט אמור להיראות כך:
LEVEL NAME EXECUTION_ID TIME_UTC LOG D my-first-function k2bqgroszo4u 2020-07-24 18:18:01.791 Function execution started D my-first-function k2bqgroszo4u 2020-07-24 18:18:01.958 Function execution took 168 ms, finished with status code: 200 ...
שימוש בלוח הבקרה של הרישום ביומן
אפשר גם לצפות ביומנים של פונקציות Cloud Run ממסוףGoogle Cloud .