Auf dieser Plattform müssen Sie die Infrastruktur in Ihrem Google Cloud-Projekt bereitstellen.
Quellcode abrufen
Der Quellcode für die Cloud Telemetry Simulation-Plattform wird auf
sdv.googlesource.com gehostet. Für den Zugriff ist eine Authentifizierung erforderlich, wie unter
Auf Tooling-Repositories zugreifen beschrieben.
So rufen Sie den Quellcode auf: Klonen Sie das Cloud Telemetry Simulation-Repository:
git clone https://sdv.googlesource.com/external/cloud_telemetry_simulation-external
Vorbereitung
Damit Sie die Plattform bereitstellen können, müssen die folgenden Voraussetzungen erfüllt sein:
- Ein Google Cloud-Projekt mit aktivierter Abrechnung.
- Sicherheit der Webdemo:Wenn Sie die Webdemo bereitstellen, müssen Sie unter APIs und Dienste > Anmeldedaten in Google Cloud eine OAuth 2.0-Client-ID konfigurieren, um die App Engine-Anwendung zu schützen und den Zugriff auf autorisierte Google-Konten zu beschränken.
- Build-Artefakte für Software Defined Vehicle (SDV):Sie benötigen eigene kompilierte SDV-Image-Artefakte. Diese sind in diesem Repository nicht enthalten.
cvd-host_package.tar.gzsdv_core_cf-img-<version>.zip
- Berechtigungen: Der Nutzer oder das Dienstkonto, das Terraform ausführt, muss ausreichende Berechtigungen haben, um die in der Konfiguration definierten Ressourcen zu erstellen (z. B. die Rolle Projektbearbeiter oder eine benutzerdefinierte Rolle mit Berechtigungen für Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage und andere erforderliche Dienste).
- Tools:
- Google Cloud CLI (
gcloud CLI) - Terraform (im Repository verwendete Version)
- Docker
- Go (im Repository verwendete Version für Orchestrator-Funktionen)
- Google Cloud CLI (
Google Cloud-Infrastruktur bereitstellen
Die Bereitstellung der Simulationsplattform umfasst zwei Hauptschritte: die Bereitstellung der Kerninfrastruktur in Google Cloud mit Terraform sowie das Erstellen und Übertragen des Docker-Images des Simulationsagenten in die Artifact Registry. In diesem Abschnitt wird die Bereitstellung der Infrastruktur beschrieben.
Geben Sie Werte für die folgenden Variablen ein, um die Code-Snippets auf dieser Seite zu aktualisieren:
Terraform-Backend konfigurieren: Erstellen Sie eine Datei mit dem Namen
environments/ENVIRONMENT/backend.hcl, um anzugeben, wo Terraform die Statusdatei in Cloud Storage speichert.# environments/ENVIRONMENT/backend.hcl bucket = "TF_BUCKET_NAME" prefix = "sdv-telemetry-simulation"Projektvariablen konfigurieren:Erstellen Sie eine Datei mit dem Namen
environments/ENVIRONMENT/variables.tfvarsmit den Details Ihres Projekts.# 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) image_fingerprints = { "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589" } # Parallel Execution Limit (Default: 5) max_concurrent_simulations = 5Terraform-Konfiguration anwenden:Wechseln Sie zum Verzeichnis
infrastructureund initialisieren und wenden Sie dann die Konfiguration an:# 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
Image des Simulationsagenten erstellen und übertragen
Der Simulationsagent führt die Simulation auf der Compute Engine-VM aus. Sie erstellen ihn mit Ihren SDV-Artefakten und übertragen ihn in die Artifact Registry.
So erstellen und übertragen Sie das Image des Simulationsagenten:
Artefakte platzieren: Kopieren Sie die Dateien
cvd-host_package.tar.gzundsdv_core_cf-img-<version>.zipin das Verzeichnissimulation-agent/sdv-image-resources/.Erstellen und übertragen:Wechseln Sie zum Verzeichnis
simulation-agentund erstellen und übertragen Sie das Image. Ersetzen Sie den Image-Pfad durch den Pfad, den Sie in der Dateivariables.tfvarskonfiguriert haben.# 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_IMAGEFingerabdrücke aktualisieren:Nachdem Sie ein neues Image übertragen haben, müssen Sie möglicherweise den SHA256-Digest abrufen und die Map
image_fingerprintsin der Dateivariables.tfvarsaktualisieren. Führen Sie dannterraform applynoch einmal aus.# Get the digest using gcloud gcloud container images describe $AGENT_IMAGE --format="value(image_summary.digest)"Ihre Cloud Telemetry Simulation-Plattform wurde bereitgestellt und kann Simulationsanfragen annehmen.
Abläufe und Fehlerbehebung
Mit dieser Lösung können Sie die integrierten Tools von Google Cloud zur Beobachtbarkeit verwenden. Rechenressourcen werden nur pro Anfrage und während der Simulation verwendet.
Kostenverwaltung
Die Architektur ist so konzipiert, dass sie kostengünstig ist, da serverlose und kurzlebige Ressourcen verwendet werden. Die Kosten werden hauptsächlich durch Folgendes verursacht:
- Compute Engine:Die Abrechnung erfolgt für die Zeit, in der die Simulations-VMs ausgeführt werden. Durch die Verwendung von Spot-VMs können diese Kosten erheblich gesenkt werden.
- Cloud Functions:Die Abrechnung erfolgt pro Aufruf.
- Cloud Storage:Die Abrechnung erfolgt für das Speichern von Eingabe- und Ausgabedateien sowie Logs.
- Firestore:Die Abrechnung erfolgt für Lese- und Schreibvorgänge sowie für die Datenspeicherung.
Beobachtbarkeit
Alle Komponenten sind in die Operations-Suite von Google Cloud eingebunden.
- Logs Explorer:Dies ist Ihr primäres Tool zur Fehlerbehebung. Sie können Logs nach Ressource filtern:
- Cloud Functions:Prüfen Sie die Logs für die Funktionen
receive-requestoderschedule-simulation, um Orchestrierungsprobleme zu beheben. - Compute Engine:Prüfen Sie die Logs der VM-Instanz auf Start- oder Herunterfahrprobleme.
- Simulationsagent:Der Agent, der im Docker-Container ausgeführt wird, leitet seine Logs an Logs Explorer weiter. Filtern Sie nach dem Namen der VM-Instanz, um den detaillierten Fortschritt der Simulation zu sehen.
- Cloud Functions:Prüfen Sie die Logs für die Funktionen
- Cloud Storage:Bei abgeschlossenen Simulationen werden die Dateien
logcatundbugreportvom Cuttlefish-Gerät in das Ausgabeverzeichnis der Simulation im Cloud Storage-Bucket hochgeladen. So erhalten Sie detaillierte Einblicke in das Verhalten der Android-Umgebung.
Dienstkonten
Terraform erstellt mehrere Dienstkonten, um eine sichere Umgebung mit minimalen Berechtigungen zu ermöglichen. Wichtige Dienstkonten sind:
Ausführungsidentität (VM) :
simulation-agent:- Angehängt an:Die Compute Engine-VMs, auf denen die Simulation ausgeführt wird.
- Rolle:Ermöglicht der VM, Ergebnisse hochzuladen und den Abschluss zu signalisieren.
- Berechtigungen:
roles/storage.objectUser: Liest Eingaben und lädt Artefakte (Logs, Berichte) in Cloud Storage hoch.roles/run.invoker: Authentifiziert und ruft die Funktionfinish-simulationauf.
Orchestrierungsidentitäten (Funktionen) :
read-simulations-function:- Angehängt an:Die Cloud Functions-Funktion
read-simulation. - Berechtigungen:
roles/datastore.user: Liest Simulations- und VM-Datensätze in Firestore.
- Angehängt an:Die Cloud Functions-Funktion
receive-request-function:- Angehängt an:Die Cloud Functions-Funktion
receive-request. - Berechtigungen:
roles/datastore.user: Erstellt neuePENDING-Simulationsdatensätze in Firestore.roles/storage.objectUser: Prüft, ob Eingabedateien in Cloud Storage vorhanden sind.
- Angehängt an:Die Cloud Functions-Funktion
scheduler-function:- Angehängt an:Die Cloud Functions-Funktion
schedule-simulation. Berechtigungen :
- `roles/pubsub.subscriber`: Pulls messages from the simulation queue. - `roles/datastore.user`: Performs atomic reads and writes to the `running-vms` counter. - `roles/compute.instanceAdmin.v1`: Creates and starts Compute Engine VMs. - `roles/iam.serviceAccountUser`: This permission allows this function to assign the `simulation-agent` service account to the VMs it creates.
- Angehängt an:Die Cloud Functions-Funktion
simulation-finisher-function:- Angehängt an:Die Cloud Functions-Funktion
finish-simulation. - Berechtigungen:
-
roles/compute.instanceAdmin.v1: Löscht die VM nach Abschluss der Ausführung. -roles/datastore.user: Aktualisiert den Simulationsstatus aufCOMPLETEDoderFAILED.
- Angehängt an:Die Cloud Functions-Funktion
delete-simulation-function:- Angehängt an:Die Cloud Functions-Funktion
delete-simulation. - Berechtigungen:
-
roles/compute.instanceAdmin.v1: Erzwingt das Löschen von VMs während der Abbruchphase. -roles/datastore.user: Aktualisiert den Status für abgebrochene Jobs.
- Angehängt an:Die Cloud Functions-Funktion
Trigger-Identitäten :
scheduler-trigger:- Verwendet von:Eventarc- (Ereignisse) und Cloud Scheduler-Triggern.
- Berechtigungen:
roles/eventarc.eventReceiverundroles/run.invokerzum Auslösen der Orchestrator-Funktionen.
cleanup-scheduler:- Verwendet von:Der Cloud Scheduler-Cronjob für die Bereinigung.
- Berechtigungen:
roles/run.invokerzum Auslösen der Bereinigungslogik.
Die Verwaltung von IAM-Richtlinien für diese Dienstkonten ist die primäre Möglichkeit, Zugriff und Berechtigungen im System zu steuern.