פריסה

בדף הזה מוסבר איך לפרוס את הכלי ליצירת הגדרות של מדדים (MCG).

גישה לקוד המקור

קוד המקור של MCG מאוחסן ב-GitHub, בכתובת aaos-sdv-telemetry-mcg. אתם יכולים להריץ את MCG באופן מקומי לצורך פיתוח ובדיקה, או לפרוס אותו בסביבת ענן כדי לתת גישה לצוות.

הרצה באופן מקומי

כדי להריץ את MCG מספריית המקור שלו לפיתוח ולבדיקה מקומיים, משתמשים ב-Bazel. צריך להתקין את Bazel. כדי להפעיל שמירת נתונים במטמון בזיכרון כשמריצים באופן מקומי, צריך להגדיר את הערך MCG_LOCALCACHE=true. התמיכה הזו מאפשרת לאחסן קטלוגים של אותות רכב. כדי ליצור ולהריץ את השירות באופן מקומי, משתמשים בפקודות הבאות מספריית קובצי המקור:

# Build and run on default port 8005
MCG_LOCALCACHE=true bazel run //:mcg

# Or, to change the port, use:
MCG_LOCALCACHE=true bazel run //:mcg -- --listen :9000

פריסה ב-Google Cloud

בבסיס הקוד של MCG יש קבצים של Terraform ושל Google Cloud Build לפריסת MCG ב-Google Cloud כשירות Google Cloud Run. בקטעים הבאים מוסבר תהליך הפריסה, שכולל יצירת קובץ משתנים, פריסת התשתית, בנייה ופריסה של האפליקציה, מתן גישה ואימות הפריסה.

מכיוון ש-Cloud Run היא פלטפורמה ללא שרתים, היא חוסכת במשאבים בכך שהיא מפעילה קונטיינרים רק כשמעבדת בקשות, במקום להשאיר שרת פעיל 24 שעות ביממה. המשמעות היא שהנתונים בזיכרון אובדים כשמופעלת השבתה של מופעי קונטיינר בין בקשות. לכן, נדרש Redis כדי לספק אחסון קטלוג נתונים קבוע בכל הפעלות השירות. הגישה הזו מספקת פריסה ניתנת להרחבה שמתאימה לשימוש צוותי או לשימוש בייצור.

דרישות מוקדמות

לפני שמתחילים בפריסה ב-Google Cloud, צריך לוודא שהתנאים המוקדמים הבאים מתקיימים:

מבנה הקובץ

כדי לפרוס ב-Google Cloud, צריך להריץ פקודות Terraform מהספרייה infrastructure/ ופקודות Cloud Build משורש המאגר. אלה הקבצים והספריות העיקריים שאתם עובדים איתם:

repository-root/
├── cloudbuild.yaml
└── infrastructure/
    └── terraform.tfvars  <-- you create this file

יצירת קובץ משתנים של Terraform

בספרייה infrastructure/, יוצרים קובץ בשם terraform.tfvars כדי לספק ערכים למשתנים שהוגדרו ב-variables.tf ולהתאים אישית את הפריסה. צריך להגדיר ערכים למשתנים project_id ו-region בקובץ הזה. כל שאר המשתנים הם אופציונליים. מי יצורף למרחב terraform.tfvars:

project_id        = "<var label="Google Cloud project ID">your-gcp-project-id</var>"
region            = "<var label="Google Cloud region">your-gcp-region</var>" # For example, us-central1 or europe-west1

במאמר variables.tf מפורטים כל המשתנים הזמינים וערכי ברירת המחדל שלהם. אפשר לשנות את ערכי ברירת המחדל באמצעות הגדרתם ב-terraform.tfvars.

פריסת התשתית

אחרי שיוצרים את terraform.tfvars, אפשר לאתחל ולהחיל את ההגדרות של Terraform. בשלב הזה מוקצים כל המשאבים הנדרשים ב-Google Cloud, כולל Artifact Registry,‏ Redis ו-Cloud Run. בסיום, Terraform יוצר את שירות Google Cloud Run, שמריץ קובץ אימג' של קונטיינר placeholder. השלב הזה עשוי להימשך כמה דקות.

# Run from the infrastructure/ directory
terraform init
terraform apply

כשמופיעה הנחיה מ-terraform apply, בודקים את התוכנית ומקלידים yes כדי לאשר.

פיתוח ופריסה של אפליקציית MCG

אחרי שהתשתית מוכנה, השלב הבא הוא ליצור את קוד המקור של MCG ולפרוס אותו ב-Google Cloud Run. כדי לעשות זאת, שולחים את קוד המקור ל-Google Cloud Build, שיוצר את קובץ האימג' של Docker, מעביר אותו בדחיפה ל-Artifact Registry ומעדכן את השירות של Google Cloud Run כך שישתמש בקובץ האימג' החדש.

‫Google Cloud Build משתמש במשתנה ההחלפה COMMIT_SHA כדי לתייג את קובץ האימג' שנוצר. אפשר להשתמש במספר גרסה (לדוגמה, v1.0.0) או ב-SHA של הקומיט במאגר. תיוג עוזר להבחין בין גרסאות ב-Artifact Registry, לנהל פריסות ולחזור לגרסה קודמת אם צריך.

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

# Run from the repository root
#
# The command tags the image with the Git commit SHA.
# To tag with a version number, replace '$(git rev-parse --short HEAD)' with the version number.
gcloud builds submit . \
  --config=cloudbuild.yaml \
  --substitutions=COMMIT_SHA=$(git rev-parse --short HEAD)

הפקודה הזו מבצעת את הפריסה הראשונית של קוד האפליקציה. כדי לפרוס עדכונים לקוד המקור של MCG, מריצים את הפקודה הזו שוב.

מעניקים גישה ומאמתים את הפריסה

כדי לאפשר למשתמשים או לחשבונות שירות לקרוא ל-MCG API, צריך להקצות להם את תפקיד ה-IAM‏ Cloud Run Invoker ‏ (roles/run.invoker):

gcloud run services add-iam-policy-binding mcg-service \
  --member=<var label="member type, e.g. user or serviceAccount">MEMBER_TYPE</var>:<var label="email address of member">EMAIL_ADDRESS</var> \
  --role=roles/run.invoker \
  --region=<var label="Google Cloud region">your-gcp-region</var>

כדי לקבל את כתובת ה-URL של השירות, מריצים את הפקודה הבאה. כתובת ה-URL נשארת יציבה בכל הפריסות.

SERVICE_URL=$(gcloud run services describe mcg-service \
  --region <var label="Google Cloud region">your-gcp-region</var> \
  --format='value(status.url)')

אחרי שמעניקים הרשאות, צריך לוודא שהשירות פועל ושיש אליו גישה על ידי קריאה לנקודת הקצה /health שלו. מכיוון ששירותי Google Cloud Run דורשים אימות, כשקוראים לנקודת הקצה צריך לכלול בכותרת הבקשה אסימון הרשאה מ-gcloud:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  $SERVICE_URL/health

אם השירות פועל, הפקודה הזו מחזירה OK, ועכשיו אפשר להפעיל כל אחד מנקודות הקצה של ה-API, כמו שמתואר במאמר הפעלת ה-API.