Bereitstellungsanleitung

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.gz
    • sdv_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-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:

  1. 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"
    
  2. Projektvariablen konfigurieren:Erstellen Sie eine Datei mit dem Namen environments/ ENVIRONMENT/variables.tfvars mit 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 = 5
    
  3. Terraform-Konfiguration anwenden:Wechseln Sie zum Verzeichnis infrastructure und 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:

  1. Artefakte platzieren: Kopieren Sie die Dateien cvd-host_package.tar.gz und sdv_core_cf-img-<version>.zip in das Verzeichnis simulation-agent/sdv-image-resources/.

  2. Erstellen und übertragen:Wechseln Sie zum Verzeichnis simulation-agent und erstellen und übertragen Sie das Image. Ersetzen Sie den Image-Pfad durch den Pfad, den Sie in der Datei variables.tfvars konfiguriert 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_IMAGE
    
  3. Fingerabdrücke aktualisieren:Nachdem Sie ein neues Image übertragen haben, müssen Sie möglicherweise den SHA256-Digest abrufen und die Map image_fingerprints in der Datei variables.tfvars aktualisieren. Führen Sie dann terraform apply noch 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-request oder schedule-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 Storage:Bei abgeschlossenen Simulationen werden die Dateien logcat und bugreport vom 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:

  1. 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 Funktion finish-simulation auf.
  2. 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.
    • receive-request-function:

      • Angehängt an:Die Cloud Functions-Funktion receive-request.
      • Berechtigungen:
        • roles/datastore.user: Erstellt neue PENDING-Simulationsdatensätze in Firestore.
        • roles/storage.objectUser: Prüft, ob Eingabedateien in Cloud Storage vorhanden sind.
    • 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.
        
    • 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 auf COMPLETED oder FAILED.
    • 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.
  3. Trigger-Identitäten :

    • scheduler-trigger:

      • Verwendet von:Eventarc- (Ereignisse) und Cloud Scheduler-Triggern.
      • Berechtigungen:roles/eventarc.eventReceiver und roles/run.invoker zum Auslösen der Orchestrator-Funktionen.
    • cleanup-scheduler:

      • Verwendet von:Der Cloud Scheduler-Cronjob für die Bereinigung.
      • Berechtigungen:roles/run.invoker zum 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.