Implementación

En esta página, se describe cómo implementar el generador de configuración de métricas (MCG).

Accede al código fuente

El código fuente de MCG se aloja en GitHub, en aaos-sdv-telemetry-mcg. Puedes ejecutar MCG de forma local para el desarrollo y las pruebas, o bien implementarlo en un entorno de nube para el acceso del equipo.

Ejecuta de forma local

Para ejecutar MCG desde su directorio del código fuente para el desarrollo y las pruebas locales, usa Bazel. Se debe instalar Bazel. Debes habilitar el almacenamiento en caché en la memoria configurando MCG_LOCALCACHE=true cuando se ejecuta de forma local. Esto admite el almacenamiento de catálogos de señales de vehículos. Para compilar y ejecutar el servicio de forma local, usa los siguientes comandos desde el directorio del código fuente:

# Build and run on default port 8005
MCG_LOCALCACHE=true bazel run //:mcg

# Or, to change the port, use:
MCG_LOCALCACHE=true bazel run //:mcg -- --listen :9000

Implementa el cuaderno en Google Cloud

La base de código de MCG incluye archivos de Terraform y Google Cloud Build para implementar MCG en Google Cloud como un servicio de Google Cloud Run. En las siguientes secciones, se te guiará por el proceso de implementación, que incluye la creación de un archivo de variables, la implementación de la infraestructura, la compilación y la implementación de la aplicación, y el otorgamiento de acceso y la verificación de la implementación.

Como Cloud Run es una plataforma sin servidores, conserva los recursos ejecutando contenedores solo cuando procesa solicitudes, en lugar de mantener un servidor activo las 24 horas, los 7 días de la semana. Esto significa que los datos en la memoria se pierden cuando las instancias de contenedor se apagan entre las solicitudes. Por lo tanto, se requiere Redis para proporcionar almacenamiento persistente para los datos del catálogo en las invocaciones de servicio. Este enfoque proporciona una implementación escalable adecuada para el uso del equipo o la producción.

Requisitos previos

Antes de comenzar la implementación en Google Cloud, verifica que cumplas con los siguientes requisitos previos:

Estructura de archivos

La implementación en Google Cloud implica ejecutar comandos de Terraform desde el subdirectorio infrastructure/ y comandos de Cloud Build desde la raíz del repositorio. Los principales archivos y directorios con los que interactúas son los siguientes:

repository-root/
├── cloudbuild.yaml
└── infrastructure/
    └── terraform.tfvars  <-- you create this file

Crea un archivo de variables de Terraform

En el directorio infrastructure/, crea un archivo llamado terraform.tfvars para proporcionar valores para las variables definidas en variables.tf y personalizar tu implementación. Debes definir valores para project_id y region en este archivo. Todas las demás variables son opcionales. Agrega lo siguiente a terraform.tfvars:

project_id        = "<var label="Google Cloud project ID">your-gcp-project-id</var>"
region            = "<var label="Google Cloud region">your-gcp-region</var>" # For example, us-central1 or europe-west1

Consulta variables.tf para ver todas las variables disponibles y sus valores predeterminados. Puedes anular los valores predeterminados configurándolos en terraform.tfvars.

Implementa la infraestructura

Después de crear terraform.tfvars, puedes inicializar y aplicar la configuración de Terraform. Este paso aprovisiona todos los recursos necesarios de Google Cloud, incluidos Artifact Registry, Redis y Cloud Run. Cuando se complete, Terraform creará el servicio de Google Cloud Run, que ejecuta una imagen de contenedor de marcador de posición. Este paso puede tardar varios minutos.

# Run from the infrastructure/ directory
terraform init
terraform apply

Cuando terraform apply te lo solicite, revisa el plan y escribe yes para confirmar.

Compila e implementa la aplicación de MCG

Después de aprovisionar la infraestructura, el siguiente paso es compilar el código fuente de MCG y, luego, implementarlo en Google Cloud Run. Para ello, envía el código fuente a Google Cloud Build, que compila la imagen de Docker, la envía a Artifact Registry y actualiza el servicio de Google Cloud Run para usar la imagen nueva.

Google Cloud Build usa la variable de sustitución COMMIT_SHA para etiquetar la imagen compilada. Puedes usar un número de versión (por ejemplo, v1.0.0) o el SHA de confirmación de tu repositorio. El etiquetado te ayuda a distinguir entre las versiones en Artifact Registry, administrar las implementaciones y revertir a una versión anterior si es necesario.

Ejecuta el siguiente comando gcloud para activar la compilación y la implementación:

# Run from the repository root
#
# The command tags the image with the Git commit SHA.
# To tag with a version number, replace '$(git rev-parse --short HEAD)' with the version number.
gcloud builds submit . \
  --config=cloudbuild.yaml \
  --substitutions=COMMIT_SHA=$(git rev-parse --short HEAD)

Este comando realiza la implementación inicial del código de la aplicación. Para implementar actualizaciones en el código fuente de MCG, vuelve a ejecutar este comando.

Otorga acceso y verifica la implementación

Para permitir que los usuarios o las cuentas de servicio llamen a la API de MCG, debes otorgarles el rol de IAM de invocador de Cloud Run (roles/run.invoker):

gcloud run services add-iam-policy-binding mcg-service \
  --member=<var label="member type, e.g. user or serviceAccount">MEMBER_TYPE</var>:<var label="email address of member">EMAIL_ADDRESS</var> \
  --role=roles/run.invoker \
  --region=<var label="Google Cloud region">your-gcp-region</var>

Puedes obtener la URL del servicio ejecutando el siguiente comando. La URL permanece estable en todas las implementaciones.

SERVICE_URL=$(gcloud run services describe mcg-service \
  --region <var label="Google Cloud region">your-gcp-region</var> \
  --format='value(status.url)')

Después de otorgar permisos, confirma que el servicio se esté ejecutando y que se pueda acceder a él llamando a su extremo /health. Como los servicios de Google Cloud Run requieren autenticación, debes incluir un token de autorización de gcloud en el encabezado de la solicitud cuando llames al extremo:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  $SERVICE_URL/health

Si el servicio se está ejecutando, este comando muestra OK y, ahora, puedes llamar a cualquiera de los extremos de la API como se describe en Llama a la API.