פיתוח אפליקציית Go ב-App Engine

מזהה אזור

‫REGION_ID הוא קוד מקוצר ש-Google מקצה על סמך האזור שבוחרים כשיוצרים את האפליקציה. הקוד לא תואם למדינה או למחוז, למרות שחלק ממזהי האזורים עשויים להיראות דומים לקודים נפוצים של מדינות ומחוזות. באפליקציות שנוצרו אחרי פברואר 2020, המחרוזת REGION_ID.r כלולה בכתובות URL של App Engine. באפליקציות קיימות שנוצרו לפני התאריך הזה, מזהה האזור הוא אופציונלי בכתובת ה-URL.

מידע נוסף על מזהי אזורים

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

אחרי שיוצרים את האפליקציה, אפשר לקרוא מדריכים נוספים כדי ללמוד איך לשלב אותה עם שירותים אחרים של Google Cloud ולהוסיף לה עוד תכונות.

עלויות

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

הגדרת סביבת הפיתוח

אתם יכולים להשתמש במחשב המקומי שלכם ובכלים שאתם כבר מכירים, או ב-Cloud Shell. ב-Cloud Shell, ה-CLI של Google Cloud כבר מותקן, הסביבה כבר מוגדרת ויש עוד הרבה תכונות.

מכונה מקומית

מתקינים את Go ומגדירים את ה-CLI של gcloud כמו שמתואר במאמר הגדרת סביבת הפיתוח.

Cloud Shell

מפעילים את Cloud Shell, שכל הכלים שצריך מותקנים בו מראש:

פתיחת Cloud Shell

יצירת Google Cloud פרויקט

כדי להשתמש ב- Google Cloudנדרש פרויקט, והוא הבסיס לשימוש בכל שירותיGoogle Cloud .

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Build API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. יוצרים את אפליקציית App Engine ואת המשאבים שמשויכים אליה. חובה לבחור מיקום, ואי אפשר לשנות אותו בהמשך.
    gcloud app create
  15. בגלל שינויים בהתנהגות ברירת המחדל של Cloud Build בנוגע לשימוש בחשבונות שירות בפרויקטים חדשים, ושינויים במדיניות הארגון שמוגדרת כמאובטחת כברירת מחדל, יכול להיות שתצטרכו להקצות תפקידים נוספים לחשבון השירות שמשמש לפריסה. מידע נוסף על מתן תפקידים ספציפיים זמין במדריך לפתרון בעיות.

כתיבה של שירות אינטרנט בסיסי ל-App Engine

איך כותבים שירות אינטרנט ומצהירים על הגדרות זמן ריצה

מבנה הקבצים

מבנה הקבצים של השירות יהיה כזה:

  • ‫go-app/: ספרייה לשירות Go.
    • ‫app.yaml: הגדרות התצורה של השירות.
    • ‫main.go: קוד האפליקציה.

יצירת קובץ app.yaml

לכל פרויקט App Engine יש קובץ הגדרות app.yaml שמציין את הגדרות סביבת זמן הריצה של השירות. השירות לא יופעל בלי הקובץ הזה.

  1. יוצרים תיקייה חדשה בשם go-app לשירות Go:

    mkdir go-app

  2. בתיקייה go-app/, יוצרים קובץ בשם app.yaml ומוסיפים את התוכן הבא:

    runtime: go127  # or another supported version
    

    זו ההגדרה הכי פשוטה לאפליקציית App Engine. היא מציינת ל-App Engine שאתם משתמשים ב-Go. בקובץ app.yaml אפשר לציין גרסאות אחרות של Go, הגדרות רשת, הגדרות קנה מידה ועוד. מידע נוסף זמין במאמר בנושא app.yaml.

יצירת קובץ main.go

בדוגמה הזו נעשה שימוש בחבילה net/http כדי ליצור שרת HTTP שמדפיס את המחרוזת Hello, World!.

