Desplegar un servicio o un trabajo de Cloud Run

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

Cloud Deploy te permite desplegar tus cargas de trabajo basadas en contenedores en cualquier servicio de Cloud Run o trabajo. Todas las funciones de Cloud Deploy se admiten cuando se implementan en destinos de Cloud Run para servicios de Cloud Run, pero las implementaciones canarias no se admiten en las tareas de Cloud Run.

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

Limitaciones

Antes de empezar

Crea la configuración de destino

El destino se puede configurar en el archivo YAML de tu canal de distribución o en un archivo independiente. Además, puedes configurar más de un destino en el mismo archivo.

Los destinos deben definirse en el mismo proyecto y región que el flujo de procesamiento de entrega. Sin embargo, los servicios o los trabajos en los que se implementan los destinos pueden estar en proyectos y regiones diferentes, siempre que la cuenta de servicio tenga acceso a esos proyectos.

En la definición de destino, crea una sección 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 de destino es la siguiente:

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

Este identificador de recurso utiliza los siguientes elementos:

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

    Deberás hacerlo con cada objetivo. Te recomendamos que uses 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 perfiles de Skaffold en tu archivo de configuración skaffold.yaml.

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

A continuación, se muestra un ejemplo de configuración de destino que define el servicio o el trabajo de Cloud Run que se va a 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 en una definición de flujo de procesamiento de entrega de Cloud Deploy o por separado. De cualquier forma, debes registrar el destino antes de crear la versión para desplegar tu servicio o trabajo de Cloud Run.

Crear la configuración de Skaffold

A continuación, se muestra un ejemplo de archivo skaffold.yaml para un despliegue 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 de servicio de Cloud Run.

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

  • La sección deploy especifica cómo quieres que se implemente el manifiesto, concretamente, el proyecto y la ubicación. El campo deploy es obligatorio.

    Te recomendamos que dejes el {} vacío. Cloud Deploy rellena este campo durante el renderizado, en función del proyecto y la ubicación de la definición de destino.

    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 de destino, independientemente de si se proporcionan valores aquí.

Crear las definiciones de servicio de Cloud Run

Para crear una definición de servicio de Cloud Run, puedes crear una manualmente o copiarla de un servicio que ya tengas. Ambos se describen en esta sección.

Opción 1: Crear un Cloud Run service.yaml

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

Aquí tienes un ejemplo simplificado:

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

Donde:

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

  • [IMAGE_PATH] apunta a la imagen o imágenes de contenedor que vas a desplegar con este servicio.

Opción 2: Copiar un service.yaml de un servicio que ya tengas mediante la consola Google Cloud

Puedes crear un servicio con la consola de Google Cloud o usar uno que ya tengas y copiar tu service.yaml desde ahí.

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

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

Para obtener el service.yaml desde la consola Google Cloud :

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

  2. Selecciona el servicio cuya definición quieras usar.

También puedes crear uno y seleccionarlo. Cuando selecciones el servicio, se mostrará la página Detalles del servicio:

Página de detalles del servicio
ConsolaGoogle Cloud , que muestra la pestaña YAML

  1. Selecciona la pestaña YAML.

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

Crear definiciones de trabajos de Cloud Run

Para implementar una definición de tarea de Cloud Run, puedes crear una manualmente o copiarla de una tarea que ya tengas. Ambos se describen en esta sección.

Ten en cuenta que los trabajos no se ejecutan necesariamente cuando Cloud Deploy los implementa. Esto es diferente de los servicios, que son aplicaciones que se ejecutan después de implementarse. La forma de invocar un trabajo depende del propio trabajo.

Opción 1: Crear un Cloud Run job.yaml

El archivo job.yaml define tu tarea de Cloud Run. Cuando creas un lanzamiento, Skaffold usa esta definición para desplegar el trabajo.

Aquí tienes un ejemplo simplificado:

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

Donde:

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

  • [IMAGE_PATH] apunta a la imagen de contenedor que vas a desplegar para este trabajo.

Opción 2: Copiar un job.yaml de un trabajo que ya tengas con la consola Google Cloud

Puedes crear un trabajo con la Google Cloud consola o usar uno que ya tengas y copiar tu job.yaml desde ahí.

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

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

Para obtener el job.yaml desde la consola Google Cloud :

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

  2. Selecciona el trabajo cuyo archivo de definición quieras usar.

