Implementa un servicio o trabajo de Cloud Run

En este documento, se describe cómo implementar las aplicaciones, incluidos los servicios y trabajos de Cloud Run.

Cloud Deploy te permite implementar tus cargas de trabajo basadas en contenedores en cualquier servicio o trabajo de Cloud Run. Todas las funciones de Cloud Deploy son compatibles cuando realizas una implementación en los destinos de Cloud Run para los servicios de Cloud Run, pero las implementaciones de versiones canary no son compatibles con trabajos de Cloud Run.

En este documento, se describen las tres configuraciones principales que debes completar para implementar en Cloud Run:

Limitaciones

  • Solo puedes implementar un servicio o trabajo de Cloud Run por destino.

  • No puedes ejecutar una implementación de versiones canary en un trabajo de Cloud Run.

    Sin embargo, los servicios de Cloud Run pueden usar una implementación de versiones canary.

Antes de comenzar

Crea la configuración de destino

El destino se puede configurar en el YAML de la canalización de entrega o puede estar en un archivo separado. Además, puedes configurar más de un destino en el mismo archivo.

En la definición del destino, crea una estrofa run para identificar la ubicación en la que se creará el servicio de Cloud Run.

La sintaxis para especificar el servicio o el trabajo de Cloud Run en la definición del destino es la siguiente:

run:
 location: projects/[project_name]/locations/[region_name]

Este identificador de recursos usa los siguientes elementos:

  • [project_name] es el nombre del proyecto de Google Cloud en el que se creará tu servicio o trabajo de Cloud Run.

    Harás esto para cada objetivo. Recomendamos un proyecto diferente para cada servicio o trabajo de Cloud Run. Si quieres tener más de un servicio o trabajo en el mismo proyecto, debes usar los perfiles de Skaffold en el archivo de configuración skaffold.yaml.

  • [region_name] es la región en la que se creará el servicio o trabajo. Tu servicio o trabajo puede estar en cualquier región que admita Cloud Run.

La siguiente es una configuración de destino de ejemplo, en la que se define el servicio o el trabajo de Cloud Run que se creará:

      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
       name: dev
      description: development service
      run:
       location: projects/my-app/locations/us-central1

Puedes definir este destino dentro de una definición de canalización de entrega de Cloud Deploy o por separado. De cualquier manera, debes registrar el destino antes de crear la versión para implementar tu servicio o trabajo de Cloud Run.

Crea tu configuración de Skaffold

El siguiente es un archivo skaffold.yaml de ejemplo para una implementación de Cloud Run:

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: cloud-run-application
manifests:
  rawYaml:
  - service.yaml
deploy:
  cloudrun: {}

En este archivo skaffold.yaml...

  • manifests.rawYaml proporciona los nombres de las definiciones del servicio de Cloud Run.

    En este ejemplo, service.yaml es el archivo que define un servicio de Cloud Run que Skaffold implementará. Este nombre de archivo puede ser cualquier cosa, pero por convención es service.yaml para un servicio y job.yaml para un trabajo.

  • La estrofa deploy especifica cómo deseas que se implemente el manifiesto, en particular, el proyecto y la ubicación. El campo deploy es obligatorio.

    Te recomendamos que dejes el campo {} vacío. Cloud Deploy propaga esto durante el procesamiento, según el proyecto y la ubicación de la definición objetivo.

    Sin embargo, para el desarrollo local, puedes proporcionar valores aquí. Sin embargo, Cloud Deploy siempre usa el proyecto y la ubicación de la definición objetivo, independientemente de si los valores se proporcionan aquí.

Crea tus definiciones de servicio de Cloud Run

Para crear una definición de servicio de Cloud Run, puedes crear una de forma manual o copiar una de un servicio existente. Ambos se describen en esta sección.

Opción 1: Crea un nuevo service.yaml de Cloud Run

El archivo service.yaml define tu servicio de Cloud Run. Cuando creas una versión, Skaffold usa esta definición para implementar el servicio.

A continuación, te mostramos un ejemplo simplificado:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
 name: [SERVICE_NAME]
spec:
 template:
  spec:
   containers:
   - image: [IMAGE_PATH]

Aquí:

  • [SERVICE_NAME] es un nombre para este servicio de Cloud Run.

  • [IMAGE_PATH] apunta a las imágenes de contenedor que implementas con este servicio.

