Überarbeitungen in Cloud Run-Funktionen für die Trafficaufteilung, graduelle Einführungen und Rollbacks verwenden

1. Einführung

Übersicht

Mit Cloud Run-Funktionen können Sie angeben, welche Überarbeitungen Traffic empfangen sollen. Sie können den von einer Überarbeitung empfangenen Traffic auch als Prozentsatz angeben. 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 Ihren Cloud Run-Funktionen verwalten. Weitere Informationen zu Versionen finden Sie in der Cloud Run-Dokumentation.

Aufgaben in diesem Lab

  • Traffic für eine Cloud Run-Funktion auf zwei oder mehr Versionen aufteilen
  • So führen Sie eine neue Version schrittweise ein
  • Rollback zu einer vorherigen Version durchführen

2. Einrichtung und Anforderungen

Voraussetzungen

  • Sie sind in der Cloud Console angemeldet.
  • Sie haben bereits eine Cloud Run-Funktion bereitgestellt. Sie können beispielsweise die Anleitung zum Bereitstellen einer Cloud Run-Funktion befolgen.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren d1264ca30785e435.png.

cb81e7c8e34bc8d.png

Wenn Sie Cloud Shell zum ersten Mal starten, wird ein Zwischenbildschirm mit einer Beschreibung der Funktion angezeigt. Wenn ein Zwischenbildschirm angezeigt wird, klicken Sie auf Weiter.

d95252b003979716.png

Die Bereitstellung und Verbindung mit Cloud Shell sollte nur wenige Minuten dauern.

7833d5e1c5d18f54.png

Auf dieser virtuellen Maschine sind alle erforderlichen Entwicklungstools installiert. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können mit einem Browser erledigt werden.

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie authentifiziert sind und das Projekt auf Ihre Projekt-ID festgelegt ist.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list

Befehlsausgabe

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob der gcloud-Befehl Ihr Projekt kennt:
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:

gcloud config set project <PROJECT_ID>

Befehlsausgabe

Updated property [core/project].

3. Traffic-Aufteilung

In diesem Beispiel wird gezeigt, wie Sie eine Funktion erstellen, die eine Farbumgebungsvariable liest und mit dem Namen der Version mit dieser Hintergrundfarbe antwortet.

In diesem Codelab wird Node.js verwendet, Sie können aber jede beliebige 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

Funktion erstellen

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

mkdir revisions-gcf-codelab && cd $_

Erstellen Sie dann eine package.json-Datei mit folgendem Inhalt:

{
    "dependencies": {
        "@google-cloud/functions-framework": "^3.0.0"
    }
}

Erstellen Sie als Nächstes eine index.js-Quelldatei mit folgendem Inhalt:

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>');
});

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

gcloud beta run deploy traffic-splitting-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --set-env-vars BG_COLOR=$BG_COLOR

Wenn Sie eine Bereitstellung als Cloud Functions-Funktion der 2. Generation vorziehen, verwenden Sie den folgenden Befehl:

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

Zum Testen der Funktion können Sie entweder den vorhandenen Endpunkt mit Curl aufrufen, um die Farbe „darkseagreen“ in der HTML-Datei zu sehen, oder den Endpunkt direkt mit Ihrem Browser aufrufen, um die Hintergrundfarbe zu sehen.

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

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

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

# 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

Wenn Sie eine Bereitstellung als Cloud Functions-Funktion der 2. Generation vorziehen, verwenden Sie den folgenden Befehl:

# 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

Wenn Sie den Endpunkt jetzt mit „curl“ aufrufen, sehen Sie die beige Hintergrundfarbe.

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

Traffic 50:50 aufteilen

Wenn Sie den Traffic zwischen den Überarbeitungen „Deep Sea Green“ und „Hellbraun“ aufteilen möchten, müssen Sie die Überarbeitungs-IDs der zugrunde liegenden Cloud Run-Dienste ermitteln. Sie können die Überarbeitungs-IDs abrufen, indem Sie den folgenden Befehl ausführen:

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

Sie sollten Ergebnisse sehen, die den folgenden ähneln

traffic-splitting-gcf-00003-qoq
traffic-splitting-gcf-00002-zag

Mit dem folgenden Befehl können Sie den Traffic gleichmäßig auf die beiden Überarbeitungen aufteilen:

gcloud run services update-traffic traffic-splitting-gcf \
  --region $REGION \
  --to-revisions <REVISION1>=50,<REVISION2>=50

Traffic-Aufteilung testen

Sie können die Funktion testen, indem Sie ihre öffentliche URL aufrufen (entweder über curl oder direkt im Browser).

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" $SERVICE_URL

In der Hälfte der Fälle sollten Sie die Überarbeitung in dunklem Meergrün sehen und die andere Hälfte die Änderung bei Bräunen. In der Ausgabe wird auch der Name der Version angezeigt, z. B.

<html><body style="background-color:tan;"><div><p>Hello traffic-splitting-gcf-00006-qoq</p></div></body></html>

4. Schrittweise Einführungen

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

Sie verwenden denselben Code wie im vorherigen Abschnitt, stellen ihn aber als neue Cloud Functions-Funktion bereit.

