1. Wprowadzenie
Omówienie
Funkcje Cloud Run umożliwiają określenie, które wersje mają otrzymywać ruch, oraz procenty ruchu, które mają otrzymywać. W sekcji Zmiany możesz przywrócić poprzednią wersję, stopniowo wdrażać nową wersję i dzielić ruch między wiele wersji.
Te laboratoria kodu pokazują, jak używać wersji do zarządzania ruchem do funkcji Cloud Run. Więcej informacji o wersjach znajdziesz w dokumentacji Cloud Run.
Czego się nauczysz
- Jak podzielić ruch między co najmniej 2 wersje funkcji Cloud Run
- Jak stopniowo wdrażać nową wersję
- Jak przywrócić poprzednią wersję
2. Konfiguracja i wymagania
Wymagania wstępne
- Jesteś zalogowany(-a) w konsoli Cloud.
- Wcześniej wdrożono funkcję Cloud Run. Aby rozpocząć, możesz na przykład wykonać instrukcje wdrażania funkcji Cloud Run.
Aktywowanie Cloud Shell
- W konsoli Google Cloud kliknij Aktywuj Cloud Shell
.
Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni, na którym opisano, czym jest to środowisko. Jeśli taki ekran się wyświetlił, kliknij Dalej.
Uproszczenie i połączenie z Cloud Shell powinno zająć tylko kilka chwil.
Ta maszyna wirtualna zawiera wszystkie niezbędne narzędzia programistyczne. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie poprawia wydajność sieci i uwierzytelnianie. Większość, jeśli nie wszystkie, zadań w tym ćwiczeniu można wykonać w przeglądarce.
Po połączeniu z Cloud Shell powinieneś zobaczyć, że jesteś uwierzytelniony i że projekt jest ustawiony na identyfikator Twojego projektu.
- Aby potwierdzić uwierzytelnianie, uruchom w Cloud Shell to polecenie:
gcloud auth list
Wynik polecenia
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Aby sprawdzić, czy polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli nie, możesz je ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Wynik polecenia
Updated property [core/project].
3. Dzielenie ruchu
Ten przykład pokazuje, jak utworzyć funkcję, która odczytuje zmienną środowiskową koloru i zwróci nazwę wersji, używając tego koloru tła.
Ten Codelab używa node.js, ale możesz użyć dowolnego środowiska uruchomieniowego.
Ustawianie zmiennych środowiskowych
Możesz ustawić zmienne środowiskowe, których będziesz używać w tym ćwiczeniu.
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen
Tworzenie funkcji
Najpierw utwórz katalog dla kodu źródłowego i przejdź do niego.
mkdir revisions-gcf-codelab && cd $_
Następnie utwórz plik package.json
z podaną niżej treścią:
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
Następnie utwórz plik źródłowy index.js
z tą treścią:
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>'); });
Aby wdrożyć funkcję Cloud Run bezpośrednio w Cloud Run, uruchom to polecenie:
gcloud beta run deploy traffic-splitting-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
Jeśli wolisz wdrożyć funkcję jako funkcję Cloud Functions 2 generacji, użyj tego polecenia:
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
Aby przetestować funkcję, możesz użyć curl do wywołania istniejącego punktu końcowego, aby zobaczyć kolor darkseagreen w kodzie html, lub bezpośrednio wywołać punkt końcowy w przeglądarce, aby zobaczyć kolor tła.
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
Teraz wprowadź drugą wersję z brązowym tłem.
Aby wdrożyć funkcję Cloud Run bezpośrednio w Cloud Run, uruchom to polecenie:
# 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
Jeśli wolisz wdrożyć funkcję jako funkcję Cloud Functions 2 generacji, użyj tego polecenia:
# 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
Gdy teraz wykonasz curl do punktu końcowego, zobaczysz brązowy kolor tła.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Podział ruchu na 50–50
Aby podzielić ruch na wersje niebieską i brązową, musisz znaleźć identyfikatory wersji dostępnych usług Cloud Run. Aby wyświetlić identyfikatory wersji, uruchom to polecenie:
gcloud run revisions list --service traffic-splitting-gcf \ --region $REGION --format 'value(REVISION)'
Powinny pojawić się wyniki podobne do tych
traffic-splitting-gcf-00003-qoq traffic-splitting-gcf-00002-zag
Możesz podzielić ruch na 2 wersje po 50%, uruchamiając to polecenie:
gcloud run services update-traffic traffic-splitting-gcf \ --region $REGION \ --to-revisions <REVISION1>=50,<REVISION2>=50
Testowanie podziału ruchu
Funkcję możesz przetestować, otwierając jej publiczny adres URL (za pomocą curl lub bezpośrednio w przeglądarce).
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" $SERVICE_URL
W połowie przypadków powinna się wyświetlać wersja w ciemnozielonym kolorze morskim, a w drugiej połowie – w kolorze brązowym. W wyniku zobaczysz też nazwę poprawki, np.
<html><body style="background-color:tan;"><div><p>Hello traffic-splitting-gcf-00006-qoq</p></div></body></html>
4. Wdrożenia stopniowe
Z tej sekcji dowiesz się, jak stopniowo wdrażać zmiany w nowej wersji funkcji w Cloud Functions. Więcej informacji o stopniowym wdrażaniu znajdziesz w dokumentacji.
Użyjesz tego samego kodu co w poprzedniej sekcji, ale wdrożysz go jako nową funkcję w Cloud Functions.
Najpierw ustaw kolor tła na beige
i wdróż funkcję o nazwie gradual-rollouts-gcf
.
Aby wdrożyć funkcję Cloud Run bezpośrednio w Cloud Run, uruchom to polecenie:
# 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
Jeśli wolisz wdrożyć funkcję jako funkcję Cloud Functions 2 generacji, użyj tego polecenia:
# 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
Załóżmy, że chcemy stopniowo wdrażać nową wersję z lawendowym tłem.
Najpierw ustaw bieżącą wersję na beżowy, aby otrzymywała 100% ruchu. Dzięki temu przyszłe wdrożenia funkcji w Cloud Functions nie będą otrzymywać żadnego ruchu. Domyślnie Cloud Functions przypisuje 100% ruchu do wersji z flagą latest
. Jeśli ręcznie określisz, że bieżąca wersja w kolorze beżowym ma otrzymywać cały ruch, wersja z flagą latest
nie będzie już otrzymywać 100% ruchu. Zapoznaj się z dokumentacją.
# 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
Zobaczysz dane wyjściowe podobne do tych: Traffic: 100% gradual-rollouts-gcf2-00001-yox
Możesz teraz wdrożyć nową wersję, która nie będzie otrzymywać żadnego ruchu. Zamiast wprowadzać zmiany w kodzie, możesz zaktualizować zmienną środowiskową BG_COLOR w ramach tej wersji.
Aby wdrożyć funkcję Cloud Run bezpośrednio w Cloud Run, uruchom to polecenie:
# 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
Jeśli wolisz wdrożyć funkcję jako funkcję Cloud Functions 2 generacji, użyj tego polecenia:
# 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
Zaktualizuj zmienną środowiskową SERVICE_URL, aby korzystać z funkcji stopniowego wdrażania w GCF.
SERVICE_URL=$(gcloud run services describe gradual-rollouts-gcf --platform managed --region $REGION --format 'value(status.url)')
A teraz, gdy użyjesz curl do wywołania usługi
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
zobaczysz kolor beżowy, mimo że ostatnio wdrożona wersja była w kolorze lawendowym.
<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>
Testowanie wersji obsługującej 0% ruchu
Załóżmy, że udało Ci się zweryfikować, że Twoja wersja została wdrożona i generuje 0% ruchu. Mimo że kontrola stanu się powiodła, chcesz sprawdzić, czy ta wersja używa koloru lawendy na tle.
Aby przetestować wersję lavender, możesz zastosować do niej tag. Tagowanie umożliwia bezpośrednie testowanie nowej wersji pod określonym adresem URL bez kierowania do niej ruchu.
Najpierw pobierz adres URL obrazu tej wersji.
IMAGE_URL=$(gcloud run services describe gradual-rollouts-gcf --region $REGION --format 'value(IMAGE)')
Teraz oznacz obraz powiązanym kolorem.
gcloud run deploy gradual-rollouts-gcf --image $IMAGE_URL --no-traffic --tag $BG_COLOR --region $REGION --no-allow-unauthenticated
Dane wyjściowe będą wyglądać tak:
The revision can be reached directly at https://lavender---gradual-rollouts-gcf-k6msmyp47q-lz.a.run.app
Teraz możesz bezpośrednio użyć funkcji curl do tej wersji.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>
i zobacz kolor lawendowy w wynikach:
<html><body style="background-color:lavender;"><div><p>Hello from gradual-rollouts-gcf-24jan16-00003-xik using color lavender</p></div></body></html>
Stopniowe zwiększanie ruchu
Teraz możesz zacząć wysyłać ruch do wersji o nazwie lavender. Przykład poniżej pokazuje, jak wysłać 1% ruchu do lavender.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=1
Aby wysłać 50% ruchu do lavender, możesz użyć tego samego polecenia, ale z wartością 50%.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=50
Powinna się wyświetlić lista z danymi o ruchu na poszczególnych wersjach.
Traffic: 50% gradual-rollouts-gcf-00001-hos 50% gradual-rollouts-gcf-00004-mum lavender: https://lavender---gradual-rollouts-gcf-k6msmyp47q-uc.a.run.app
Gdy będziesz gotowy do wdrożenia koloru lawendowego, możesz ustawić go na 100%, aby zastąpił kolor beżowy.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=100
a teraz, gdy otworzysz lub użyjesz funkcji curl w adresie URL usługi stopniowego wdrażania funkcji GCF,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
zobaczysz tylko kolor lawendowy.
<html><body style="background-color:lavender;"><div><p>Hello gradual-rollouts-gcf-00004-mum</p></div></body></html>
5. Przywrócone
Załóżmy, że otrzymaliśmy wczesne opinie dotyczące UX, które wskazują, że klienci wolą beż niż lawendę, i musisz przywrócić beż.
Możesz przywrócić poprzednią wersję (beżową), wykonując to polecenie.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-revisions $BEIGE_REVISION=100
Gdy teraz użyjesz curl lub otworzysz punkt końcowy adresu URL funkcji,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
zobaczysz zwrócony kolor beżowy.
<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>
Więcej informacji o przywracaniu znajdziesz w dokumentacji.
6. Gratulacje!
Gratulujemy ukończenia ćwiczenia.
Zalecamy zapoznanie się z dokumentacją dotyczącą wdrażania, cofania zmian i przenoszenia ruchu.
Omówione zagadnienia
- Jak podzielić ruch między co najmniej 2 wersje funkcji Cloud Run
- Jak stopniowo wdrażać nową wersję
- Jak przywrócić poprzednią wersję
7. Czyszczenie danych
Aby uniknąć przypadkowych opłat (np. jeśli ta funkcja Cloud Run zostanie przypadkowo wywołana więcej razy niż miesięczna alokacja wywołań funkcji w Cloud Functions w ramach bezpłatnego poziomu), możesz usunąć funkcję Cloud Run lub projekt utworzony w kroku 2.
Aby usunąć funkcję Cloud Run wdrożona w Cloud Run, otwórz Cloud Run w Cloud Console (https://console.cloud.google.com/functions/) i usuń funkcje utworzone w tym CodeLab.
Aby usunąć funkcje Cloud Run wdrożone jako funkcje 2 generacji, otwórz Cloud Functions w konsoli Cloud na stronie https://console.cloud.google.com/functions/ i usuń funkcje utworzone w tym Codelab.
Jeśli chcesz usunąć cały projekt, otwórz stronę https://console.cloud.google.com/cloud-resource-manager, wybierz projekt utworzony w kroku 2 i kliknij Usuń. Jeśli usuniesz projekt, musisz zmienić projekty w Cloud SDK. Aby wyświetlić listę wszystkich dostępnych projektów, uruchom gcloud projects list
.