Guida al deployment

Questa piattaforma richiede di eseguire il deployment dell'infrastruttura nel tuo progetto Google Cloud.

Recupera il codice sorgente

Il codice sorgente della piattaforma Cloud Telemetry Simulation è ospitato su sdv.googlesource.com, che richiede l'autenticazione come descritto in Accedere ai repository degli strumenti.

Per accedere al codice sorgente, clona il repository Cloud Telemetry Simulation:

git clone https://sdv.googlesource.com/external/cloud_telemetry_simulation-external

Prerequisiti

Per eseguire il deployment della piattaforma, assicurati di soddisfare i seguenti prerequisiti:

  • Un progetto Google Cloud con la fatturazione abilitata.
  • Sicurezza della demo web: se esegui il deployment della demo web, devi configurare un ID client OAuth 2.0 in API e servizi > Credenziali di Google Cloud per proteggere l'applicazione App Engine e limitare l'accesso agli Account Google autorizzati.
  • Artefatti di build del veicolo definito dal software (SDV): devi disporre dei tuoi artefatti immagine SDV compilati. Questi non sono forniti in questo repository.
    • cvd-host_package.tar.gz
    • sdv_core_cf-img-<version>.zip
  • Autorizzazioni: l'utente o il service account che esegue Terraform deve disporre di autorizzazioni sufficienti per creare le risorse definite nella configurazione (ad esempio, Editor progetto o un ruolo personalizzato con autorizzazioni per Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage e altri servizi necessari).
  • Strumenti:
    • Google Cloud CLI (gcloud CLI)
    • Terraform (versione utilizzata nel repository)
    • Docker
    • Go (versione utilizzata per le funzioni dell'orchestratore nel repository)

Esegui il deployment dell'infrastruttura Google Cloud

Il deployment della piattaforma di simulazione prevede due passaggi principali: l'utilizzo di Terraform per eseguire il deployment dell'infrastruttura di base su Google Cloud e la creazione e il push dell'immagine Docker dell'agente di simulazione in Artifact Registry. Questa sezione ti guida nel deployment dell'infrastruttura.

Inserisci i valori delle seguenti variabili per aggiornare gli snippet di codice in questa pagina:

  1. Configura il backend Terraform: crea un file denominato environments/ENVIRONMENT/backend.hcl per specificare dove Terraform archivia il file di stato in Cloud Storage.

    # environments/ENVIRONMENT/backend.hcl
    bucket = "TF_BUCKET_NAME"
    prefix = "sdv-telemetry-simulation"
    
  2. Configura le variabili del progetto: crea un file denominato environments/ ENVIRONMENT/variables.tfvars con i dettagli del tuo progetto.

    # 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. Applica la configurazione Terraform: vai alla directory infrastructure, quindi inizializza e applica la configurazione:

    # 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
    

Crea ed esegui il push dell'immagine dell'agente di simulazione

L'agente di simulazione esegue la simulazione sulla macchina virtuale (VM) Compute Engine. Lo crei con gli artefatti SDV e ne esegui il push in Artifact Registry.

Per creare ed eseguire il push dell'immagine dell'agente di simulazione:

  1. Inserisci gli artefatti: copia i file cvd-host_package.tar.gz e sdv_core_cf-img-<version>.zip nella directory simulation-agent/sdv-image-resources/.

  2. Crea ed esegui il push: vai alla directory simulation-agent, quindi crea ed esegui il push dell'immagine. Sostituisci il percorso dell'immagine con quello configurato nel file 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
    
  3. Aggiorna le fingerprint: dopo aver eseguito il push di una nuova immagine, potresti dover recuperare il relativo digest SHA256 e aggiornare la mappa image_fingerprints nel file variables.tfvars, quindi eseguire di nuovo terraform apply.

    # Get the digest using gcloud
    gcloud container images describe $AGENT_IMAGE --format="value(image_summary.digest)"
    

    La piattaforma Cloud Telemetry Simulation è stata sottoposta a deployment ed è pronta ad accettare le richieste di simulazione.

Operazioni e risoluzione dei problemi

Questa soluzione ti consente di utilizzare gli strumenti integrati di Google Cloud per l'osservabilità. Consuma risorse di calcolo solo per richiesta e durante l'esecuzione della simulazione.

Gestione dei costi

L'architettura è progettata per essere economicamente vantaggiosa utilizzando risorse serverless ed effimere. I costi sono determinati principalmente da:

  • Compute Engine: la fatturazione avviene in base al tempo di esecuzione delle VM di simulazione. L'utilizzo delle VM spot può ridurre significativamente questo costo.
  • Cloud Functions: la fatturazione avviene per chiamata.
  • Cloud Storage: la fatturazione avviene per l'archiviazione di file di input e output e log.
  • Firestore: la fatturazione avviene per letture, scritture e archiviazione dei dati.

Osservabilità

Tutti i componenti sono integrati con la suite operativa di Google Cloud.

  • Esplora log: questo è lo strumento principale per la risoluzione dei problemi. Puoi filtrare i log per risorsa:
    • Cloud Functions: controlla i log delle funzioni receive-request o schedule-simulation per eseguire il debug dei problemi di orchestrazione.
    • Compute Engine: controlla i log delle istanze VM per problemi di avvio o arresto.
    • Agente di simulazione: l'agente in esecuzione all'interno del container Docker inoltra i log a Esplora log. Filtra in base al nome dell'istanza VM per visualizzare i dettagli dell'avanzamento della simulazione.
  • Cloud Storage: per le simulazioni completate, i file logcat e bugreport del dispositivo Cuttlefish vengono caricati nella directory di output della simulazione nel bucket Cloud Storage, fornendo informazioni dettagliate sul comportamento dell'ambiente Android.

Service account

Terraform crea diversi service account per consentire un ambiente sicuro con privilegi minimi. I service account principali includono:

  1. Identità di esecuzione (VM):

    • simulation-agent:
      • Collegato a: le VM Compute Engine che eseguono la simulazione.
      • Ruolo: consente alla VM di caricare i risultati e segnalare il completamento.
      • Autorizzazioni:
        • roles/storage.objectUser: legge gli input e carica gli artefatti (log, report) in Cloud Storage.
        • roles/run.invoker: autentica e richiama la funzione finish-simulation.
  2. Identità di orchestrazione (funzioni):

    • read-simulations-function:
      • Collegato a: la funzione Cloud read-simulation.
      • Autorizzazioni:
        • roles/datastore.user: legge i record di simulazione e VM in esecuzione in Firestore.
    • receive-request-function:

      • Collegato a: la funzione Cloud receive-request.
      • Autorizzazioni:
        • roles/datastore.user: crea nuovi record di simulazione PENDING in Firestore.
        • roles/storage.objectUser: verifica l'esistenza dei file di input in Cloud Storage.
    • scheduler-function:

      • Collegato a: la funzione Cloud schedule-simulation.
      • Autorizzazioni:

        -   `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:

      • Collegato a: la funzione Cloud finish-simulation.
      • Autorizzazioni: - roles/compute.instanceAdmin.v1: elimina la VM al termine dell'esecuzione. - roles/datastore.user: aggiorna lo stato della simulazione a COMPLETED o FAILED.
    • delete-simulation-function:

      • Collegato a: la funzione Cloud delete-simulation.
      • Autorizzazioni: - roles/compute.instanceAdmin.v1: elimina forzatamente le macchine virtuali durante l'annullamento. - roles/datastore.user: aggiorna lo stato dei job annullati.
  3. Identità trigger:

    • scheduler-trigger:

      • Utilizzato da: trigger Eventarc (eventi) e Cloud Scheduler.
      • Autorizzazioni: roles/eventarc.eventReceiver e roles/run.invoker per attivare le funzioni dell'orchestratore.
    • cleanup-scheduler:

      • Utilizzato da: il cron job di Cloud Scheduler per la pulizia.
      • Autorizzazioni: roles/run.invoker per attivare la logica di pulizia.

La gestione dei criteri IAM (Identity and Access Management) per questi service account è il modo principale per controllare l'accesso e le autorizzazioni all'interno del sistema.