Cloud Run te permite especificar qué revisiones deben recibir tráfico y los porcentajes de tráfico que recibe una revisión. Esta función te permite restaurar una revisión anterior, implementar una revisión gradualmente y dividir el tráfico entre varias revisiones. En esta página se describe cómo usar esta función para gestionar el tráfico de tus revisiones de Cloud Run.
Ten en cuenta que los ajustes de enrutamiento del tráfico no son instantáneos. Cuando cambies el tráfico de las revisiones, todas las solicitudes que se estén procesando se completarán. Las solicitudes en curso no se descartarán y podrán dirigirse a una revisión nueva o a una anterior durante el periodo de transición.
División del tráfico y afinidad de sesión
Si vas a dividir el tráfico entre varias revisiones con la afinidad de sesión habilitada, consulta Afinidad de sesión y división del tráfico para obtener información sobre el efecto de la afinidad de sesión en la división del tráfico.
Ciclo de vida de las divisiones del tráfico
Si divides el tráfico entre varias revisiones o asignas tráfico a una revisión anterior, todas las implementaciones posteriores usarán ese patrón de división del tráfico. Para volver a usar solo la última revisión sin dividir el tráfico, envía todo el tráfico a la última revisión.
Roles obligatorios
Para obtener los permisos que necesitas para gestionar servicios y revisiones de Cloud Run, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
- Si gestionas un servicio que se ha desplegado desde una imagen de contenedor, haz lo siguiente:
- Desarrollador de Cloud Run
(
roles/run.developer
) en el servicio Cloud Run - Usuario de cuenta de servicio
(
roles/iam.serviceAccountUser
) en la identidad de servicio - Lector de Artifact Registry
(
roles/artifactregistry.reader
) en el repositorio de Artifact Registry de las imágenes de contenedor del servicio (si procede)
- Desarrollador de Cloud Run
(
- Si gestionas un servicio que se ha desplegado desde el código fuente, haz lo siguiente:
- Desarrollador de fuentes de Cloud Run
(
roles/run.sourceDeveloper
) en tu proyecto - Consumidor de Uso de Servicio
(
roles/serviceusage.serviceUsageConsumer
) en tu proyecto - Usuario de cuenta de servicio
(
roles/iam.serviceAccountUser
) en la identidad de servicio - Además, asigna el rol Compilador de Cloud Run (
roles/run.builder
) a la cuenta de servicio de Cloud Build en el proyecto. La cuenta de servicio de compilación es la responsable de compilar tu servicio y, de forma predeterminada, es la cuenta de servicio predeterminada de Compute Engine.
- Desarrollador de fuentes de Cloud Run
(
Para ver una lista de los roles y permisos de gestión de identidades y accesos asociados a Cloud Run, consulta los artículos sobre roles de gestión de identidades y accesos de Cloud Run y permisos de gestión de identidades y accesos de Cloud Run. Si tu servicio de Cloud Run interactúa con APIs, como las bibliotecas de cliente de Cloud, consulta la guía de configuración de la identidad del servicio.Google Cloud Para obtener más información sobre cómo conceder roles, consulta los artículos sobre permisos de implementación y gestión del acceso.
Restaurar una revisión anterior
Para volver a una revisión anterior, sigue estos pasos:
Consola
En la Google Cloud consola, ve a Cloud Run:
Busca el servicio en la lista de servicios y haz clic en él.
Haga clic en la pestaña Revisiones para ver la lista de revisiones actuales de ese servicio.
En la lista de revisiones, haga clic en el icono de los tres puntos situado a la derecha de la revisión a la que quiera volver:
Haga clic en Gestionar tráfico para mostrar el formulario de gestión de tráfico:
- En la lista desplegable, selecciona la revisión anterior a la que quieras volver.
- Asigna el 100 % del tráfico a esa revisión anterior.
- Asigna el 0 % a la revisión que se está sirviendo.
- Haz clic en Guardar.
gcloud
Usa el siguiente comando:
gcloud run services update-traffic SERVICE --to-revisions REVISION=100
- Sustituye SERVICE por el nombre del servicio.
- Sustituye REVISION por el nombre de la revisión a la que quieres volver.
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Debajo del atributo
spec
, busca el atributotraffic
y actualízalo con el siguiente valor:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION percent: 100
Sustituir
- REVISION con el nombre de la revisión a la que quieres volver.
Sustituye el servicio por su nueva configuración con el siguiente comando:
gcloud run services replace service.yaml
Espera a que se complete la actualización. Debería aparecer un mensaje que indique que la revisión de la que estás revirtiendo se ha implementado y está publicando el
0
% del tráfico.
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Añade lo siguiente a un recursogoogle_cloud_run_v2_service
en tu configuración de Terraform:Lanzamiento gradual de revisiones
Para lanzar una revisión nueva de forma gradual, sigue estos pasos:
Consola
En la Google Cloud consola, ve a Cloud Run:
Selecciona un servicio de la lista.
Haz clic en Desplegar nueva revisión.
Rellena el formulario de implementación según sea necesario, pero asegúrate de que la casilla Servir esta revisión de inmediato NO esté marcada.
Haz clic en Desplegar.
Haz clic en Gestionar tráfico.
La nueva revisión aparece en la lista, pero con un porcentaje del 0 %: actualmente no está sirviendo tráfico. En el formulario:
- Establece el porcentaje que quieras; por ejemplo, 5. Ten en cuenta que el porcentaje de la versión que se está publicando se reduce automáticamente en la misma cantidad.
- Haz clic en Guardar.
- Repite los pasos de Gestionar tráfico, pero con porcentajes diferentes. Aumenta el porcentaje según sea necesario para la nueva revisión. No es necesario volver a implementar para cambiar los porcentajes de tráfico.
gcloud
Para desplegar un servicio a partir de una imagen de contenedor, sigue estos pasos:
Implementa la revisión que quieras lanzar gradualmente. Para ello, al principio, haz que no reciba tráfico:
Para desplegar un servicio desde el código fuente, sigue estos pasos:
gcloud run deploy --image IMAGE --no-traffic
Sustituye IMAGE por la imagen que vas a implementar.
Para desplegar un servicio desde el código fuente, sigue estos pasos:
gcloud run deploy SERVICE --source . --no-traffic
Sustituye SERVICE por el nombre de tu servicio.
Especifique el porcentaje de tráfico que quiere que gestione la nueva revisión. Por ejemplo, el 5 %:
gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
- Sustituye SERVICE por el nombre del servicio.
- Sustituye REVISION por el nombre de la revisión que vas a implementar gradualmente. Para especificar la revisión más reciente, puedes usar
LATEST
, por ejemplo,LATEST=5
. - Sustituye PERCENTAGE por el porcentaje de tráfico que quieras enviar a la nueva revisión (por ejemplo,
5
para enviarle el 5% del tráfico).
Cuando el rendimiento de la revisión sea satisfactorio, repita el paso anterior, pero aumente el valor del porcentaje según lo desee.
update-traffic
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Haz los cambios de configuración que quieras en el servicio y especifica el nombre de revisión que quieras para la nueva revisión:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: ... name: REVISION-NAME
Sustituir
- REVISION-NAME con el nombre que quieras que tenga la nueva revisión.
Debajo del atributo
spec
, busque y actualice el atributotraffic
para que la nueva revisión solo sirva una pequeña cantidad de tráfico:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION-NEW percent: PERCENT-NEW - revisionName: REVISION-FORMER percent: PERCENT-FORMER
Ten en cuenta que los porcentajes deben sumar 100. Sustituir
- REVISION-NEW con el nombre de la revisión que vas a lanzar de forma gradual.
- REVISION-FORMER con el nombre de la revisión que se está publicando.
- PERCENT-NEW con el porcentaje de tráfico que quiera enviar a la nueva revisión. Por ejemplo, use
10
para enviar el 10% del tráfico a esa revisión. - PERCENT-FORMER con el porcentaje de tráfico que quieras enviar a la revisión antigua
Espera a que se complete la actualización: deberías ver un mensaje que indique que la nueva revisión que estás implementando gradualmente se ha desplegado y está sirviendo el valor del porcentaje de tráfico que has usado.
Terraform
Añade lo siguiente a tu archivo .tf
y actualiza gradualmente el porcentaje de tráfico de la revisión anterior a la última revisión.
Ten en cuenta que cada cambio de tráfico requerirá que se ejecute otro terraform apply
.
Para aplicar los cambios, introduce terraform apply
.
Dividir el tráfico entre varias revisiones
Para dividir el tráfico entre dos o más revisiones, sigue estos pasos:
Consola
En la Google Cloud consola, ve a Cloud Run:
Busca el servicio en la lista de servicios y haz clic en él.
Haz clic en Gestionar tráfico.
Se muestra la nueva revisión que se está publicando. En el formulario:
- Define el porcentaje de la revisión que se está sirviendo actualmente para conseguir la división que quieras.
- Selecciona una de las revisiones anteriores en la lista desplegable y asigna el porcentaje que quieras.
- Para dividir el tráfico entre más revisiones, haz clic en Añadir revisión, selecciona la revisión que quieras y define el porcentaje de división.
- Haz clic en Guardar.
gcloud
Especifique las revisiones y el porcentaje de tráfico de cada revisión en una lista delimitada por comas:
gcloud run services update-traffic SERVICE --to-revisions LIST
- Sustituye SERVICE por el nombre del servicio.
- Sustituye LIST por una lista de revisiones y porcentajes separados por comas:
REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEx
Por ejemplo,hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50
.
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Debajo del atributo
spec
, busque y actualice el atributotraffic
para que la nueva revisión solo sirva una pequeña cantidad de tráfico:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION-A percent: PERCENT-A - revisionName: REVISION-B percent: PERCENT-B - revisionName: REVISION-C percent: PERCENT-C
Ten en cuenta que los porcentajes deben sumar 100. Sustituir
- REVISION-A, REVISION-B y REVISION-C con las revisiones a las que asignas tráfico.
- PERCENT-A, PERCENT-B y PERCENT-C con el porcentaje de la revisión correspondiente.
Sustituye el servicio por su nueva configuración con el siguiente comando:
gcloud run services replace service.yaml
Espera a que se complete la actualización. Deberías ver un mensaje que indique que la nueva revisión que estás implementando gradualmente se ha desplegado y está atendiendo el
5
% (o el valor gradual que hayas usado) del tráfico.
Terraform
Añade lo siguiente a tu archivo .tf
:
Para aplicar los cambios, introduce terraform apply
.
Enviar todo el tráfico a la última revisión
Cuando despliegues una revisión nueva, puedes hacer que esta revisión y todas las futuras sirvan el 100% del tráfico lo antes posible, lo que anulará cualquier división de tráfico establecida:
Consola
En la Google Cloud consola, ve a Cloud Run:
Busca el servicio en la lista de servicios y haz clic en él.
Haz clic en Desplegar nueva revisión.
Rellena el formulario de implementación según sea necesario y asegúrate de marcar la casilla Servir esta revisión de inmediato. De esta forma, se anulará cualquier división de tráfico que se haya creado y la nueva revisión servirá el 100 % del tráfico.
Haz clic en Desplegar.
gcloud
Para enviar todo el tráfico a la revisión implementada más recientemente, sigue estos pasos:
gcloud run services update-traffic SERVICE --to-latest
Sustituye SERVICE por el nombre del servicio.
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Debajo del atributo
spec
, busca el atributotraffic
y actualízalo con el siguiente valor:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - latestRevision: true percent: 100
Sustituye el servicio por su nueva configuración con el siguiente comando:
gcloud run services replace service.yaml
Espera a que se complete la actualización. Debería aparecer un mensaje que indique que se ha implementado la revisión (más reciente) y que está sirviendo el
100
% del tráfico.
Terraform
Añade lo siguiente a tu archivo .tf
:
Para aplicar los cambios, introduce terraform apply
.
Usar etiquetas para hacer pruebas, migrar tráfico y restaurar versiones
Para evitar incurrir en costes de facturación por las revisiones etiquetadas, usa instancias mínimas a nivel de servicio o elimina las etiquetas de las revisiones cuando ya no las necesites.
Un caso práctico habitual de esta función es usarla para probar y verificar una revisión de un servicio nuevo antes de que sirva tráfico, siguiendo esta secuencia típica:
- Ejecuta pruebas de integración en un contenedor durante el desarrollo.
- Implementa el contenedor en un Google Cloud proyecto que solo uses para las pruebas, que no sirva tráfico y que se pruebe con una revisión etiquetada.
- Implementarla en producción sin servir tráfico y probarla con una revisión etiquetada en producción.
- Migra el tráfico a la revisión etiquetada.
Desplegar una nueva revisión etiquetada
Para desplegar una nueva revisión de un servicio en producción, sigue estos pasos:
gcloud
Para desplegar una nueva revisión etiquetada a partir de una imagen de contenedor, sigue estos pasos:
gcloud run deploy myservice --image IMAGE_URL --no-traffic --tag TAG_NAME
Sustituye:
- IMAGE_URL con la URL de la imagen.
- TAG_NAME con el nombre de la etiqueta en minúsculas.
Para desplegar un servicio desde el código fuente, sigue estos pasos:
gcloud run deploy myservice --source . --no-traffic --tag TAG_NAME
Sustituye TAG_NAME por el nombre de la etiqueta en minúsculas.
La etiqueta te permite probar directamente la nueva revisión en una URL específica sin servir tráfico. La URL empieza por el nombre de la etiqueta que has proporcionado. Por ejemplo, si has usado el nombre de etiqueta green
en el servicio myservice
, probarías la revisión etiquetada en la URL https://green---myservice-abcdef.a.run.app
.
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Debajo del atributo
traffic
, busque y actualice el atributotag
que corresponda a la revisión a la que quiera añadir una etiqueta:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION percent: 100 - revisionName: REVISION-A tag: TAG-A - revisionName: REVISION-B tag: TAG-B - revisionName: REVISION-C tag: TAG-C
Sustituye:
- TAG-A, TAG-B y TAG-C con la etiqueta asociada a cada revisión.
- REVISION con el nombre de una revisión que ya tengas y a la que quieras enviar todo el tráfico.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
Terraform
Añade lo siguiente a tu archivo .tf
y actualiza gradualmente el porcentaje de tráfico de la revisión antigua a la más reciente con la nueva etiqueta.
Ten en cuenta que cada cambio de tráfico requerirá que se ejecute otro terraform apply
.
Para aplicar los cambios, introduce terraform apply
.
Quitar una etiqueta
Para quitar una etiqueta de una revisión, sigue estos pasos:
Consola
En la Google Cloud consola, ve a Cloud Run:
Selecciona un servicio de la lista.
Ve a la sección Revisiones del servicio que quieras y selecciona la revisión de la que quieras quitar la etiqueta.
Coloca el cursor sobre la columna URLs de revisión (etiquetas) y haz clic en el icono del lápiz:
En el menú del cuadro de diálogo URLs de revisión, haga clic en el icono Papelera para quitar la etiqueta actual que se usa en su revisión.
Haz clic en Guardar.
gcloud
Para quitar una etiqueta de revisión:
gcloud run services update-traffic SERVICE --remove-tags TAG_NAME
Sustituir
- TAG_NAME con el nombre de la etiqueta a la que va a migrar el tráfico
- SERVICE con el nombre del servicio del que vas a quitar la etiqueta
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Haz los cambios de configuración que quieras en el servicio.
Debajo del atributo
spec
, busca y elimina el atributotag
de la revisión etiquetada:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION tag: TAG_NAME percent: PERCENT-NEW
Sustituye el servicio por su nueva configuración con el siguiente comando:
gcloud run services replace service.yaml
Terraform
Añade lo siguiente a tu archivo .tf
:
Para aplicar los cambios, introduce terraform apply
.
Migrar tráfico a una revisión etiquetada
Después de confirmar que la nueva revisión funciona correctamente, puedes empezar a migrar el tráfico a ella mediante la Google Cloud consola, la línea de comandos de gcloud, Terraform o un archivo YAML:
Consola
En la Google Cloud consola, ve a Cloud Run:
Busca el servicio en la lista de servicios y haz clic en él:
Selecciona la revisión etiquetada a la que quieras enviar tráfico:
Haz clic en Gestionar tráfico.
Busca el nombre de la revisión etiquetada: aparece en la lista, pero con un porcentaje del 0 %, ya que no está sirviendo tráfico. En el formulario Gestionar tráfico*:
- Establece el porcentaje que quieras; por ejemplo, 5. Ten en cuenta que el porcentaje de la versión que se está publicando se reduce automáticamente en la misma cantidad.
- Haz clic en Guardar.
- Durante un periodo de horas o días, según sea necesario, repite los pasos de Gestionar tráfico, pero con porcentajes modificados. Aumenta el porcentaje según sea necesario para la revisión etiquetada. No es necesario volver a implementar para cambiar los porcentajes de tráfico.
gcloud
Para migrar el tráfico a una etiqueta de revisión específica, sigue estos pasos:
gcloud run services update-traffic myservice --to-tags TAG_NAME=TRAFFIC_PERCENT
Sustituir
- TAG_NAME con el nombre de la etiqueta a la que va a migrar el tráfico
- TRAFFIC_PERCENT con el porcentaje de tráfico que quiera que sirva la revisión etiquetada. Por ejemplo,
1
.
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Haz los cambios de configuración que quieras en el servicio.
Debajo del atributo
spec
, busque y actualice el atributotraffic
de la revisión etiquetada para que esta solo sirva una pequeña cantidad de tráfico:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION tag: TAG_NAME percent: PERCENT-NEW - revisionName: REVISION-FORMER percent: PERCENT-FORMER
Ten en cuenta que los porcentajes deben sumar 100. Sustituir
- REVISION con el nombre de la revisión etiquetada.
- TAG_NAME con el nombre de la etiqueta que vas a implementar gradualmente.
- PERCENT-NEW con el porcentaje de tráfico que quiera enviar a la revisión etiquetada. Por ejemplo, use
10
para enviar el 10% del tráfico a esa revisión. - REVISION-FORMER con el nombre de la revisión que se está publicando.
- PERCENT-FORMER con el porcentaje de tráfico que quieras enviar a la revisión antigua
Sustituye el servicio por su nueva configuración con el siguiente comando:
gcloud run services replace service.yaml
Espera a que se complete la actualización: deberías ver un mensaje que indique que la nueva revisión que estás implementando gradualmente se ha desplegado y está sirviendo el valor del porcentaje de tráfico que has usado.
Terraform
Añade lo siguiente a tu archivo .tf
:
A lo largo de varias horas o días, según sea necesario, actualiza gradualmente de una etiqueta a otra, aumentando el porcentaje según sea necesario para la revisión etiquetada.
Para aplicar los cambios, introduce terraform apply
después de cada uno.
Siguientes pasos
- Consulta cómo usar Cloud Deploy para configurar un flujo de procesamiento de entrega continua para desplegar en Cloud Run.