יצירה ופריסה של פונקציית HTTP ב-Cloud Run באמצעות Go (דור ראשון)

במדריך הזה נסביר איך לכתוב פונקציה של Cloud Run באמצעות זמן הריצה של Go. יש שני סוגים של פונקציות Cloud Run:

  • פונקציית HTTP, שמפעילים אותה מבקשות HTTP רגילות.
  • פונקציה מבוססת-אירועים, שמשמשת לטיפול באירועים מהתשתית של Cloud, כמו הודעות בנושא Pub/Sub או שינויים בקטגוריה של Cloud Storage.

בדוגמה מוצג איך ליצור פונקציית HTTP פשוטה.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים 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 .

  6. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  7. מפעילים את Cloud Functions API ו-Cloud Build API, אם הם עדיין לא מופעלים:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable cloudfunctions cloudbuild.googleapis.com
  8. התקינו את ה-CLI של Google Cloud.

  9. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  10. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  11. יוצרים או בוחרים 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 .

  12. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  13. מפעילים את Cloud Functions API ו-Cloud Build API, אם הם עדיין לא מופעלים:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable cloudfunctions cloudbuild.googleapis.com
  14. הכנת סביבת הפיתוח.

    עוברים למדריך ההגדרה של Go

יצירת פונקציה

  1. יוצרים ספרייה במערכת המקומית לקוד הפונקציה:

    ‫Linux או Mac OS X

    mkdir ~/helloworld
    cd ~/helloworld
    

    Windows

    mkdir %HOMEPATH%\helloworld
    cd %HOMEPATH%\helloworld
    
  2. יוצרים קובץ בשם hello_http.go בספרייה helloworld עם התוכן הבא:

    
    // Package helloworld provides a set of Cloud Functions samples.
    package helloworld
    
    import (
    	"encoding/json"
    	"fmt"
    	"html"
    	"net/http"
    
    	"github.com/GoogleCloudPlatform/functions-framework-go/functions"
    )
    
    func init() {
    	functions.HTTP("HelloHTTP", HelloHTTP)
    }
    
    // HelloHTTP is an HTTP Cloud Function with a request parameter.
    func HelloHTTP(w http.ResponseWriter, r *http.Request) {
    	var d struct {
    		Name string `json:"name"`
    	}
    	if err := json.NewDecoder(r.Body).Decode(&d); err != nil {
    		fmt.Fprint(w, "Hello, World!")
    		return
    	}
    	if d.Name == "" {
    		fmt.Fprint(w, "Hello, World!")
    		return
    	}
    	fmt.Fprintf(w, "Hello, %s!", html.EscapeString(d.Name))
    }
    

    הפונקציה לדוגמה הזו מקבלת שם שסופק בבקשת ה-HTTP ומחזירה ברכה, או את המחרוזת Hello, World!‎ אם לא סופק שם.

ציון יחסי תלות

הפונקציה לדוגמה הזו משתמשת רק בחבילות של ספריית Go standard, כך שלא צריך להצהיר על תלות כלשהי מעבר לייבוא החבילות.

אם הפונקציות דורשות יחסי תלות שלא נכללים בספרייה הרגילה, צריך לספק את יחסי התלות באמצעות קובץ go.mod או ספרייה vendor. פרטים נוספים זמינים במאמר Specifying dependencies in Go.

פריסת הפונקציה

כדי לפרוס את הפונקציה עם טריגר HTTP, מריצים את הפקודה הבאה בספרייה helloworld, ומציינים את הערך go113 או go111 לדגל --runtime, בהתאם לגרסה שבה אתם משתמשים:

‫
gcloud functions deploy HelloHTTP --no-gen2 --runtime go121 --trigger-http --allow-unauthenticated

הדגל --allow-unauthenticated מאפשר להגיע לפונקציה ללא אימות. כדי לדרוש אימות, לא מציינים את הדגל.

בדיקת הפונקציה

  1. כשפריסת הפונקציה מסתיימת, רושמים את המאפיין httpsTrigger.url או מוצאים אותו באמצעות הפקודה הבאה:

    gcloud functions describe HelloHTTP
    

    הוא אמור להיראות כך:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/HelloHTTP
  2. נכנסים לכתובת ה-URL הזו בדפדפן, או משתמשים ב-cURL על ידי הרצת הפקודה:

    curl https://GCP_REGION-PROJECT_ID.cloudfunctions.net/HelloHTTP

    אמורה להופיע ההודעה Hello, World!‎. מנסים להעביר שם בבקשת ה-HTTP על ידי הרצת הפקודה הבאה:

    curl -X POST https://GCP_REGION-PROJECT_ID.cloudfunctions.net/HelloHTTP -H "Content-Type:application/json"  -d '{"name":"NAME"}'

    ההודעה "שלום, NAME!" תוצג.

צפייה ביומנים

אפשר לראות את היומנים של פונקציות Cloud Run באמצעות Google Cloud CLI ובממשק המשתמש של Cloud Logging.

שימוש בכלי שורת הפקודה

כדי להציג את היומנים של הפונקציה באמצעות ה-CLI של gcloud, משתמשים בפקודה logs read ואחריה בשם הפונקציה:

gcloud functions logs read HelloHTTP

הפלט אמור להיראות כך:

LEVEL  NAME        EXECUTION_ID  TIME_UTC                 LOG
D      HelloHTTP  buv9ej2k1a7r  2019-09-20 13:23:18.910  Function execution started
D      HelloHTTP  buv9ej2k1a7r  2019-09-20 13:23:18.913  Function execution took 4 ms, finished with status code: 200

שימוש בלוח הבקרה של רישום ביומן

אפשר גם לצפות ביומנים של פונקציות Cloud Run ממסוףGoogle Cloud .