1. Introducción
Descripción general
Las funciones de Cloud Run te permiten especificar qué revisiones deben recibir tráfico y especificar los porcentajes de tráfico que recibe una 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 tus funciones 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 una función 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 una función de Cloud Run. Por ejemplo, puedes seguir los pasos para implementar una función de Cloud Run para comenzar.
Activar Cloud Shell
- En la consola de Cloud, haz clic en Activar Cloud Shell
.
Si es la primera vez que inicias Cloud Shell, aparecerá una pantalla intermedia en la que se describe qué es. Si aparece una pantalla intermedia, haz clic en Continuar.
El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.
Esta máquina virtual está cargada con todas las herramientas de desarrollo necesarias. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer con un navegador.
Una vez que te conectes a Cloud Shell, deberías ver que se te autenticó y que el proyecto se configuró con tu ID de proyecto.
- En Cloud Shell, ejecuta el siguiente comando para confirmar que tienes la autenticación:
gcloud auth list
Resultado del comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- En Cloud Shell, ejecuta el siguiente comando para confirmar que el comando gcloud conoce tu proyecto:
gcloud config list project
Resultado del comando
[core] project = <PROJECT_ID>
De lo contrario, puedes configurarlo con el siguiente comando:
gcloud config set project <PROJECT_ID>
Resultado del comando
Updated property [core/project].
3. División del tráfico
En este ejemplo, se muestra cómo crear una función 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 node.js, 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
Crea la función
Primero, crea un directorio para el código fuente y ábrelo con el comando cd.
mkdir revisions-gcf-codelab && cd $_
Luego, crea un archivo package.json
con el siguiente contenido:
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
A continuación, crea un archivo de origen index.js
con el siguiente contenido:
const functions = require('@google-cloud/functions-framework'); const BG_COLOR = process.env.BG_COLOR; const K_REVISION = process.env.K_REVISION; functions.http('helloWorld', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/html' }); res.end('<html><body style="background-color:' + BG_COLOR + ';"' + '><div><p>' + 'Hello from ' + K_REVISION + ' using color ' + BG_COLOR + '</p></div></body>' + '</html>'); });
Para implementar una función de Cloud Run directamente en Cloud Run, ejecuta el siguiente comando:
gcloud beta run deploy traffic-splitting-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
Si prefieres implementarla como una función de Cloud Functions de 2ª gen., usa el siguiente comando:
gcloud functions deploy traffic-splitting-gcf \ --gen2 \ --runtime=nodejs20 \ --region=$REGION \ --source=. \ --entry-point=helloWorld \ --trigger-http \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
Para probar la función, puedes usar curl en el extremo existente para ver el color verde oscuro en el archivo HTML o usar tu navegador para acceder al extremo directamente y ver el color de fondo.
SERVICE_URL=$(gcloud run services describe traffic-splitting-gcf --platform managed --region $REGION --format 'value(status.url)') curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Ahora, implementa una segunda revisión con un color de fondo marrón claro.
Para implementar una función de Cloud Run directamente en Cloud Run, ejecuta el siguiente comando:
# update the env var BG_COLOR=tan gcloud beta run deploy traffic-splitting-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Si prefieres implementarla como una función de Cloud Functions de 2ª gen., usa el siguiente comando:
# update the env var BG_COLOR=tan gcloud functions deploy traffic-splitting-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Ahora, cuando crees el curl del extremo, verás el color de fondo marrón claro.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
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 traffic-splitting-gcf \ --region $REGION --format 'value(REVISION)'
Deberías ver resultados similares a los que se muestran a continuación.
traffic-splitting-gcf-00003-qoq traffic-splitting-gcf-00002-zag
Para dividir el tráfico 50/50 entre las dos revisiones, ejecuta el siguiente comando:
gcloud run services update-traffic traffic-splitting-gcf \ --region $REGION \ --to-revisions <REVISION1>=50,<REVISION2>=50
Prueba la división del tráfico
Para probar la función, visita su URL pública (ya sea con curl o directamente en el navegador).
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" $SERVICE_URL
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-splitting-gcf-00006-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 Functions. 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 una Cloud Function nueva.
Primero, establece el color de fondo en beige
y, luego, implementa la función con el nombre gradual-rollouts-gcf
.
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-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Si prefieres implementarla como una función de Cloud Functions de 2ª gen., usa el siguiente comando:
# update the env var BG_COLOR=beige # deploy the function gcloud functions deploy gradual-rollouts-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-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 implementaciones futuras de Cloud Functions no reciban tráfico. De forma predeterminada, Cloud Functions 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-gcf \ --region $REGION --format 'value(REVISION)') # now set 100% traffic to that revision gcloud run services update-traffic gradual-rollouts-gcf --to-revisions=$BEIGE_REVISION=100 --region $REGION
Verás un resultado similar a Traffic: 100% gradual-rollouts-gcf2-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-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Si prefieres implementarla como una función de Cloud Functions de 2ª gen., usa el siguiente comando:
# update color BG_COLOR=lavender # deploy the function that will not receive any traffic gcloud functions deploy gradual-rollouts-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR \ --tag $BG_COLOR
Ahora, actualiza la variable de entorno SERVICE_URL para usar la función gradual-rollouts-gcf.
SERVICE_URL=$(gcloud run services describe gradual-rollouts-gcf --platform managed --region $REGION --format 'value(status.url)')
y ahora, cuando ejecutes curl en el servicio
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
verás el color beige, aunque lavanda fue la revisión implementada más recientemente.
<html><body style="background-color:beige;"><div><p>Hello from gradual-rollouts-gcf-24jan16-staging-2-00001-kop using color beige</p></div></body></html>
Prueba una revisión que entrega 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.
IMAGE_URL=$(gcloud run services describe gradual-rollouts-gcf --region $REGION --format 'value(IMAGE)')
Ahora etiqueta esa imagen con su color asociado.
gcloud run deploy gradual-rollouts-gcf --image $IMAGE_URL --no-traffic --tag $BG_COLOR --region $REGION --no-allow-unauthenticated
Verás un resultado similar al siguiente:
The revision can be reached directly at https://lavender---gradual-rollouts-gcf-k6msmyp47q-lz.a.run.app
Ahora puedes usar curl para esta revisión directamente
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>
y verás el color lavanda en los resultados:
<html><body style="background-color:lavender;"><div><p>Hello from gradual-rollouts-gcf-24jan16-00003-xik using color lavender</p></div></body></html>
Aumento gradual del tráfico
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-gcf --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-gcf --region $REGION --to-tags lavender=50
Deberías ver una lista del tráfico que recibe cada revisión.
Traffic: 50% gradual-rollouts-gcf-00001-hos 50% gradual-rollouts-gcf-00004-mum lavender: https://lavender---gradual-rollouts-gcf-k6msmyp47q-uc.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-gcf --region $REGION --to-tags lavender=100
y ahora, cuando visites o uses curl en la URL del servicio de la función gradual-rollouts-gcf,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
solo verás el color lavanda.
<html><body style="background-color:lavender;"><div><p>Hello gradual-rollouts-gcf-00004-mum</p></div></body></html>
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-gcf --region $REGION --to-revisions $BEIGE_REVISION=100
y ahora, cuando realices una solicitud curl o visites el extremo de la URL de la función,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
se mostrará el color beige.
<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>
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 una función 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 Function en el nivel gratuito), puedes borrar la función de Cloud Run o el proyecto que creaste en el paso 2.
Para borrar una función de Cloud Run que se implementó en Cloud Run, ve a Cloud Run en la consola de Cloud en https://console.cloud.google.com/functions/ y borra las funciones que creaste en este codelab.
Para borrar las funciones de Cloud Run implementadas como funciones de 2ª gen., ve a Cloud Functions en la consola de Cloud en https://console.cloud.google.com/functions/ 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
.