Ü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 Überarbeitungen finden Sie in der Cloud Run-Dokumentation.

Aufgaben in diesem Lab

  • Traffic für eine Cloud Run-Funktion auf zwei oder mehr Überarbeitungen 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 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 angezeigt. Klicken Sie in diesem Fall 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. Die meisten, wenn nicht alle Aufgaben 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 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

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 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, wird die beige Hintergrundfarbe angezeigt.

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

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

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

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

Aufteilung der Zugriffe 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

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-splitting-gcf-00006-qoq</p></div></body></html>

4. Gestaffelte Roll-outs

In diesem Abschnitt erfahren Sie, wie Sie Änderungen schrittweise in einer neuen Cloud Functions-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 neue Cloud-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 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 Cloud Functions-Bereitstellungen keinen Traffic erhalten. Standardmäßig wird in Cloud Functions der gesamte Traffic an die Version mit dem Flag latest weitergeleitet. 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. Weitere Informationen finden Sie in der Dokumentation.

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

Jetzt können Sie diese Version direkt per Curl abrufen

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

und sehen Sie die Farbe Lavendel 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. 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 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 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-gcf --region $REGION --to-tags lavender=100

Wenn Sie jetzt die URL der Funktion „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, es liegt erstes UX-Feedback vor, das darauf hinweist, dass die Kunden Beige lieber mögen als Lavendel, und Sie müssen zu Beige zurückkehren.

Mit diesem Befehl können Sie zu der vorherigen Version (beige) zurückkehren.

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

Wenn Sie jetzt curl verwenden oder den URL-Endpunkt der Funktion aufrufen,

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 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 eine Cloud Run-Funktion auf zwei oder mehr Überarbeitungen 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 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 in diesem Codelab erstellten Funktionen.

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. Mit gcloud projects list können Sie eine Liste aller verfügbaren Projekte aufrufen.