Guide de déploiement

La plate-forme Cloud Telemetry Simulation nécessite que vous déployiez l'infrastructure dans votre projet Google Cloud.

Accéder au code source

Le code source de la plate-forme Cloud Telemetry Simulation est hébergé sur GitHub, dans aaos-sdv-telemetry-simulator.

Prérequis

Pour déployer la plate-forme, assurez-vous de remplir les conditions préalables suivantes :

  • Un projet Google Cloud avec la facturation activée.
  • Sécurité de la démonstration Web : si vous déployez la démonstration Web, vous devez configurer un ID client OAuth 2.0 dans Google Cloud API et services > Identifiants pour sécuriser l'application App Engine et limiter l'accès aux comptes Google autorisés.
  • Artefacts de compilation de véhicule défini par logiciel (SDV) : vous devez disposer de vos propres artefacts d'image SDV compilés. Ils ne sont pas fournis dans ce dépôt.
    • cvd-host_package.tar.gz
    • sdv_core_cf-img-<version>.zip
  • Autorisations : l'utilisateur ou le compte de service exécutant Terraform doit disposer des autorisations suffisantes pour créer les ressources définies dans la configuration (par exemple, le rôle Éditeur de projet ou un rôle personnalisé avec des autorisations pour Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage et d'autres services nécessaires).
  • Outils :
    • Google Cloud CLI (gcloud CLI)
    • Terraform (version utilisée dans le dépôt)
    • Docker
    • Go (version utilisée pour les fonctions d'orchestrateur dans le dépôt)

Déployer l'infrastructure Google Cloud

Le déploiement de la plate-forme de simulation comporte deux étapes principales : utiliser Terraform pour déployer l'infrastructure de base sur Google Cloud, puis créer et transférer l'image Docker de l'agent de simulation vers Artifact Registry. Cette section vous explique comment déployer l'infrastructure.

Saisissez les valeurs des variables suivantes pour mettre à jour les extraits de code de cette page :

  1. Configurer le backend Terraform : créez un fichier pour spécifier où Terraform stocke son fichier d'état dans Cloud Storage. Nommez le fichier en utilisant la syntaxe suivante :

    environments/ENVIRONMENT/backend.hcl
    
    # environments/ENVIRONMENT/backend.hcl
    bucket = "TF_BUCKET_NAME"
    prefix = "sdv-telemetry-simulation"
    
  2. Configurer les variables de projet : créez un fichier nommé avec les détails de votre projet. Nommez le fichier en utilisant la syntaxe suivante :

    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)
    image_fingerprints = {
    "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589"
    }
    
    # Parallel Execution Limit (Default: 5)
    max_concurrent_simulations = 5
    
  3. Appliquer la configuration Terraform : accédez au répertoire infrastructure, puis initialisez et appliquez la configuration :

    # 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
    

Créer et transférer l'image de l'agent de simulation

L'agent de simulation exécute la simulation sur la machine virtuelle (VM) Compute Engine. Vous le créez avec vos artefacts SDV et le transférez vers Artifact Registry.

Pour créer et transférer l'image de l'agent de simulation :

  1. Placer les artefacts : copiez vos fichiers cvd-host_package.tar.gz et sdv_core_cf-img-<version>.zip dans le répertoire simulation-agent/sdv-image-resources/.

  2. Créer et transférer : accédez au répertoire simulation-agent, puis créez et transférez l'image. Remplacez le chemin d'accès de l'image par celui que vous avez configuré dans votre fichier 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. Mettre à jour les empreintes : après avoir transféré une nouvelle image, vous devrez peut-être obtenir son condensé SHA256 et mettre à jour le mappage image_fingerprints dans votre fichier variables.tfvars, puis réexécuter terraform apply.

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

    Votre plate-forme Cloud Telemetry Simulation est déployée et prête à accepter les requêtes de simulation.

Opérations et dépannage

Cette solution vous permet d'utiliser les outils intégrés de Google Cloud pour l'observabilité. Elle ne consomme des ressources de calcul que par requête et lors de l'exécution de la simulation.

