Guide de déploiement

La plate-forme de simulation de télémétrie cloud nécessite que vous déployiez l'infrastructure sur 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 API et services > Identifiants de Google Cloud 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, É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 implique 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 guide tout au long du déploiement de l'infrastructure.

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

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

    environments/ENVIRONMENT/backend.hcl
    
    # environments/ENVIRONMENT/backend.hcl
    bucket = "TF_BUCKET_NAME"
    prefix = "sdv-telemetry-simulation"
    
  2. Configurer les variables du 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)
    supported_agent_builds = {
    "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589"
    }
    
    # Parallel Execution Limit (Default: 5)
    max_vm_count = 5
    
  3. Appliquez 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 la créez avec vos artefacts SDV et la 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 déployé une nouvelle image, vous devrez peut-être obtenir son condensé SHA256 et mettre à jour le mappage supported_agent_builds dans votre fichier variables.tfvars, puis réexécuter terraform apply.

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

    Votre plate-forme de simulation de télémétrie cloud 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é. Il ne consomme des ressources de calcul que par requête et pendant 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 facteurs 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 : facturation 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 : vérifiez les journaux des fonctions receive-request ou schedule-simulation pour déboguer les problèmes d'orchestration.
    • Compute Engine : vérifiez les journaux d'instance 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 fournit des informations détaillées sur le comportement de l'environnement Android.

Comptes de service

Terraform crée plusieurs comptes de service pour permettre un environnement sécurisé avec un accès minimal. Voici les principaux comptes de service :

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

    • simulation-agent :
      • Associé à : 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 des enregistrements de simulation PENDING dans Firestore.
        • roles/storage.objectUser : vérifie l'existence des fichiers d'entrée dans Cloud Storage.
    • scheduler-function :

      • Associé à : la fonction Cloud schedule-simulation.
      • Autorisations :
        • roles/pubsub.subscriber : extrait les messages de la file d'attente de simulation.
        • roles/datastore.user : effectue des lectures et des écritures atomiques dans le compteur running-vms.
        • roles/compute.instanceAdmin.v1 : crée et démarre des VM Compute Engine.
        • roles/iam.serviceAccountUser : permet à cette fonction d'attribuer le compte de service simulation-agent aux VM qu'elle crée.
    • 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 : force la suppression des machines virtuelles lors de l'annulation.
        • roles/datastore.user : met à jour l'état des jobs annulés.
  3. Identités des déclencheurs :

    • 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 de l'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 IAM (Identity and Access Management) pour ces comptes de service est le principal moyen de contrôler les accès et les autorisations dans le système.