Cloud Run te permite ejecutar contenedores sin estado en un sin servidores. Con Cloud Build, puedes implementar imágenes de contenedor desde Cloud Build Container Registry (obsoleto) y Artifact Registry para Cloud Run. Puede implementar una imagen existente, compilar e implementar una imagen o automatizar la implementación.
Antes de comenzar
-
Habilita las API de Cloud Build, Cloud Run, Container Registry, and Resource Manager.
Ten preparado el código fuente de la aplicación. El código fuente debe almacenarse en un repositorio, como Cloud Source Repositories, GitHub o Bitbucket.
Para ejecutar los comandos de
gcloud
en esta página, instala Google Cloud CLI.
Permisos de IAM obligatorios
Si tu imagen está almacenada en el mismo proyecto de Google Cloud en el que quieres realizar la implementación o si la imagen es pública En Container Registry, necesitas los siguientes permisos de IAM:
Para implementar en Cloud Run, otorga al administrador de Cloud Run y roles de usuario de cuenta de servicio a la cuenta de servicio que estás usando para la compilación:
Abre la página de configuración de Cloud Storage en la consola de Google Cloud:
En la lista desplegable, selecciona la cuenta de servicio cuyos roles deseas cambio.
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:
En la ventana emergente Es posible que se requieran pasos adicionales, haz clic en OTORGAR ACCESO A TODAS LAS CUENTAS DE SERVICIO.
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:
En el directorio raíz del proyecto, crea un archivo de configuración llamado
cloudbuild.yaml
.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 degcloud
para invocar el comandogcloud run deploy
a fin de implementar la imagen en Cloud Run: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', 'SERVICE_REGION'] images: - gcr.io/PROJECT_ID/IMAGE
Aquí:
SERVICE_NAME
es el nombre del servicio de Cloud Run.SERVICE_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.
Navega al directorio raíz de tu proyecto y ejecuta el siguiente comando, donde
BUILD_REGION
es una de las regiones de compilación compatibles. para ejecutar la compilación:gcloud builds submit --region=BUILD_REGION
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 la creación de activadores de Cloud Build. Puedes configurar tus activadores para compilar e implementar imágenes cada vez que actualices código fuente.
Para automatizar tu implementación, sigue estos pasos:
En la raíz de tu repositorio, agrega un archivo de configuración llamado
cloudbuild.yaml
con pasos para compilar la imagen, enviarla a Container Registry y, luego, Invoca el comandogcloud run deploy
: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' - 'SERVICE_REGION' images: - 'gcr.io/$PROJECT_ID/SERVICE_NAME:$COMMIT_SHA'
Aquí:
SERVICE_NAME
es el nombre del servicio de Cloud Run.SERVICE_REGION
es la región del servicio de Cloud Run que estás implementando.
Cloud Build propaga el uso de la variable de reemplazo
$COMMIT_SHA
cuando se activa desde un repositorio de Git.Crear un activador de compilación con el archivo de configuración creado en el pasado paso:
Abrir la página Activadores:
Haz clic en Crear activador.
En el campo Nombre, ingresa un nombre para el activador.
En Región, selecciona la región para tu activador.
En Evento, selecciona el evento del repositorio para iniciar el activador.
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.
En Configuración, selecciona Cloud Build. de configuración YAML (YAML o JSON).
En el campo Ubicación del archivo de configuración de Cloud Build, escribe
cloudbuild.yaml
después de/
.Haz clic en Crear para guardar el activador de compilación.
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.
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, se ejecuta con la identidad de la cuenta de servicio del entorno de ejecución de este servicio de Cloud Run. 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.
A fin de otorgar acceso limitado a Cloud Build para implementar en un servicio de Cloud Run, sigue estos pasos:
Console
Ve a la página Cuentas de servicio de la consola de Google Cloud:
Haz clic en la dirección de Cloud Run electrónico de la cuenta de servicio del entorno de ejecución (de forma predeterminada, es
PROJECT_NUMBER-compute@developer.gserviceaccount.com
).Haz clic en la pestaña Permisos.
Haz clic en
Grant access.Ingresa la cuenta de servicio de Cloud Build (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
).En el menú desplegable Seleccionar un rol, selecciona la función Cuentas de servicio > Usuario de cuenta de servicio.
Haz clic en Guardar.
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 mediante 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:
- deploy-prebuilt: Un ejemplo de código en el que se muestra cómo implementar una imagen precompilada 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.
¿Qué sigue?
- Aprende a usar Cloud Deploy para implementar en Cloud Run.
- Consulta Implementa en GKE.
- Consulta Implementa en Cloud Functions.
- Consulta Implementa en App Engine.
- Consulta Implementa en Firebase.
- Aprende a realizar implementaciones azul-verde en Compute Engine.
- Obtén más información para solucionar errores de compilación.