כדי להגדיר את הקובץ main.go:

  1. בתיקייה go-app/, יוצרים קובץ main.go.

  2. מוסיפים את ההצהרה package main כדי שהקוד יטופל כתוכנית הפעלה:

    package main
    

    כדי לפרוס שירות בהצלחה, צריך להגדיר הצהרה של package main בתחילת לפחות אחד מקובצי המקור של Go.

  3. מייבאים את החבילות הבאות:

    import (
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    )
    
  4. מגדירים את ה-handler של HTTP:

    
    // indexHandler responds to requests with our greeting.
    func indexHandler(w http.ResponseWriter, r *http.Request) {
    	if r.URL.Path != "/" {
    		http.NotFound(w, r)
    		return
    	}
    	fmt.Fprint(w, "Hello, World!")
    }
    

    אובייקט http.ResponseWriter מרכיב את תגובת שרת ה-HTTP. כשכותבים לאובייקט הזה, שולחים נתונים לדפדפן. האובייקט http.Request הוא מבנה נתונים שמייצג את בקשת ה-HTTP הנכנסת.

  5. רושמים את ה-HTTP handler:

    
    func main() {
    	http.HandleFunc("/", indexHandler)
    
    	port := os.Getenv("PORT")
    	if port == "" {
    		port = "8080"
    		log.Printf("Defaulting to port %s", port)
    	}
    
    	log.Printf("Listening on port %s", port)
    	if err := http.ListenAndServe(":"+port, nil); err != nil {
    		log.Fatal(err)
    	}
    }
    

    הפונקציה main היא נקודת הכניסה של התוכנית הניתנת להפעלה, ולכן היא מפעילה את האפליקציה. הוא מתחיל בקריאה לפונקציה http.HandleFunc, שמורה לחבילה http לטפל בכל הבקשות לשורש האינטרנט ("/") באמצעות הפונקציה indexHandler.

    אם משתנה הסביבה PORT לא מוגדר, נעשה שימוש ביציאה 8080 כברירת מחדל. כשהאפליקציה פועלת ב-App Engine, משתנה הסביבה PORT מוגדר בשבילכם, אבל כשבודקים את האפליקציה באופן מקומי, אפשר להגדיר את PORT לכל ערך שרוצים.

פריסת שירות האינטרנט ב-App Engine

  1. בספרייה go-app שבה נמצא הקובץ app.yaml, פורסים את שירות האינטרנט ב-App Engine באמצעות הפקודה הבאה:

    gcloud app deploy

  2. כדי להפעיל את הדפדפן ולראות את שירות האינטרנט בכתובת https://PROJECT_ID.REGION_ID.r.appspot.com, מריצים את הפקודה הבאה:

    gcloud app browse

כל הכבוד! הרגע יצרתם ופרסתם שירות ב-App Engine.

שירותים וגרסאות

השירות הראשון שתפרסו לאפליקציה יהיה שירות ברירת המחדל. אפשר לציין את שם השירות בקובץ app.yaml, אבל אם לא מציינים שם, המערכת מתייחסת אליו כאל default. אפשר לפרוס כמה שירותים, ולא רק את שירות ברירת המחדל.

אפשר לעדכן את השירות בכל שלב על ידי הפעלת הפקודה gcloud app deploy בכל פעם שמבצעים פריסה, נוצרת גרסה חדשה והתנועה מנותבת אוטומטית לגרסה האחרונה.

כדי לוודא שהשירות נוצר והגרסה נפרסה:

  1. כדי לראות את השירותים של App Engine במסוף Google Cloud :

    הצגת השירותים

    אמור להופיע שירות אחד בשם default. שירות ברירת המחדל נגיש לכולם בכתובת ה-URL הבאה:

    https://PROJECT_ID.REGION_ID.r.appspot.com

  2. כדי לראות את הגרסאות:

    צפייה בגרסאות

    אמורה להופיע גרסה אחת עם חותמת זמן, שמתאימה לפריסה שלכם.

במאמר איך בקשות מנותבות מוסבר איך לשלוח בקשות לשירותים ולגרסאות ספציפיים.

השלבים הבאים

כל הכבוד! הרגע הגדרתם ופרסתם את אפליקציית האינטרנט ב-App Engine.

כדי ללמוד איך להוסיף תכונות אחרות לאפליקציה, אפשר לעיין בדפים הבאים: