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

1. Einführung

Übersicht

Mit Cloud Run Functions 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 Überarbeitung durchführen, eine Überarbeitung schrittweise einführen und den Traffic auf mehrere Überarbeitungen aufteilen.

In diesem Codelab erfahren Sie, wie Sie mit Überarbeitungen den Traffic zu Ihren Cloud Run Functions verwalten. Weitere Informationen zu Überarbeitungen finden Sie in der Cloud Run-Dokumentation.

Lerninhalte

  • Traffic auf zwei oder mehr Überarbeitungen einer Cloud Run-Funktion aufteilen
  • Neue Überarbeitung schrittweise einführen
  • Rollback zu einer vorherigen Überarbeitung durchführen

2. Einrichtung und Anforderungen

Voraussetzungen

  • Sie sind in der Cloud Console angemeldet.
  • Sie haben bereits eine Cloud Run-Funktion bereitgestellt. Folgen Sie beispielsweise der Anleitung zum Bereitstellen einer Cloud Run-Funktion, um loszulegen.

Cloud Shell aktivieren

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

cb81e7c8e34bc8d.png

Wenn Sie die Cloud Shell zum ersten Mal starten, wird ein Fenster mit einer Beschreibung eingeblendet. Klicken Sie in diesem Fall einfach auf Weiter.

d95252b003979716.png

Das Herstellen der Verbindung mit der Cloud Shell sollte nur wenige Augenblicke 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. Die meisten, wenn nicht sogar alle Aufgaben in diesem Codelab können mit einem Browser erledigt werden.

Sobald die Verbindung mit der Cloud Shell hergestellt ist, sehen Sie, dass Sie authentifiziert sind und für das Projekt Ihre Projekt-ID eingestellt ist.

  1. Führen Sie in der 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 den folgenden Befehl in Cloud Shell aus, um zu bestätigen, dass 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 Umgebungsvariable für die Farbe ausliest und den Revisionsnamen in dieser Hintergrundfarbe zurückgibt.

In diesem Codelab wird Node.js verwendet, Sie können aber auch eine beliebige andere 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 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 die Bereitstellung als Cloud Functions (2. Generation) bevorzugen, 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

Um die Funktion zu testen, können Sie entweder den vorhandenen Endpunkt mit „curl“ aufrufen, um die Farbe „darkseagreen“ im HTML-Code zu sehen, oder den Endpunkt direkt in 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 nun eine zweite Version mit einer hellbraunen Hintergrundfarbe 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 die Bereitstellung als Cloud Functions (2. Generation) bevorzugen, 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 hellbraune 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 in Dunkelgrün und Hellbraun aufteilen möchten, müssen Sie die Überarbeitungs-IDs der zugrunde liegenden Cloud Run-Dienste ermitteln. Sie können die Revisions-IDs mit folgendem Befehl aufrufen:

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

Die Ergebnisse sollten in etwa so aussehen:

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

Mit dem folgenden Befehl können Sie den Traffic 50/50 auf die beiden Überarbeitungen aufteilen:

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

Trafficaufteilung testen

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

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

Die Hälfte der Zeit sollte die dunkelmeeresgrüne Überarbeitung und die andere Hälfte die hellbraune Überarbeitung angezeigt werden. Der Name der Überarbeitung wird auch in der Ausgabe aufgeführt, z.B.

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

4. Gestaffelte Roll-outs

In diesem Abschnitt erfahren Sie, wie Sie Änderungen an einer neuen Cloud Functions-Version schrittweise 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 neue Cloud Functions-Funktion bereit.

Legen Sie zuerst die Hintergrundfarbe auf beige fest und stellen Sie die Funktion mit dem Namen 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

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

Legen wir zuerst fest, dass die aktuelle Überarbeitung „Beige“ 100% des Traffics erhalten soll. So wird sichergestellt, dass bei zukünftigen Bereitstellungen Ihrer Cloud Functions-Funktionen kein Traffic empfangen wird. Standardmäßig leitet Cloud Functions 100% des Traffics an die Überarbeitung mit dem Flag latest weiter. Wenn Sie manuell festlegen, dass diese aktuelle Überarbeitung in Beige den gesamten Traffic erhalten soll, erhält die Überarbeitung mit dem latest-Flag nicht mehr 100% des Traffics. 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

Sie können jetzt eine neue Überarbeitung bereitstellen, die keinen Traffic empfängt. Anstatt Codeänderungen vorzunehmen, können Sie die Umgebungsvariable BG_COLOR für diese Überarbeitung 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 nun 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)')

Wenn Sie den Dienst jetzt mit „curl“ aufrufen,

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

Sie sehen die beige Farbe, 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>

Eine Revision testen, die 0% Traffic bereitstellt

Angenommen, Sie haben überprüft, dass Ihre Überarbeitung erfolgreich bereitgestellt wurde und 0% des Traffics bereitstellt. Obwohl die Systemdiagnosen bestanden wurden, möchten Sie trotzdem prüfen, ob in dieser Überarbeitung die lavendelfarbene Hintergrundfarbe verwendet wird.

Wenn Sie die Lavendel-Überarbeitung testen möchten, können Sie ein Tag auf diese Überarbeitung anwenden. Mit dem Tag können Sie die neue Überarbeitung direkt mit einer bestimmten URL testen, ohne Traffic bereitzustellen.

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

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

Taggen Sie das 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 abrufen

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

und sehen Sie sich die lavendelfarbene Farbe in den Ergebnissen an:

<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

Sie können jetzt 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-gcf --region $REGION --to-tags lavender=1

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

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

Sie sollten eine Liste sehen, aus der hervorgeht, wie viel Traffic jede Überarbeitung erhält.

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 Sie bereit sind, Lavendel vollständig einzuführen, können Sie den Prozentsatz auf 100% festlegen, um Beige zu ersetzen.

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

Wenn Sie jetzt die Dienst-URL der Funktion „gradual-rollouts-gcf“ aufrufen oder mit „curl“ darauf zugreifen,

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, Sie haben bereits UX-Feedback erhalten, das darauf hindeutet, dass Kunden Beige gegenüber Lavendel bevorzugen, und Sie müssen zu Beige zurückkehren.

Mit diesem Befehl können Sie ein Rollback zur vorherigen Revision (beige) durchführen.

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

Wenn Sie jetzt die Funktions-URL aufrufen oder einen curl-Befehl ausführen,

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

wird Beige zurückgegeben.

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

Weitere Informationen zu Rollbacks

6. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs!

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

Behandelte Themen

  • Traffic auf zwei oder mehr Überarbeitungen einer Cloud Run-Funktion aufteilen
  • Neue Überarbeitung schrittweise einführen
  • Rollback zu einer vorherigen Überarbeitung durchführen

7. Bereinigen

Um unbeabsichtigte Gebühren zu vermeiden (z. B. wenn diese Cloud Run-Funktion versehentlich öfter aufgerufen wird als Ihre monatliche Zuteilung für Cloud Functions-Aufrufe im kostenlosen Kontingent), können Sie entweder die Cloud Run-Funktion oder das Projekt löschen, das Sie in Schritt 2 erstellt haben.

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 Cloud Functions 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 das gesamte Projekt löschen möchten, rufen Sie https://console.cloud.google.com/cloud-resource-manager auf, wählen Sie das Projekt aus, das Sie in Schritt 2 erstellt haben, und klicken Sie auf „Löschen“. Wenn Sie das Projekt löschen, müssen Sie das Projekt in Ihrem Cloud SDK ändern. Sie können die Liste aller verfügbaren Projekte mit gcloud projects list aufrufen.