Opción 2: Copia un service.yaml de un servicio existente con la consola de Google Cloud

Puedes crear un servicio con la consola de Google Cloud o usar uno existente y copiar tu service.yaml desde allí.

Para obtener el service.yaml con Google Cloud CLI, sigue estos pasos:

gcloud run services describe [service_name] --format=export

Para obtener service.yaml de la consola de Google Cloud, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Servicios de Cloud Run.

  2. Selecciona el servicio existente cuya definición quieres usar.

También puedes crear una nueva y seleccionarla. Cuando seleccionas el servicio, se muestra la página Detalles del servicio:

Página de detalles del servicio de la consola de Google Cloud, en la que se muestra la pestaña YAML

  1. Selecciona la pestaña YAML.

  2. Haz clic en Edit y, luego, copia el contenido del YAML en un archivo nuevo llamado service.yaml en tu sistema de archivos, de modo que Skaffold pueda usarlo cuando crees una versión.

Crea las definiciones de tu trabajo de Cloud Run

Para implementar una definición de trabajo de Cloud Run, puedes crear una de forma manual o copiar una desde un trabajo existente. Ambos se describen en esta sección.

Ten en cuenta que los trabajos no siempre se ejecutan cuando se implementa en Cloud Deploy. Es diferente de los servicios, que ejecutan aplicaciones después de que se implementan. La forma en que se invoca un trabajo depende del trabajo en sí.

Opción 1: Crea un nuevo job.yaml de Cloud Run

El archivo job.yaml define tu trabajo de Cloud Run. Cuando creas una versión, Skaffold usa esta definición para implementar el trabajo.

A continuación, te mostramos un ejemplo simplificado:

apiVersion: run.googleapis.com/v1
kind: Job
metadata:
 name: [JOB_NAME]
spec:
  template:
  spec:
   containers:
   - image: [IMAGE_PATH]

Aquí:

  • [JOB_NAME] es un nombre para este trabajo de Cloud Run.

  • [IMAGE_PATH] apunta a la imagen de contenedor que estás implementando para este trabajo.

Opción 2: Copia un job.yaml de un trabajo existente con la consola de Google Cloud

Puedes crear un trabajo con la consola de Google Cloud o usar uno existente y copiar tu job.yaml desde allí.

Para obtener el job.yaml con Google Cloud CLI, sigue estos pasos:

gcloud run jobs describe [job_name] --format=export

Para obtener job.yaml de la consola de Google Cloud, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Trabajos de Cloud Run.

  2. Selecciona el trabajo existente cuya definición deseas usar.

También puedes crear una nueva y seleccionarla. Cuando seleccionas el trabajo, se muestra la página Detalles del trabajo:

Página de detalles del trabajo de la consola de Google Cloud, en la que se muestra la pestaña YAML

  1. Selecciona la pestaña YAML.

  2. Haz clic en Edit y, luego, copia el contenido del YAML en un archivo nuevo llamado job.yaml en tu sistema de archivos, de modo que Skaffold pueda usarlo cuando crees una versión.

Revisión general

Ahora que tienes la definición del trabajo o servicio de Cloud Run, la configuración de skaffold.yaml y la definición de destino de Cloud Deploy y registraste el destino como un recurso de Cloud Deploy, puedes invocar la canalización de entrega para crear una versión y hacer avanzar el progreso de los destinos definidos en la canalización.

En la guía de inicio rápido Implementa una app en Cloud Run mediante Cloud Deploy, se muestra todo esto en acción.

Comportamiento de los servicios en las revisiones

Cuando vuelves a implementar un servicio, la revisión nueva se basa en el service.yaml recién implementado. No se mantiene nada de la revisión anterior, a menos que sea igual en el YAML recién implementado. Por ejemplo, si hay parámetros de configuración o etiquetas en la revisión anterior que no están en el YAML nuevo, esa configuración o esas etiquetas no están en la revisión nueva.

Implementa servicios y trabajos de Cloud Run en varios proyectos

Si necesitas implementar servicios o trabajos en proyectos diferentes, la cuenta de servicio de ejecución necesita permiso para acceder a los proyectos en los que se definen esos servicios o trabajos.

Consulta Cuenta de servicio de ejecución de Cloud Deploy y Funciones y permisos de Identity and Access Management para obtener más información.

¿Qué sigue?