Gestion des coûts

L'architecture est conçue pour être rentable en utilisant des ressources sans serveur et éphémères. Les coûts sont principalement déterminés par les éléments suivants :

  • Compute Engine : facturé pour la durée d'exécution des VM de simulation. L'utilisation de VM Spot peut réduire considérablement ce coût.
  • Cloud Functions : facturé par appel.
  • Cloud Storage : facturé pour le stockage des fichiers d'entrée et de sortie, ainsi que des journaux.
  • Firestore : facturé pour les lectures, les écritures et le stockage des données.

Observabilité

Tous les composants sont intégrés à la suite Google Cloud Operations.

  • Explorateur de journaux : il s'agit de votre principal outil de dépannage. Vous pouvez filtrer les journaux par ressource :
    • Cloud Functions : consultez les journaux des fonctions receive-request ou schedule-simulation pour déboguer les problèmes d'orchestration.
    • Compute Engine : consultez les journaux des instances de VM pour détecter les problèmes de démarrage ou d'arrêt.
    • Agent de simulation : l'agent exécuté dans le conteneur Docker transfère ses journaux vers l'explorateur de journaux. Filtrez par nom d'instance de VM pour afficher la progression détaillée de la simulation.
  • Cloud Storage : pour les simulations terminées, les fichiers logcat et bugreport de l'appareil Cuttlefish sont importés dans le répertoire de sortie de la simulation dans le bucket Cloud Storage, ce qui permet d'obtenir des informations détaillées sur le comportement de l'environnement Android.

Comptes de service

Terraform crée plusieurs comptes de service pour activer un environnement sécurisé avec le moindre privilège. Voici quelques-uns des principaux comptes de service :

  1. Identité d'exécution (VM) :

    • simulation-agent:
      • Associé à : les VM Compute Engine exécutant la simulation.
      • Rôle : permet à la VM d'importer les résultats et de signaler la fin de l'opération.
      • Autorisations
        • roles/storage.objectUser: lit les entrées et importe les artefacts (journaux, rapports) dans Cloud Storage.
        • roles/run.invoker: authentifie et appelle la fonction finish-simulation.
  2. Identités d'orchestration (fonctions) :

    • read-simulations-function:
      • Associé à : la fonction Cloud read-simulation.
      • Autorisations
        • roles/datastore.user: lit les enregistrements de simulation et de VM en cours d'exécution dans Firestore.
    • receive-request-function:

      • Associé à : la fonction Cloud receive-request.
      • Autorisations
        • roles/datastore.user: crée de nouveaux enregistrements de simulation PENDING dans Firestore.
        • roles/storage.objectUser: vérifie l'existence de fichiers d'entrée dans Cloud Storage.
    • scheduler-function:

      • Associé à : la fonction Cloud schedule-simulation.
      • Autorisations :

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

      • Associé à : la fonction Cloud finish-simulation.
      • Autorisations - roles/compute.instanceAdmin.v1 : supprime la VM une fois l'exécution terminée. - roles/datastore.user : met à jour l'état de la simulation sur COMPLETED ou FAILED.
    • delete-simulation-function:

      • Associé à : la fonction Cloud delete-simulation.
      • Autorisations - roles/compute.instanceAdmin.v1 : supprime de force les machines virtuelles lors de l'annulation. - roles/datastore.user : met à jour l'état des jobs annulés.
  3. Identités de déclencheur :

    • scheduler-trigger:

      • Utilisé par : les déclencheurs Eventarc (événements) et Cloud Scheduler.
      • Autorisations : roles/eventarc.eventReceiver et roles/run.invoker pour déclencher les fonctions d'orchestrateur.
    • cleanup-scheduler:

      • Utilisé par : le job Cron Cloud Scheduler pour le nettoyage.
      • Autorisations : roles/run.invoker pour déclencher la logique de nettoyage.

La gestion des stratégies Identity and Access Management pour ces comptes de service est le principal moyen de contrôler l'accès et les autorisations au sein du système.