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.gzsdv_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)
- Google Cloud CLI (
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:
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"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 = 5Aplica 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:
Coloca artefactos: Copia los archivos
cvd-host_package.tar.gzysdv_core_cf-img-<version>.zipen el directoriosimulation-agent/sdv-image-resources/.Compila y envía: Navega al directorio
simulation-agenty, luego, compila y envía la imagen. Reemplaza la ruta de acceso de la imagen por la que configuraste en tu archivovariables.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_IMAGEActualiza las huellas digitales: Después de enviar una imagen nueva, es posible que debas obtener su resumen SHA256 y actualizar el mapa
image_fingerprintsen tu archivovariables.tfvarsy, luego, volver a ejecutarterraform 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-requestoschedule-simulationpara 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 Functions: Revisa los registros de las funciones
- Cloud Storage: Para las simulaciones completadas, los archivos
logcatybugreportdel 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:
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ónfinish-simulation.
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.
- Conectado a: La función de Cloud Functions
receive-request-function:- Conectado a: La función de Cloud Functions
receive-request. - Permisos:
roles/datastore.user: Crea registros de simulaciónPENDINGnuevos en Firestore.roles/storage.objectUser: Verifica la existencia de archivos de entrada en Cloud Storage.
- Conectado a: La función de Cloud Functions
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.
- Conectado a: La función de Cloud Functions
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 aCOMPLETEDoFAILED.
- Conectado a: La función de Cloud Functions
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.
- Conectado a: La función de Cloud Functions
Identidades de activadores:
scheduler-trigger:- Usado por: Eventarc (eventos) y activadores de Cloud Scheduler.
- Permisos:
roles/eventarc.eventReceiveryroles/run.invokerpara activar las funciones del orquestador.
cleanup-scheduler:- Usado por: El trabajo cron de Cloud Scheduler para la limpieza.
- Permisos:
roles/run.invokerpara 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.