Implementa en Cloud Run

En esta página se explica cómo implementar automáticamente los servicios de Cloud Run mediante Cloud Build. Si estás dando los primeros pasos en Cloud Build, lee primero las guías de inicio rápido y la descripción general de la configuración de compilación.

Cloud Run es una plataforma informática administrada que te permite ejecutar contenedores sin estado en un entorno sin servidores. Usa Cloud Build para implementar imágenes de contenedor desde Container Registry y Artifact Registry en Cloud Run. Puedes implementar una imagen existente, compilar y, luego, implementar una imagen, o automatizar la implementación.

Para obtener más información sobre Cloud Run, lee la documentación de Cloud Run.

Antes de comenzar

  • Habilita las API de Cloud Build, Cloud Run, Container Registry, and Resource Manager.

    Habilita las API

Permisos de IAM obligatorios

Si la imagen está almacenada en el proyecto de Cloud en el que deseas implementar o si es pública en Container Registry, necesitarás los siguientes permisos de IAM:

Administración total

Para implementar en Cloud Run (completamente administrado), otorga las funciones de administrador de Cloud Run y usuario de cuenta de servicio a la cuenta de servicio de Cloud Build:

  1. Abre la página Configuración de Cloud Build en Cloud Console:

    Ve a la página de configuración de Cloud Build

  2. En el panel Permisos de la cuenta de servicio (Service account permissions), establece el estado de la función de administrador de Cloud Run en HABILITADO:

    Captura de pantalla de la página Permisos de la cuenta de servicio

  3. En la ventana emergente Es posible que se requieran pasos adicionales, haz clic en OTORGAR ACCESO A TODAS LAS CUENTAS DE SERVICIO.

Anthos en Google Cloud

Para implementar en Cloud Run for Anthos, otorga la función de desarrollador de Kubernetes Engine a la cuenta de servicio de Cloud Build:

  1. Abre la página Configuración de Cloud Build en Cloud Console:

    Ve a la página de configuración de Cloud Build

  2. En el panel Permisos de la cuenta de servicio (Service account permissions), establece el estado de la función de desarrollador de Kubernetes Engine en HABILITADO:

    Captura de pantalla de la página Permisos de la cuenta de servicio

Si la imagen se almacena en un proyecto de Cloud distinto de aquel en el que deseas implementar, necesitarás permisos de IAM adicionales, como se describe en Implementa imágenes de otros proyectos de GCP.

Compila e implementa un contenedor

Cloud Build te permite compilar la imagen del contenedor, almacenar en Container Registry la imagen compilada y, luego, implementar la imagen en Cloud Run.

Para compilar y, luego, implementar una imagen de contenedor, haz lo siguiente:

  1. En el directorio raíz del proyecto, crea un archivo de configuración llamado cloudbuild.yaml.

  2. En el archivo de configuración de compilación, agrega pasos de compilación docker para compilar la imagen y enviarla a Container Registry y, luego, agrega un paso de compilación de gcloud para invocar el comando gcloud run deploy a fin de implementar la imagen en Cloud Run:

    Administración total

    steps:
    # Build the container image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
    # Push the container image to Container Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
    # Deploy container image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE-NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--region', 'REGION', '--platform', 'managed']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    Aquí:

    • SERVICE-NAME es el nombre del servicio de Cloud Run.
    • REGION es la región del servicio de Cloud Run que estás implementando.
    • PROJECT_ID es el ID del proyecto de Google Cloud en el que se almacena la imagen.
    • IMAGE es el nombre de tu imagen en Container Registry.

    Anthos en Google Cloud

    steps:
    # Build the container image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
    # Push the container image to Container Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
    # Deploy container image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE-NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--cluster', 'CLUSTER', '--cluster-location', 'CLUSTER_LOCATION', '--platform', 'gke']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    Aquí:

    • SERVICE-NAME es el nombre del servicio de Cloud Run.
    • CLUSTER es el nombre de tu clúster de Cloud Run for Anthos en Google Cloud.
    • CLUSTER_LOCATION es la ubicación de tu clúster de Cloud Run for Anthos en Google Cloud.
    • PROJECT_ID es el ID del proyecto de Google Cloud en el que se almacena la imagen.
    • IMAGE es el nombre de tu imagen en Container Registry.
  3. Navega al directorio raíz de tu proyecto y ejecuta lo siguiente:

     gcloud builds submit
    

Después de que la compilación se completa correctamente, se muestra un mensaje junto con la URL del servicio implementado.

Implementación continua

Puedes automatizar la implementación de tu software en Cloud Run mediante la creación de activadores de Cloud Build. Puedes configurar tus activadores para compilar y, luego, implementar imágenes cada vez que actualices tu código fuente.

