Überarbeitungen in Cloud Run für Traffic-Aufteilung, graduelle Rollouts und Rollbacks verwenden

Überarbeitungen in Cloud Run für Traffic-Aufteilung, graduelle Rollouts und Rollbacks verwenden

Informationen zu diesem Codelab

subjectZuletzt aktualisiert: Apr. 5, 2025
account_circleVerfasst von einem Google-Mitarbeiter

1. Einführung

Übersicht

Mit Cloud Run-Überarbeitungen können Sie angeben, welche Überarbeitungen Traffic empfangen sollen und welcher Prozentsatz des Traffics an jede Überarbeitung gesendet werden soll. Mit Überarbeitungen können Sie ein Rollback zu einer vorherigen Version durchführen, eine Version schrittweise einführen und den Traffic auf mehrere Versionen aufteilen.

In diesen Codelabs erfahren Sie, wie Sie mit Überarbeitungen den Traffic zu Ihrem Cloud Run-Dienst verwalten. Weitere Informationen zu Überarbeitungen finden Sie in der Cloud Run-Dokumentation.

Aufgaben in diesem Lab

  • Traffic für einen Cloud Run-Dienst auf zwei oder mehr Versionen aufteilen
  • So führen Sie schrittweise ein Roll-out einer neuen Version durch
  • Rollback zu einer vorherigen Version durchführen

2. Einrichtung und Anforderungen

Voraussetzungen

  • Sie sind in der Cloud Console angemeldet.
  • Sie haben bereits einen Cloud Run-Dienst bereitgestellt. Sie können beispielsweise diese Anleitung zum Bereitstellen eines Cloud Run-Dienstes befolgen.

Umgebungsvariablen festlegen

Sie können Umgebungsvariablen festlegen, die in diesem Codelab verwendet werden.

PROJECT_ID=YOUR-PROJECT-ID
REGION
=YOUR_REGION

BG_COLOR
=darkseagreen
SERVICE_NAME
=traffic-revisions-color
AR_REPO
=traffic-revisions-color-repo

Artifact Registry-Repository für den Dienst erstellen

gcloud artifacts repositories create $AR_REPO \
   
--repository-format=docker \
   
--location=$REGION \
   
--description="codelab for finetuning using CR jobs" \
   
--project=$PROJECT_ID

3. Traffic-Aufteilung

In diesem Beispiel wird gezeigt, wie Sie einen Cloud Run-Dienst erstellen, der eine Farbumgebungsvariable liest und mit dem Namen der Version mit dieser Hintergrundfarbe antwortet.

In diesem Codelab wird Python verwendet, Sie können aber jede Laufzeit verwenden.

Umgebungsvariablen festlegen

Sie können Umgebungsvariablen festlegen, die in diesem Codelab verwendet werden.

REGION=<YOUR_REGION>
PROJECT_ID=<YOUR-PROJECT-ID>
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo

Dienst erstellen

Erstellen Sie zuerst ein Verzeichnis für den Quellcode und wechseln Sie mit „cd“ in dieses Verzeichnis.

mkdir traffic-revisions-codelab && cd $_

Erstellen Sie dann eine main.py-Datei mit folgendem Inhalt:

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)

Erstellen Sie als Nächstes eine requirements.txt-Datei mit folgendem Inhalt:

Flask>=2.0.0
gunicorn>=20.0.0

Erstellen Sie zum Schluss ein 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"]

Erstellen Sie das Image in Artifact Registry mit Buildpacks und Cloud Build:

gcloud builds submit \
   
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME

und die erste Version in Cloud Run mit der Farbe „darkseagreen“ bereitstellen:

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

Wenn Sie den Dienst testen möchten, können Sie den Endpunkt direkt in Ihrem Webbrowser öffnen, um die Hintergrundfarbe als Dunkelgrün zu sehen.

Stellen Sie jetzt eine zweite Version mit einem hellbraunen Hintergrund bereit.

# 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

Wenn Sie die Website jetzt aktualisieren, sehen Sie die beige Hintergrundfarbe.

Traffic 50:50 aufteilen

Wenn Sie den Traffic auf die Versionen „Deep Sea Green“ und „Tan“ aufteilen möchten, müssen Sie die Überarbeitungs-IDs der zugrunde liegenden Cloud Run-Dienste ermitteln. Sie können die Revisions-IDs mit dem folgenden Befehl aufrufen:

gcloud run revisions list --service $SERVICE_NAME \
  --region $REGION --format 'value(REVISION)'

Die Ergebnisse sollten in etwa so aussehen:

traffic-revisions-color-00003-qoq
traffic-revisions-color-00002-zag

Sie können den Traffic 50/50 auf die beiden Überarbeitungen aufteilen, indem Sie den folgenden Befehl mit den Überarbeitungen ausführen:

gcloud run services update-traffic $SERVICE_NAME \
  --region $REGION \
  --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50

Trafficaufteilung testen

Sie können den Dienst testen, indem Sie die Seite in Ihrem Browser aktualisieren.

Die Hälfte der Zeit sollte die dunkelgrüne Version und die andere Hälfte die beige Version angezeigt werden. In der Ausgabe wird auch der Name der Version angezeigt, z.B.

<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>

4. Gestaffelte Roll-outs

In diesem Abschnitt erfahren Sie, wie Sie Änderungen schrittweise in einer neuen Cloud-Dienst-Version einführen. Weitere Informationen zu schrittweisen Einführungen finden Sie in der Dokumentation.

Sie verwenden denselben Code wie im vorherigen Abschnitt, stellen ihn aber als neuen Cloud Run-Dienst bereit.

