כדי להשתמש בפלטפורמה Cloud Telemetry Simulation, צריך לפרוס את התשתית בפרויקט ב-Google Cloud.
גישה לקוד המקור
קוד המקור של פלטפורמת Cloud Telemetry Simulation מתארח ב-GitHub, ב-aaos-sdv-telemetry-simulator.
דרישות מוקדמות
כדי לפרוס את הפלטפורמה, ודאו שאתם עומדים בדרישות המוקדמות הבאות:
- פרויקט ב-Google Cloud שמופעל בו חיוב.
- אבטחת הדגמה באינטרנט: אם אתם פורסים את ההדגמה באינטרנט, אתם צריכים להגדיר מזהה לקוח OAuth 2.0 ב-Google Cloud בקטע APIs & Services > Credentials כדי לאבטח את אפליקציית App Engine ולהגביל את הגישה לחשבונות Google מורשים.
- פריטי מידע שנוצרו בתהליך הפיתוח (Artifact) של רכב מוגדר תוכנה (SDV): אתם צריכים פריטי מידע שנוצרו בתהליך הפיתוח של קובץ אימג' מקומפל של SDV. הם לא מסופקים במאגר הזה.
cvd-host_package.tar.gzsdv_core_cf-img-<version>.zip
- הרשאות: למשתמש או לחשבון השירות שמריצים את Terraform צריכות להיות מספיק הרשאות כדי ליצור את המשאבים שמוגדרים בקובץ (לדוגמה, עריכת פרויקטים או תפקיד בהתאמה אישית עם הרשאות ל-Compute Engine, ל-Cloud Functions, לניהול זהויות והרשאות גישה, ל-Cloud Storage ולשירותים נחוצים אחרים).
- כלים:
- Google Cloud CLI (
gcloud CLI) - Terraform (הגרסה שבה משתמשים במאגר)
- Docker
- Go (הגרסה שמשמשת לפונקציות של תזמור במאגר)
- Google Cloud CLI (
פריסת התשתית של Google Cloud
כדי לפרוס את פלטפורמת הסימולציה, צריך לבצע שני שלבים עיקריים: להשתמש ב-Terraform כדי לפרוס את תשתית הליבה ב-Google Cloud, וליצור ולהעביר בדחיפה את קובץ האימג' של Docker של סוכן הסימולציה ל-Artifact Registry. בקטע הזה מוסבר איך לפרוס את התשתית.
כדי לעדכן את קטעי הקוד שבדף הזה, צריך להזין ערכים למשתנים הבאים:
הגדרת הבק-אנד של Terraform: יוצרים קובץ כדי לציין איפה Terraform מאחסן את קובץ תמונת המצב שלו ב-Cloud Storage. נותנים שם לקובץ לפי התחביר הבא:
environments/ENVIRONMENT/backend.hcl# environments/ENVIRONMENT/backend.hcl bucket = "TF_BUCKET_NAME" prefix = "sdv-telemetry-simulation"הגדרת משתני הפרויקט: יוצרים קובץ עם פרטי הפרויקט. נותנים שם לקובץ לפי התחביר הבא:
environments/ENVIRONMENT/variables.tfvars# environments/ENVIRONMENT/variables.tfvars project_id = "PROJECT_ID" default_region = "REGION" default_zone = "ZONE" agent_docker_image = "REGION-docker.pkg.dev/PROJECT_ID/sim-agents/simulation-agent" # Security: Map logical tags to SHA256 digests # Security: Map logical tags to SHA256 digests (optional) supported_agent_builds = { "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589" } # Parallel Execution Limit (Default: 5) max_vm_count = 5מחילים את ההגדרות של Terraform: עוברים לספרייה
infrastructure, ואז מאתחלים ומחילים את ההגדרות:# Initialize Terraform with your backend configuration terraform init -backend-config=environments/ENVIRONMENT/backend.hcl # (Optional) Preview the changes terraform plan --var-file=environments/ENVIRONMENT/variables.tfvars # Apply the changes to deploy the infrastructure terraform apply --var-file=environments/ENVIRONMENT/variables.tfvars
יצירה ודחיפה של קובץ האימג' של סוכן הסימולציה
סוכן הסימולציה מריץ את הסימולציה במכונה הווירטואלית (VM) של Compute Engine. אתם יוצרים אותו עם פריטי המידע שנוצרו בתהליך הפיתוח (artifacts) של ה-SDV ומעבירים אותו בדחיפה ל-Artifact Registry.
כדי ליצור את קובץ האימג' של סוכן הסימולציה ולשלוח אותו:
הצבת פריטי מידע שנוצרו בתהליך הפיתוח (Artifact): מעתיקים את הקבצים
cvd-host_package.tar.gzו-sdv_core_cf-img-<version>.zipלספרייהsimulation-agent/sdv-image-resources/.פיתוח והעברה: עוברים לספרייה
simulation-agent, מפתחים את קובץ האימג' ומעבירים אותו. מחליפים את נתיב התמונה בנתיב שהגדרתם בקובץvariables.tfvars.# Example using the path from the .tfvars example above export AGENT_IMAGE="REGION-docker.pkg.dev/PROJECT_ID/sim-agents/simulation-agent:latest" # Build the image docker build -t $AGENT_IMAGE . # Push the image to Artifact Registry docker push $AGENT_IMAGEעדכון טביעות האצבע: אחרי שמעלים קובץ אימג' חדש, יכול להיות שצריך לקבל את תקציר ה-SHA256 שלו ולעדכן את המפה
supported_agent_buildsבקובץvariables.tfvars, ואז להריץ מחדש אתterraform apply.# Get the digest using gcloud gcloud artifacts docker images describe $AGENT_IMAGE --format="value(image_summary.digest)"פלטפורמת Cloud Telemetry Simulation נפרסה ומוכנה לקבל בקשות לסימולציה.
פעולות ופתרון בעיות
הפתרון הזה מאפשר לכם להשתמש בכלים המובנים של Google Cloud לצורך ניראות. הוא צורך משאבי מחשוב רק לכל בקשה ובמהלך הרצת הסימולציה.
ניהול עלויות
הארכיטקטורה מתוכננת להיות חסכונית באמצעות שימוש במשאבים זמניים וללא שרת (serverless). הגורמים העיקריים לעלויות הם:
- Compute Engine: חיוב על הזמן שבו פועלות המכונות הווירטואליות של הסימולציה. שימוש ב-VM במודל Spot יכול להוזיל משמעותית את העלות הזו.
- Cloud Functions: החיוב הוא לפי הפעלה.
- Cloud Storage: חיוב על אחסון של קובצי קלט ופלט ויומנים.
- Firestore: החיוב הוא על קריאות, כתיבות ואחסון נתונים.
ניראות (observability)
כל הרכיבים משולבים בחבילת התפעול של Google Cloud.
- Logs Explorer: הכלי העיקרי לפתרון בעיות. אפשר לסנן את היומנים לפי משאב:
- Cloud Functions: בודקים את היומנים של הפונקציות
receive-requestאוschedule-simulationכדי לנפות באגים בבעיות בתזמור. - Compute Engine: בדיקת היומנים של מכונות וירטואליות כדי לאתר בעיות בהפעלה או בכיבוי.
- סוכן סימולציה: הסוכן שפועל בתוך מאגר Docker מעביר את היומנים שלו ל-Logs Explorer. כדי לראות את התקדמות הסימולציה בפירוט, מסננים לפי שם המכונה הווירטואלית.
- Cloud Functions: בודקים את היומנים של הפונקציות
- Cloud Storage: אחרי שהסימולציות מסתיימות, קובצי
logcatו-bugreportממכשיר Cuttlefish מועלים לספריית הפלט של הסימולציה בקטגוריה של Cloud Storage, וכך מספקים תובנות מעמיקות לגבי ההתנהגות של סביבת Android.
חשבונות שירות
Terraform יוצר כמה חשבונות שירות כדי לאפשר סביבה מאובטחת עם הרשאות מינימליות. חשבונות השירות העיקריים כוללים:
זהות ההפעלה (VM):
simulation-agent:- מצורף אל: המכונות הווירטואליות של Compute Engine שמריצות את הסימולציה.
- תפקיד: מאפשר למכונה הווירטואלית להעלות תוצאות ולשלוח אותות על סיום.
- הרשאות:
-
roles/storage.objectUser: קריאת קלט והעלאת פריטי מידע שנוצרו בתהליך הפיתוח (יומנים, דוחות) ל-Cloud Storage. -
roles/run.invoker: מאמת ומפעיל את הפונקציהfinish-simulation.
-
זהויות תזמור (פונקציות):
read-simulations-function:- מצורף אל: הפונקציה
read-simulationשל Cloud Functions. - הרשאות:
-
roles/datastore.user: קריאת רשומות של סימולציה ושל מכונות וירטואליות פועלות ב-Firestore.
-
- מצורף אל: הפונקציה
receive-request-function:- מצורף אל: הפונקציה
receive-requestשל Cloud Functions. - הרשאות:
-
roles/datastore.user: יוצר רשומות חדשות של סימולציות ב-PENDINGב-Firestore. -
roles/storage.objectUser: מאמת את קיומם של קובצי קלט ב-Cloud Storage.
-
- מצורף אל: הפונקציה
scheduler-function:- מצורף אל: הפונקציה
schedule-simulationשל Cloud Functions. - הרשאות:
-
roles/pubsub.subscriber: שליפת הודעות מתור הסימולציה. -
roles/datastore.user: מבצעת קריאות וכתיבות אטומיות למונהrunning-vms. -
roles/compute.instanceAdmin.v1: יצירה והפעלה של מכונות וירטואליות ב-Compute Engine. -
roles/iam.serviceAccountUser: מאפשר לפונקציה הזו להקצות את חשבון השירותsimulation-agentלמכונות הווירטואליות שהיא יוצרת.
-
- מצורף אל: הפונקציה
simulation-finisher-function:- מצורף אל: הפונקציה
finish-simulationשל Cloud Functions. - הרשאות:
-
roles/compute.instanceAdmin.v1: מחיקת המכונה הווירטואלית בסיום ההפעלה. -
roles/datastore.user: מעדכן את סטטוס הסימולציה ל-COMPLETEDאו ל-FAILED.
-
- מצורף אל: הפונקציה
delete-simulation-function:- מצורף אל: הפונקציה
delete-simulationשל Cloud Functions. - הרשאות:
-
roles/compute.instanceAdmin.v1: מחיקה כפויה של מכונות וירטואליות במהלך הביטול. -
roles/datastore.user: עדכון הסטטוס של משימות שבוטלו.
-
- מצורף אל: הפונקציה
זהויות של טריגרים:
scheduler-trigger:- בשימוש על ידי: טריגרים של Eventarc (אירועים) ו-Cloud Scheduler.
- Permissions:
roles/eventarc.eventReceiverו-roles/run.invokerכדי להפעיל את פונקציות ה-orchestrator.
cleanup-scheduler:- בשימוש על ידי: משימת ה-cron של Cloud Scheduler לניקוי.
- הרשאות:
roles/run.invokerכדי להפעיל את לוגיקת הניקוי.
הדרך העיקרית לשלוט בגישה ובהרשאות במערכת היא לנהל את מדיניות ה-IAM של חשבונות השירות האלה.