También puedes crear uno y seleccionarlo. Cuando selecciones el trabajo, se mostrará la página Detalles del trabajo:

Página de detalles del trabajo
 consolaGoogle Cloud , que muestra la pestaña YAML

  1. Selecciona la pestaña YAML.

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

Visión de conjunto

Ahora que tienes la definición de tu servicio o trabajo de Cloud Run, tu configuración de skaffold.yaml y tu definición de destino de Cloud Deploy, y que has registrado tu destino como recurso de Cloud Deploy, puedes invocar tu flujo de procesamiento de entrega para crear una versión y hacer que avance por la progresión de los destinos definidos en el flujo de procesamiento.

En la guía de inicio rápido Desplegar una aplicación en Cloud Run con Cloud Deploy se muestra todo esto en acción.

Comportamiento de los servicios en las distintas revisiones

Cuando vuelves a implementar un servicio, la nueva revisión se basa en el service.yaml recién implementado. No se mantiene nada de la revisión anterior, a menos que sea lo mismo en el archivo YAML recién implementado. Por ejemplo, si hay ajustes de configuración o etiquetas en la revisión anterior que no están en el nuevo archivo YAML, esos ajustes o etiquetas no estarán en la nueva revisión.

Activar tareas de Cloud Run

Una vez que hayas desplegado una tarea, podrás activarla tal como se describe en la documentación de Cloud Run.

Desplegar servicios y trabajos de Cloud Run en varios proyectos

Si necesitas desplegar servicios o trabajos que estén en proyectos diferentes, tu cuenta de servicio de ejecución debe tener permiso para acceder a los proyectos en los que se definan esos servicios o trabajos.

Para obtener más información, consulta Cuenta de servicio de ejecución de Cloud Deploy y Roles y permisos de Gestión de Identidades y Accesos.

Desplegar funciones de Cloud Run

Cloud Run Functions compila el código fuente cada vez que se implementa una función. Por este motivo, cada tiempo de ejecución de destino de tu canalización puede obtener un artefacto ligeramente diferente. Esto no sigue las prácticas recomendadas de Cloud Deploy. En su lugar, te recomendamos que uses un servicio de Cloud Run directamente. De esta forma, puedes crear un solo artefacto y promocionarlo en todos tus entornos.

  1. Consulta la service.yaml de tu función de Cloud Run.

    Para obtenerlo, ejecuta el siguiente comando:

    gcloud run services describe FUNCTION_NAME \
    --format=export \
    --region=REGION \
    --project=PROJECT
    
  2. Elimina las siguientes anotaciones, si las hay:

    • run.googleapis.com/build-base-image
    • run.googleapis.com/build-name
    • run.googleapis.com/build-source-location
    • run.googleapis.com/build-enable-automatic-updates
  3. Sustituye el valor de spec.spec.containers.image por IMAGE_TAG.

  4. Crea tu pipeline de entrega y tus destinos, con el servicio de Cloud Run como destino.

  5. Separa el paso de compilación del paso de implementación en tu proceso de integración continua. En lugar de usar Google Cloud CLI para desplegar tu función, sigue estos pasos:

    1. Crea la función en un contenedor con Cloud Build:

      gcloud builds submit --pack image=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME \
      --project=PROJECT \
      --region=REGION
      
    2. Crea una versión con Cloud Deploy:

      gcloud deploy releases create RELEASE_NAME \
      --project=DEPLOY_PROJECT \
      --region=REGION \
      --delivery-pipeline=DELIVERY_PIPELINE
      --images=IMAGE_TAG=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME
      

      En este comando:

      • RELEASE_NAME es el nombre que se le asigna a esta versión. El nombre debe ser único entre todas las versiones de esta canalización de entrega.

      • DEPLOY_PROJECT es el ID del proyecto en el que has creado la canalización de implementación.

      • DELIVERY_PIPELINE es el nombre de la canalización de entrega que gestionará la implementación de esta versión a través de la progresión de los objetivos. Este nombre debe coincidir con el campo name de la definición de la canalización.

      • REGION es el nombre de la región en la que vas a crear la versión (por ejemplo, us-central1). Este campo es obligatorio.

      • IMAGE_NAME es el nombre que le has dado a la imagen en el paso anterior, cuando has creado la función.

Siguientes pasos