Legen Sie zuerst die Hintergrundfarbe auf beige fest und stellen Sie die Funktion gradual-rollouts-gcf 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-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

Wenn Sie die Bereitstellung als Cloud Functions (2. Generation) bevorzugen, verwenden Sie den folgenden Befehl:

# 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

Nehmen wir nun an, wir möchten nach und nach eine neue Version mit der Hintergrundfarbe Lavendel einführen.

Legen wir zuerst fest, dass die aktuelle Überarbeitung beige ist, um 100% Traffic zu erhalten. So wird sichergestellt, dass Ihre zukünftigen Cloud Functions-Bereitstellungen keinen Traffic erhalten. Standardmäßig wird in Cloud Functions 100 % des Traffics an die Version mit dem Flag latest weitergeleitet. Wenn Sie manuell angeben, dass diese aktuelle Überarbeitung den gesamten Traffic empfangen soll, erhält die Überarbeitung mit dem Flag latest keinen Traffic mehr zu 100 %. Dokumentation ansehen

# 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

Die Ausgabe sollte in etwa so aussehen: Traffic: 100% gradual-rollouts-gcf2-00001-yox

Jetzt können Sie eine neue Version bereitstellen, die keinen Traffic empfangen wird. 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-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

Wenn Sie die Bereitstellung als Cloud Functions (2. Generation) bevorzugen, verwenden Sie den folgenden Befehl:

# 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

Aktualisieren Sie jetzt die Umgebungsvariable „SERVICE_URL“, damit die Funktion „gradual-rollouts-gcf“ verwendet wird.

SERVICE_URL=$(gcloud run services describe gradual-rollouts-gcf --platform managed --region $REGION --format 'value(status.url)')

und jetzt, wenn Sie den Dienst curlen

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

Sie sehen die Farbe Beige, obwohl „Lavendel“ die zuletzt bereitgestellte Version war.

<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>

Überarbeitung testen, die 0 % des Traffics erhält

Angenommen, Sie haben festgestellt, 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 Tagging können Sie die neue Version direkt mit einer bestimmten URL testen, ohne Traffic bereitzustellen.

Rufen Sie zuerst die Bild-URL für diese Version ab.

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

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

gcloud run deploy gradual-rollouts-gcf --image $IMAGE_URL --no-traffic --tag $BG_COLOR --region $REGION --no-allow-unauthenticated

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

The revision can be reached directly at https://lavender---gradual-rollouts-gcf-k6msmyp47q-lz.a.run.app

Sie können diese Überarbeitung jetzt direkt mit dem curl-Befehl ausführen.

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>

und sehen Sie die Lavendelfarbe in den Ergebnissen:

<html><body style="background-color:lavender;"><div><p>Hello from gradual-rollouts-gcf-24jan16-00003-xik using color lavender</p></div></body></html>

Traffic schrittweise steigern

Jetzt können Sie Traffic an die Lavendel-Version senden. Das folgende Beispiel zeigt, wie 1% des Traffics an Lavendel gesendet wird.

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

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

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

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

Traffic:
  50% gradual-rollouts-gcf-00001-hos
  50% gradual-rollouts-gcf-00004-mum
        lavender: https://lavender---gradual-rollouts-gcf-k6msmyp47q-uc.a.run.app

Wenn du bereit bist, Lavendel komplett einzusetzen, kannst du Lavendel auf 100% einstellen, um Beige zu ersetzen.

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

Wenn Sie jetzt die URL des Funktionsdienstes „gradual-rollouts-gcf“ aufrufen oder mit Curl abrufen,

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

Sie sehen nur Lavendel.

<html><body style="background-color:lavender;"><div><p>Hello gradual-rollouts-gcf-00004-mum</p></div></body></html>

5. Rollbacks

Angenommen, frühes UX-Feedback ist eingegangen, was darauf hinweist, dass die Kundschaft Beige gegenüber Lavendel bevorzugen und Sie zu Beige wechseln müssen.

Mit diesem Befehl können Sie ein Rollback zur vorherigen Version durchführen.

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

Wenn Sie jetzt den curl-Befehl oder den Funktions-URL-Endpunkt aufrufen,

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

wird ein beigefarbener Wert zurückgegeben.

<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>

Weitere Informationen zu Rollbacks finden Sie in der Dokumentation.

6. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs!

Wir empfehlen, die Dokumentation zu Roll-outs, Rollbacks und Traffic-Migration zu lesen.

Behandelte Themen

  • Traffic für eine Cloud Run-Funktion auf zwei oder mehr Überarbeitungen aufteilen
  • So führen Sie eine neue Version schrittweise ein
  • 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 Functions-Aufrufzuweisung im kostenlosen Tarif, können Sie entweder die Cloud Run-Funktion oder das in Schritt 2 erstellte Projekt löschen.

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

Wenn Sie die als Funktionen der 2. Generation bereitgestellten Cloud Run-Funktionen löschen möchten, rufen Sie in der Cloud Console unter https://console.cloud.google.com/functions/ die Seite „Cloud Functions“ auf und löschen Sie die in diesem Codelab erstellten Funktionen.

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.