Legen Sie zuerst die Hintergrundfarbe auf beige fest und stellen Sie die Funktion mit dem Namen gradual-rollouts-colors bereit.

Führen Sie den folgenden Befehl aus, um eine Cloud Run-Funktion direkt in Cloud Run bereitzustellen:

# 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

Angenommen, wir möchten eine neue Version mit der Hintergrundfarbe Lavendel schrittweise einführen.

Legen wir zuerst fest, dass die aktuelle Version 100% des Traffics erhält. So wird sichergestellt, dass Ihre zukünftigen Versionen keinen Traffic erhalten. Standardmäßig weist Cloud Run der Überarbeitung mit dem Flag latest 100% des Traffics zu. Wenn Sie manuell angeben, dass diese aktuelle Version „beige“ den gesamten Traffic erhalten soll, erhält die Version mit dem latest-Flag nicht mehr 100% des Traffics. Dokumentation ansehen

# 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

Die Ausgabe sollte in etwa so aussehen: Traffic: 100% radual-rollouts-colors-00001-yox

Jetzt können Sie eine neue Version bereitstellen, die keinen Traffic erhält. Anstatt Codeänderungen vorzunehmen, können Sie die Umgebungsvariable BG_COLOR für diese Version aktualisieren.

Führen Sie den folgenden Befehl aus, um eine Cloud Run-Funktion direkt in Cloud Run bereitzustellen:

# 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

Wenn Sie die Website jetzt in Ihrem Browser aufrufen, sehen Sie die Farbe Beige, obwohl „Lavendel“ die zuletzt bereitgestellte Version war.

Überarbeitung testen, für die 0% des Traffics bereitgestellt werden

Angenommen, Sie haben überprüft, dass Ihre Version erfolgreich bereitgestellt wurde und 0% des Traffics ausliefert. Auch wenn die Systemdiagnosen bestanden wurden, möchten Sie noch einmal prüfen, ob für diese Version die Lavendel-Hintergrundfarbe verwendet wird.

Wenn Sie die Version „Lavendel“ testen möchten, können Sie ein Tag auf diese Version anwenden. Mithilfe von Tags können Sie die neue Version direkt mit einer bestimmten URL testen, ohne Traffic bereitzustellen.

Rufen Sie zuerst die Bild-URL für die aktuelle Version ab (in diesem Fall „lavender“).

IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')

Taggen Sie das Bild jetzt mit der zugehörigen Farbe.

gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION

Es wird eine Ausgabe angezeigt, die in etwa so aussieht:

The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app

Wenn Sie diese URL für die Version aufrufen, wird jetzt die Farbe Lavendel angezeigt.

Traffic schrittweise steigern

Jetzt können Sie Traffic an die Lavendel-Version senden. Im folgenden Beispiel wird gezeigt, wie 1% des Traffics an „lavender“ gesendet werden.

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=1

Wenn Sie 50% des Traffics an „lavender“ senden möchten, können Sie denselben Befehl verwenden, aber stattdessen 50% angeben.

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=50

Sie sollten eine Liste mit den Zugriffszahlen für jede Version sehen.

Traffic:
  50% gradual-rollouts-colors-00001-hos
  50% gradual-rollouts-colors-00004-mum
        lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app

Wenn Sie bereit sind, Lavendel vollständig einzuführen, können Sie Lavendel auf 100% setzen, um Beige zu ersetzen.

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100

Wenn Sie die Website jetzt aufrufen, sehen Sie nur Lavendel.

5. Rollbacks

Angenommen, Sie haben erstes UX-Feedback erhalten, das darauf hinweist, dass die Kunden Beige lieber mögen als Lavendel, und Sie müssen zu Beige zurückkehren.

Sie können mit dem folgenden Befehl zu der vorherigen Version (beige) zurückkehren:

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-revisions $BEIGE_REVISION=100

Wenn Sie die Website jetzt aufrufen, sehen Sie Beige als Hintergrundfarbe.

Weitere Informationen zu Rollbacks finden Sie in der Dokumentation.

6. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Weitere Informationen finden Sie in der Dokumentation zu Roll-outs, Rollbacks und Traffic-Migration.

Behandelte Themen

  • Traffic für einen Cloud Run-Dienst auf zwei oder mehr Versionen aufteilen
  • So führen Sie schrittweise ein Roll-out einer neuen Version durch
  • Rollback zu einer vorherigen Version durchführen

7. Bereinigen

Wenn Sie versehentliche Kosten vermeiden möchten, z. B. wenn diese Cloud Run-Funktion versehentlich mehrmals aufgerufen wird als Ihre monatliche Cloud Run-Aufrufzuweisung im kostenlosen Tarif, können Sie entweder den Cloud Run-Dienst oder das in Schritt 2 erstellte Projekt löschen.

Wenn Sie einen Cloud Run-Dienst löschen möchten, rufen Sie in der Cloud Console unter https://console.cloud.google.com/run/ Cloud Run auf und löschen Sie die Funktionen, die Sie in diesem Codelab erstellt haben.

Wenn Sie das gesamte Projekt löschen möchten, rufen Sie https://console.cloud.google.com/cloud-resource-manager auf, wählen Sie das in Schritt 2 erstellte Projekt aus und klicken Sie auf „Löschen“. Wenn Sie das Projekt löschen, müssen Sie die Projekte in Ihrem Cloud SDK ändern. Sie können eine Liste aller verfügbaren Projekte aufrufen, indem Sie gcloud projects list ausführen.