Guía de implementación

La plataforma de Cloud Telemetry Simulation requiere que implementes la infraestructura en tu proyecto de Google Cloud.

Accede al código fuente

El código fuente de la plataforma de Cloud Telemetry Simulation se aloja en GitHub, en aaos-sdv-telemetry-simulator.

Requisitos previos

Para implementar la plataforma, asegúrate de cumplir con los siguientes requisitos previos:

  • Un proyecto de Google Cloud con la facturación habilitada.
  • Seguridad de la demostración web: Si implementas la demostración web, debes configurar un ID de cliente de OAuth 2.0 en APIs y servicios > Credenciales de Google Cloud para proteger la aplicación de App Engine y restringir el acceso a las Cuentas de Google autorizadas.
  • Artefactos de compilación de Software Defined Vehicle (SDV): Debes tener tus propios artefactos de imagen de SDV compilados. Estos no se proporcionan en este repositorio.
    • cvd-host_package.tar.gz
    • sdv_core_cf-img-<version>.zip
  • Permisos: El usuario o la cuenta de servicio que ejecuta Terraform debe tener permisos suficientes para crear los recursos definidos en la configuración (por ejemplo, Editor del proyecto o un rol personalizado con permisos para Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage y otros servicios necesarios).
  • Herramientas:
    • Google Cloud CLI (gcloud CLI)
    • Terraform (versión usada en el repositorio)
    • Docker
    • Go (versión usada para las funciones del orquestador en el repositorio)

Implementa la infraestructura de Google Cloud

La implementación de la plataforma de simulación incluye dos pasos principales: usar Terraform para implementar la infraestructura principal en Google Cloud, y compilar y enviar la imagen de Docker del agente de simulación a Artifact Registry. En esta sección, se te guiará para implementar la infraestructura.

Ingresa valores para las siguientes variables para actualizar los fragmentos de código en esta página:

  1. Configura el backend de Terraform: Crea un archivo para especificar dónde Terraform almacena su archivo de estado en Cloud Storage. Usa esta sintaxis para nombrar el archivo:

    environments/ENVIRONMENT/backend.hcl
    
    # environments/ENVIRONMENT/backend.hcl
    bucket = "TF_BUCKET_NAME"
    prefix = "sdv-telemetry-simulation"
    
  2. Configura las variables del proyecto: Crea un archivo llamado con los detalles de tu proyecto. Usa esta sintaxis para nombrar el archivo:

    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. Aplica la configuración de Terraform: Navega al directorio infrastructure, luego inicializa y aplica la configuración:

    # 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
    

Compila y envía la imagen del agente de simulación

El agente de simulación ejecuta la simulación en la máquina virtual (VM) de Compute Engine. Lo compilas con tus artefactos de SDV y lo envías a Artifact Registry.

Para compilar y enviar la imagen del agente de simulación, haz lo siguiente:

  1. Coloca artefactos: Copia los archivos cvd-host_package.tar.gz y sdv_core_cf-img-<version>.zip en el directorio simulation-agent/sdv-image-resources/.

  2. Compila y envía: Navega al directorio simulation-agent y, luego, compila y envía la imagen. Reemplaza la ruta de acceso de la imagen por la que configuraste en tu archivo 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. Actualiza las huellas digitales: Después de enviar una imagen nueva, es posible que debas obtener su resumen SHA256 y actualizar el mapa image_fingerprints en tu archivo variables.tfvars y, luego, volver a ejecutar terraform apply.

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

    Tu plataforma de Cloud Telemetry Simulation se implementó y está lista para aceptar solicitudes de simulación.

Operaciones y solución de problemas

Esta solución te permite usar las herramientas integradas de Google Cloud para la observabilidad. Consume recursos de procesamiento solo por solicitud y durante la ejecución de la simulación.

Administración de costos

La arquitectura está diseñada para ser rentable mediante el uso de recursos efímeros y sin servidores. Los costos se basan principalmente en lo siguiente:

  • Compute Engine: Se factura por el tiempo que se ejecutan las VMs de simulación. El uso de VMs Spot puede reducir significativamente este costo.
  • Cloud Functions: Se factura por invocación.
  • Cloud Storage: Se factura por almacenar archivos de entrada y salida, y registros.
  • Firestore: Se factura por lecturas, escrituras y almacenamiento de datos.

Observabilidad

Todos los componentes están integrados en Google Cloud's operations suite.

  • Explorador de registros: Esta es tu herramienta principal para solucionar problemas. Puedes filtrar los registros por recurso:
    • Cloud Functions: Revisa los registros de las funciones receive-request o schedule-simulation para depurar problemas de orquestación.
    • Compute Engine: Revisa los registros de instancias de VM para detectar problemas de inicio o apagado.
    • Agente de simulación: El agente que se ejecuta dentro del contenedor de Docker reenvía sus registros al Explorador de registros. Filtra por el nombre de la instancia de VM para ver el progreso detallado de la simulación.
  • Cloud Storage: Para las simulaciones completadas, los archivos logcat y bugreport del dispositivo Cuttlefish se suben al directorio de salida de la simulación en el bucket de Cloud Storage, lo que proporciona información detallada sobre el comportamiento del entorno de Android.

Cuentas de servicio

Terraform crea varias cuentas de servicio para habilitar un entorno seguro con el menor privilegio. Las cuentas de servicio clave incluyen las siguientes:

  1. Identidad de ejecución (VM):

    • simulation-agent:
      • Conectado a: Las VMs de Compute Engine que ejecutan la simulación.
      • Rol: Permite que la VM suba resultados y señale la finalización.
      • Permisos:
        • roles/storage.objectUser: Lee entradas y sube artefactos (registros, informes) a Cloud Storage.
        • roles/run.invoker: Autentica e invoca la función finish-simulation.
  2. Identidades de orquestación (funciones):

    • read-simulations-function:
      • Conectado a: La función de Cloud Functions read-simulation.
      • Permisos:
        • roles/datastore.user: Lee registros de simulación y de VMs en ejecución en Firestore.
    • receive-request-function:

      • Conectado a: La función de Cloud Functions receive-request.
      • Permisos:
        • roles/datastore.user: Crea registros de simulación PENDING nuevos en Firestore.
        • roles/storage.objectUser: Verifica la existencia de archivos de entrada en Cloud Storage.
    • scheduler-function:

      • Conectado a: La función de Cloud Functions schedule-simulation.
      • Permisos:

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

      • Conectado a: La función de Cloud Functions finish-simulation.
      • Permisos: - roles/compute.instanceAdmin.v1: Borra la VM después de que se completa la ejecución. - roles/datastore.user: Actualiza el estado de la simulación a COMPLETED o FAILED.
    • delete-simulation-function:

      • Conectado a: La función de Cloud Functions delete-simulation.
      • Permisos: - roles/compute.instanceAdmin.v1: Borra las máquinas virtuales de forma forzada durante la cancelación. - roles/datastore.user: Actualiza el estado de los trabajos cancelados.
  3. Identidades de activadores:

    • scheduler-trigger:

      • Usado por: Eventarc (eventos) y activadores de Cloud Scheduler.
      • Permisos: roles/eventarc.eventReceiver y roles/run.invoker para activar las funciones del orquestador.
    • cleanup-scheduler:

      • Usado por: El trabajo cron de Cloud Scheduler para la limpieza.
      • Permisos: roles/run.invoker para activar la lógica de limpieza.

Administrar las políticas de Identity and Access Management para estas cuentas de servicio es la forma principal de controlar el acceso y los permisos dentro del sistema.