Para automatizar tu implementación en Cloud Run, haz lo siguiente:

  1. En la raíz del repositorio, agrega un archivo de configuración con los pasos necesarios para compilar la imagen y enviarla a Container Registry y, luego, invoca el comando gcloud run deploy:

    Administración total

     steps:
     # Build the container image
     - name: 'gcr.io/cloud-builders/docker'
       args: ['build', '-t', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA', '.']
     # Push the container image to Container Registry
     - name: 'gcr.io/cloud-builders/docker'
       args: ['push', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA']
     # Deploy container image to Cloud Run
     - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
       entrypoint: gcloud
       args:
       - 'run'
       - 'deploy'
       - 'SERVICE-NAME'
       - '--image'
       - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
       - '--region'
       - 'REGION'
       - '--platform'
       - 'managed'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    Aquí:

    • SERVICE-NAME es el nombre del servicio de Cloud Run.
    • REGION es la región del servicio de Cloud Run que estás implementando.

    Anthos en Google Cloud

     steps:
     # build the container image
     - name: 'gcr.io/cloud-builders/docker'
       args: ['build', '-t', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA', '.']
     # push the container image to Container Registry
     - name: 'gcr.io/cloud-builders/docker'
       args: ['push', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA']
     # Deploy container image to Cloud Run
     - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
       entrypoint: gcloud
       args:
       - 'run'
       - 'deploy'
       - 'SERVICE-NAME'
       - '--image'
       - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
       - '--cluster'
       - 'CLUSTER'
       - '--cluster-location'
       - 'CLUSTER_LOCATION'
       - '--platform'
       - 'gke'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    Aquí:

    • SERVICE-NAME es el nombre del servicio de Cloud Run.
    • CLUSTER es el nombre de tu clúster de Cloud Run for Anthos en Google Cloud.
    • CLUSTER_LOCATION es la ubicación de tu clúster de Cloud Run for Anthos en Google Cloud.

    Cloud Build propaga el uso de la variable de reemplazo $COMMIT_SHA cuando se activa desde un repositorio de Git.

  2. Crea un activador de compilación con el archivo de configuración generado en el paso anterior:

    1. Abrir la página Activadores:

      Ir a la página Activadores

    2. Haz clic en Crear activador.

    3. En el campo Nombre, ingresa un nombre para el activador.

    4. En Evento, selecciona el evento del repositorio para iniciar el activador.

    5. En Fuente, selecciona el repositorio y el nombre de la rama o de la etiqueta que iniciará el activador. Para obtener más información sobre cómo especificar qué ramas se deben compilar de manera automática, consulta Crea un activador de compilación.

    6. En Configuración de compilación, selecciona Archivo de configuración de Cloud Build.

    7. En el campo Ubicación del archivo de configuración de Cloud Build, escribe cloudbuild.yaml después de /.

    8. Haz clic en Crear para guardar el activador de compilación.

  3. Ya terminaste. A partir de ahora, cada vez que hagas envíos al repositorio, se invocarán de forma automática una compilación y una implementación en tu servicio de Cloud Run.

Cada vez que envíes código nuevo a tu repositorio, se activará automáticamente una compilación y una implementación en tu servicio de Cloud Run.

Para obtener más información sobre cómo crear activadores de Cloud Build, consulta Crea y administra activadores de compilación.

Usa permisos mínimos de IAM

Cuando un contenedor se implementa en un servicio de Cloud Run (completamente administrado), se ejecuta con la identidad de la cuenta de servicio del entorno de ejecución de este servicio de Cloud Run (completamente administrado). Debido a que Cloud Build puede implementar contenedores nuevos de forma automática, Cloud Build debe poder actuar como la cuenta de servicio del entorno de ejecución del servicio de Cloud Run (completamente administrado).

A fin de otorgar acceso limitado a Cloud Build para implementar en un servicio de Cloud Run (completamente administrado), sigue estos pasos:

Console

  1. Ve a la página Cuentas de servicio de Google Cloud Console.

    Ir a Cuentas de servicio

  2. Selecciona la cuenta de servicio del entorno de ejecución del servicio de Cloud Run (completamente administrado) que, de forma predeterminada, es PROJECT_NUMBER-compute@developer.gserviceaccount.com.

  3. Haz clic en Mostrar panel de información, en la esquina superior derecha, para que aparezca la pestaña Permisos.

  4. Haz clic en el botón Agregar miembro.

  5. Ingresa la cuenta de servicio de Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com).

  6. En el menú desplegable Seleccionar una función, selecciona la función Cuentas de servicio > Usuario de cuenta de servicio.

  7. Haga clic en Save.

gcloud

Usa el comando gcloud iam service-accounts add-iam-policy-binding, en el que PROJECT_NUMBER es el ID numérico de tu proyecto:

gcloud iam service-accounts add-iam-policy-binding \
  PROJECT_NUMBER-compute@developer.gserviceaccount.com \
  --member="serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

Reemplaza PROJECT_NUMBER por el ID del proyecto.

Si usas Cloud Run (completamente administrado) con una identidad de servicio personalizada, reemplaza PROJECT_NUMBER-compute@developer.gserviceaccount.com por la dirección de la cuenta de servicio.

Consulta Permisos de implementación para obtener más información.

Ejemplos de código

Estos son algunos repositorios de muestra. Cada uno contiene una aplicación de muestra y un archivo de configuración de compilación para implementar la aplicación en Cloud Run:

  • run-example-deploy-prebuilt: Un ejemplo de código con el que se muestra cómo implementar una imagen ya compilada en Cloud Run.
  • run-example-builddeploy: Un ejemplo de código con el que se muestra cómo compilar y, también, implementar una imagen en Cloud Run.

Próximos pasos