Acerca de este codelab
1. Introducción
Descripción general
Las revisiones de Cloud Run te permiten especificar qué revisiones deben recibir tráfico y qué porcentaje de tráfico se debe enviar a cada revisión. Las revisiones te permiten revertir a una revisión anterior, lanzar una revisión de forma gradual y dividir el tráfico entre varias revisiones.
En estos codelabs, se muestra cómo usar las revisiones para administrar el tráfico a tu servicio de Cloud Run. Obtén más información sobre las revisiones en la documentación de Cloud Run.
Qué aprenderás
- Cómo dividir el tráfico entre dos o más revisiones de un servicio de Cloud Run
- Cómo lanzar una nueva revisión de forma gradual
- Cómo revertir a una revisión anterior
2. Configuración y requisitos
Requisitos previos
- Accediste a la consola de Cloud.
- Ya implementaste un servicio de Cloud Run. Por ejemplo, puedes seguir los pasos para implementar un servicio de Cloud Run para comenzar.
Configura las variables de entorno
Puedes configurar las variables de entorno que se usarán en este codelab.
PROJECT_ID=YOUR-PROJECT-ID
REGION=YOUR_REGION
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo
Crea un repositorio de Artifact Registry para el servicio
gcloud artifacts repositories create $AR_REPO \
--repository-format=docker \
--location=$REGION \
--description="codelab for finetuning using CR jobs" \
--project=$PROJECT_ID
3. División del tráfico
En esta muestra, se muestra cómo crear un servicio de Cloud Run que lee una variable de entorno de color y responde con el nombre de la revisión usando ese color de fondo.
Aunque en este codelab se usa Python, puedes usar cualquier entorno de ejecución.
Configura las variables de entorno
Puedes configurar las variables de entorno que se usarán en este codelab.
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen SERVICE_NAME=traffic-revisions-color AR_REPO=traffic-revisions-color-repo
Cómo crear el servicio
Primero, crea un directorio para el código fuente y ábrelo con el comando cd.
mkdir traffic-revisions-codelab && cd $_
Luego, crea un archivo main.py
con el siguiente contenido:
import os from flask import Flask, render_template_string app = Flask(__name__) TEMPLATE = """ <!doctype html> <html lang="en"> <head> <title>Cloud Run Traffic Revisions</title> <style> body { display: flex; justify-content: center; align-items: center; min-height: 50vh; background-color: {{ bg_color }}; /* Set by environment variable */ font-family: sans-serif; } .content { background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white background */ padding: 2em; border-radius: 8px; text-align: center; box-shadow: 0 4px 8px rgba(0,0,0,0.1); } </style> </head> <body> <div class="content"> <p>background color: <strong>{{ color_name }}</strong></p> </div> </body> </html> """ @app.route('/') def main(): """Serves the main page with a background color from the ENV.""" # Get the color from the 'BG_COLOR' environment variable. # Default to 'white' if the variable is not set. color = os.environ.get('BG_COLOR', 'white').lower() return render_template_string(TEMPLATE, bg_color=color, color_name=color) if __name__ == '__main__': port = int(os.environ.get('PORT', 8080)) app.run(debug=True, host='0.0.0.0', port=port)
A continuación, crea un archivo requirements.txt
con el siguiente contenido:
Flask>=2.0.0 gunicorn>=20.0.0
Por último, crea un Dockerfile
.
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8080
ENV PYTHONPATH /app
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "main:app"]
Crea la imagen en Artifact Registry con Buildpacks mediante Cloud Build:
gcloud builds submit \
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
Y, luego, implementa la primera revisión en Cloud Run con un color verde oscuro:
gcloud run deploy $SERVICE_NAME \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--set-env-vars BG_COLOR=darkseagreen
Para probar el servicio, puedes abrir el extremo directamente en tu navegador web para ver el color de fondo como verde azulado oscuro.
Ahora, implementa una segunda revisión con un color de fondo marrón claro.
# update the env var BG_COLOR=tan gcloud run deploy $SERVICE_NAME \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \ --region $REGION \ --set-env-vars BG_COLOR=tan
Ahora, cuando actualices el sitio web, verás el color de fondo marrón claro.
Divide el tráfico 50/50
Para dividir el tráfico entre las revisiones verde oscuro y marrón claro, debes encontrar los IDs de revisión de los servicios subyacentes de Cloud Run. Para ver los IDs de revisión, ejecuta este comando:
gcloud run revisions list --service $SERVICE_NAME \ --region $REGION --format 'value(REVISION)'
Deberías ver resultados similares a los que se muestran a continuación.
traffic-revisions-color-00003-qoq traffic-revisions-color-00002-zag
Para dividir el tráfico 50/50 entre las dos revisiones, ejecuta el siguiente comando con tus revisiones:
gcloud run services update-traffic $SERVICE_NAME \ --region $REGION \ --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50
Prueba la división del tráfico
Para probar el servicio, actualiza la página en tu navegador.
La mitad de las veces, deberías ver la revisión de color verde oscuro y, la otra mitad, la revisión de color marrón claro. También verás el nombre de la revisión en el resultado, p.ej.,
<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>
4. Lanzamientos graduales
En esta sección, aprenderás a lanzar gradualmente los cambios en una nueva revisión de Cloud Service. Puedes obtener más información sobre los lanzamientos graduales en la documentación.
Usarás el mismo código que en la sección anterior, pero lo implementarás como un nuevo servicio de Cloud Run.
Primero, establece el color de fondo en beige
y, luego, implementa la función con el nombre gradual-rollouts-colors
.
Para implementar una función de Cloud Run directamente en Cloud Run, ejecuta el siguiente comando:
# update the env var BG_COLOR=beige gcloud beta run deploy gradual-rollouts-colors \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \ --region $REGION \ --allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Ahora supongamos que queremos lanzar gradualmente una nueva revisión con el color de fondo lavanda.
Primero, configuremos la revisión actual en beige para que reciba el 100% del tráfico. Esto garantizará que tus revisiones futuras no reciban tráfico. De forma predeterminada, Cloud Run establece el 100% del tráfico en la revisión con la marca latest
. Si especificas manualmente que esta revisión beige actual debe recibir todo el tráfico, la revisión con la marca latest
ya no recibirá el 100% del tráfico. Consulta la documentación.
# get the revision name BEIGE_REVISION=$(gcloud run revisions list --service gradual-rollouts-colors \ --region $REGION --format 'value(REVISION)') # now set 100% traffic to that revision gcloud run services update-traffic gradual-rollouts-colors \ --to-revisions=$BEIGE_REVISION=100 \ --region $REGION
Verás un resultado similar a Traffic: 100% radual-rollouts-colors-00001-yox
.
Ahora puedes implementar una revisión nueva que no recibirá tráfico. En lugar de hacer cambios en el código, puedes actualizar la variable de entorno BG_COLOR para esta revisión.
Para implementar una función de Cloud Run directamente en Cloud Run, ejecuta el siguiente comando:
# update color BG_COLOR=lavender # deploy the function that will not receive any traffic gcloud beta run deploy gradual-rollouts-colors \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \ --region $REGION \ --allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Ahora, cuando visites el sitio web en tu navegador, verás el color beige, aunque lavanda fue la revisión implementada más recientemente.
Prueba una revisión que publica un 0% de tráfico
Supongamos que verificaste que tu revisión se implementó correctamente y que entrega el 0% del tráfico. Aunque pasó las verificaciones de estado, debes verificar que esta revisión use el color de fondo lavanda.
Para probar la revisión lavanda, puedes aplicarle una etiqueta. El etiquetado te permite probar directamente la revisión nueva en una URL específica, sin entregar tráfico.
Primero, obtén la URL de la imagen de esa revisión más reciente (que es lavanda).
IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')
Ahora etiqueta esa imagen con su color asociado.
gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION
Verás un resultado similar al siguiente:
The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Ahora, cuando visites esa URL de revisión específica, verás el color lavanda.
Aumenta el tráfico de forma gradual
Ahora, puedes comenzar a enviar tráfico a la revisión lavanda. En el siguiente ejemplo, se muestra cómo enviar el 1% del tráfico a lavender.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=1
Para enviar el 50% del tráfico a lavender, puedes usar el mismo comando, pero especifica el 50%.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=50
Deberías ver una lista del tráfico que recibe cada revisión.
Traffic: 50% gradual-rollouts-colors-00001-hos 50% gradual-rollouts-colors-00004-mum lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Cuando tengas todo listo para lanzar el color lavanda por completo, puedes establecerlo en un 100% para reemplazar el beige.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100
y ahora, cuando visites el sitio web, solo verás el color lavanda.
5. Reversiones
Supongamos que llegaron los primeros comentarios de UX, que indican que los clientes prefieren el beige al lavanda, y debes revertir al beige.
Para revertir a la revisión anterior (beige), ejecuta este comando:
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-revisions $BEIGE_REVISION=100
y ahora, cuando visites el sitio web, verás el color beige como color de fondo.
Puedes obtener más información sobre las reversiones en la documentación.
6. ¡Felicitaciones!
¡Felicitaciones por completar el codelab!
Te recomendamos que revises la documentación sobre lanzamientos, reversiones y migración de tráfico.
Temas abordados
- Cómo dividir el tráfico entre dos o más revisiones de un servicio de Cloud Run
- Cómo lanzar una nueva revisión de forma gradual
- Cómo revertir a una revisión anterior
7. Limpia
Para evitar cargos imprevistos (por ejemplo, si esta función de Cloud Run se invoca de forma inadvertida más veces que tu asignación mensual de invocaciones de Cloud Run en el nivel gratuito), puedes borrar el servicio de Cloud Run o el proyecto que creaste en el paso 2.
Para borrar un servicio de Cloud Run, ve a Cloud Run en la consola de Cloud en https://console.cloud.google.com/run/ y borra las funciones que creaste en este codelab.
Si decides borrar todo el proyecto, puedes ir a https://console.cloud.google.com/cloud-resource-manager, seleccionar el proyecto que creaste en el paso 2 y elegir Borrar. Si borras el proyecto, deberás cambiar los proyectos en tu SDK de Cloud. Para ver la lista de todos los proyectos disponibles, ejecuta gcloud projects list
.