Informazioni su questo codelab
1. Introduzione
Panoramica
Le revisioni Cloud Run ti consentono di specificare quali revisioni devono ricevere il traffico e quale percentuale di traffico inviare a ciascuna revisione. Le revisioni ti consentono di eseguire il rollback a una revisione precedente, implementare gradualmente una revisione e suddividere il traffico tra più revisioni.
Questi codelab mostrano come utilizzare le revisioni per gestire il traffico verso il servizio Cloud Run. Per scoprire di più sulle revisioni, consulta la documentazione di Cloud Run.
Cosa imparerai a fare
- Come suddividere il traffico tra due o più revisioni per un servizio Cloud Run
- Come implementare gradualmente una nuova revisione
- Come eseguire il rollback a una revisione precedente
2. Configurazione e requisiti
Prerequisiti
- Hai eseguito l'accesso alla console Cloud.
- Hai già eseguito il deployment di un servizio Cloud Run. Ad esempio, per iniziare puoi seguire la procedura per eseguire il deployment di un servizio Cloud Run.
Impostare le variabili di ambiente
Puoi impostare le variabili di ambiente che verranno utilizzate durante questo 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 repository Artifact Registry per il servizio
gcloud artifacts repositories create $AR_REPO \
--repository-format=docker \
--location=$REGION \
--description="codelab for finetuning using CR jobs" \
--project=$PROJECT_ID
3. Suddivisione del traffico
Questo esempio mostra come creare un servizio Cloud Run che legga una variabile di ambiente di colore e risponda con il nome della revisione utilizzando quel colore di sfondo.
Sebbene questo codelab utilizzi Python, puoi utilizzare qualsiasi runtime.
Impostare le variabili di ambiente
Puoi impostare le variabili di ambiente che verranno utilizzate durante questo codelab.
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen SERVICE_NAME=traffic-revisions-color AR_REPO=traffic-revisions-color-repo
Creare il servizio
Per prima cosa, crea una directory per il codice sorgente ed esegui cd in quella directory.
mkdir traffic-revisions-codelab && cd $_
Quindi, crea un file main.py
con i seguenti contenuti:
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)
Poi, crea un file requirements.txt
con i seguenti contenuti:
Flask>=2.0.0 gunicorn>=20.0.0
Infine, 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 l'immagine in Artifact Registry utilizzando Buildpack con Cloud Build:
gcloud builds submit \
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
Esegui il deployment della prima revisione in Cloud Run con un colore verde acqua scuro:
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
Per testare il servizio, puoi aprire l'endpoint direttamente nel browser web per vedere il colore di sfondo verde acqua scuro.
Ora esegui il deployment di una seconda revisione con un colore di sfondo marrone chiaro.
# 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
Ora, quando aggiorni il sito web, vedrai il colore di sfondo marrone.
Suddividi il traffico 50-50
Per suddividere il traffico tra le revisioni verde acqua e marrone chiaro, devi trovare gli ID revisione dei servizi Cloud Run sottostanti. Per visualizzare gli ID revisione, esegui questo comando:
gcloud run revisions list --service $SERVICE_NAME \ --region $REGION --format 'value(REVISION)'
Dovresti vedere risultati simili a quelli riportati di seguito
traffic-revisions-color-00003-qoq traffic-revisions-color-00002-zag
Puoi suddividere il traffico 50/50 tra le due revisioni eseguendo il seguente comando con le revisioni:
gcloud run services update-traffic $SERVICE_NAME \ --region $REGION \ --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50
Testa la suddivisione del traffico
Puoi testare il servizio aggiornando la pagina nel browser.
La metà delle volte dovresti vedere la revisione verde mare scuro e l'altra metà la revisione marrone chiaro. Nell'output viene visualizzato anche il nome della revisione, ad esempio
<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>
4. Implementazioni graduali
In questa sezione imparerai a implementare gradualmente le modifiche in una nuova revisione del servizio cloud. Per scoprire di più sui rollout graduali, consulta la documentazione.
Utilizzerai lo stesso codice della sezione precedente, ma lo eseguirai come nuovo servizio Cloud Run.
Innanzitutto, imposta il colore di sfondo su beige
e esegui il deployment della funzione con il nome gradual-rollouts-colors
.
Per eseguire il deployment di una funzione Cloud Run direttamente su Cloud Run, esegui il seguente 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
Supponiamo di voler implementare gradualmente una nuova revisione con il colore di sfondo lavanda.
Innanzitutto, impostiamo la revisione corrente beige in modo che riceva il 100% del traffico. In questo modo, le revisioni future non riceveranno alcun traffico. Per impostazione predefinita, Cloud Run imposta il 100% del traffico sulla revisione con il flag latest
. Se specifichi manualmente che questa revisione attuale beige deve ricevere tutto il traffico, la revisione con il flag latest
non riceverà più il 100% del traffico. Consulta la documentazione.
# 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
Vedrai un output simile a Traffic: 100% radual-rollouts-colors-00001-yox
Ora puoi implementare una nuova revisione che non riceverà traffico. Anziché apportare modifiche al codice, puoi aggiornare la variabile di ambiente BG_COLOR per questa revisione.
Per eseguire il deployment di una funzione Cloud Run direttamente su Cloud Run, esegui il seguente 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
Ora, quando visiti il sito web nel browser, vedrai il colore beige, anche se la revisione di cui è stato eseguito il deployment più di recente era lavanda.
Testare una revisione che genera lo 0% di traffico
Supponiamo che tu abbia verificato che il deployment della revisione sia andato a buon fine e che stia pubblicando lo 0% di traffico. Anche se ha superato i controlli di integrità, vuoi comunque verificare che questa revisione utilizzi il colore di sfondo lavanda.
Per testare la revisione lavanda, puoi applicare un tag a quella revisione. I tag ti consentono di testare direttamente la nuova revisione in un URL specifico, senza pubblicare traffico.
Innanzitutto, ottieni l'URL immagine dell'ultima revisione (che è lavanda).
IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')
Ora tagga l'immagine con il colore associato.
gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION
Vedrai un output simile al seguente:
The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Ora, quando visiti l'URL della revisione specifica, vedrai il colore lavanda.
Aumento graduale del traffico
Ora puoi iniziare a inviare traffico alla revisione lavanda. L'esempio seguente mostra come inviare l'1% del traffico a lavanda.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=1
Per inviare il 50% del traffico a lavanda, puoi utilizzare lo stesso comando, ma specificare il 50%.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=50
Dovresti vedere un elenco del traffico ricevuto da ogni revisione.
Traffic: 50% gradual-rollouts-colors-00001-hos 50% gradual-rollouts-colors-00004-mum lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Quando è tutto pronto per implementare completamente il colore lavanda, puoi impostarlo al 100% per sostituire il beige.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100
Ora, quando visiti il sito web, vedrai solo il colore lavanda.
5. Rollback
Supponiamo che siano stati ricevuti feedback iniziali sull'esperienza utente che indicano che i clienti preferiscono il beige alla lavanda e che tu debba eseguire il rollback al beige.
Puoi eseguire il rollback alla revisione precedente (beige) eseguendo questo comando:
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-revisions $BEIGE_REVISION=100
Ora, quando visiti il sito web, vedrai il beige come colore di sfondo.
Per scoprire di più sui rollback, consulta la documentazione.
6. Complimenti!
Complimenti per aver completato il codelab.
Ti consigliamo di consultare la documentazione su implementazioni, rollback e migrazione del traffico.
Argomenti trattati
- Come suddividere il traffico tra due o più revisioni per un servizio Cloud Run
- Come implementare gradualmente una nuova revisione
- Come eseguire il rollback a una revisione precedente
7. Esegui la pulizia
Per evitare addebiti involontari, ad esempio se questa funzione Cloud Run viene invocata inavvertitamente più volte rispetto alla allocazione mensile di invocazioni Cloud Run nel livello senza costi, puoi eliminare il servizio Cloud Run o il progetto creato nel passaggio 2.
Per eliminare un servizio Cloud Run, vai a Cloud Run nella console Cloud all'indirizzo https://console.cloud.google.com/run/ ed elimina le funzioni create in questo codelab.
Se scegli di eliminare l'intero progetto, puoi andare alla pagina https://console.cloud.google.com/cloud-resource-manager, selezionare il progetto creato nel passaggio 2 e scegliere Elimina. Se elimini il progetto, dovrai modificare i progetti nel tuo Cloud SDK. Puoi visualizzare l'elenco di tutti i progetti disponibili eseguendo gcloud projects list
.