1. Wprowadzenie
Przegląd
Wersje Cloud Run umożliwiają określenie, które wersje mają otrzymywać ruch i jaki procent ruchu ma być do nich kierowany. Wersje umożliwiają przywrócenie poprzedniej wersji, stopniowe wdrażanie nowej wersji i dzielenie ruchu między wiele wersji.
W tym laboratorium dowiesz się, jak używać wersji do zarządzania ruchem w usłudze Cloud Run. Więcej informacji o wersjach znajdziesz w dokumentacji Cloud Run.
Czego się nauczysz
- Jak podzielić ruch między co najmniej 2 wersje usługi 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 Google Cloud.
- Usługa Cloud Run została już wdrożona. Na początek możesz na przykład wdrożyć usługę Cloud Run.
Ustawianie zmiennych środowiskowych
Możesz ustawić zmienne środowiskowe, których będziesz używać podczas naszych ćwiczeń z programowania.
PROJECT_ID=YOUR-PROJECT-ID
REGION=YOUR_REGION
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo
Tworzenie repozytorium Artifact Registry dla usługi
gcloud artifacts repositories create $AR_REPO \
--repository-format=docker \
--location=$REGION \
--description="codelab for finetuning using CR jobs" \
--project=$PROJECT_ID
3. Dzielenie ruchu
Ten przykład pokazuje, jak utworzyć usługę Cloud Run, która odczytuje zmienną środowiskową koloru i odpowiada nazwą wersji z tym kolorem tła.
W tym laboratorium używamy Pythona, ale możesz użyć dowolnego środowiska wykonawczego.
Ustawianie zmiennych środowiskowych
Możesz ustawić zmienne środowiskowe, których będziesz używać podczas naszych ćwiczeń z programowania.
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen SERVICE_NAME=traffic-revisions-color AR_REPO=traffic-revisions-color-repo
Tworzenie usługi
Najpierw utwórz katalog kodu źródłowego i przejdź do niego.
mkdir traffic-revisions-codelab && cd $_
Następnie utwórz plik main.py o tej treści:
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)
Następnie utwórz plik requirements.txt o tej treści:
Flask>=2.0.0 gunicorn>=20.0.0
Na koniec utwórz 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"]
Utwórz obraz w Artifact Registry za pomocą pakietów kompilacji przy użyciu Cloud Build:
gcloud builds submit \
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
Następnie wdróż pierwszą wersję w Cloud Run w kolorze ciemnozielonym:
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
Aby przetestować usługę, możesz otworzyć punkt końcowy bezpośrednio w przeglądarce. Kolor tła powinien być ciemnozielony.
Teraz wdróż drugą wersję z beżowym kolorem tła.
# 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
Teraz po odświeżeniu witryny zobaczysz tło w kolorze beżowym.
Podziel ruch po równo
Aby podzielić ruch między wersje w kolorach głębokiej zieleni morskiej i jasnobrązowym, musisz znaleźć identyfikatory wersji bazowych usług Cloud Run. Aby wyświetlić identyfikatory wersji, uruchom to polecenie:
gcloud run revisions list --service $SERVICE_NAME \ --region $REGION --format 'value(REVISION)'
Powinny pojawić się wyniki podobne do tych poniżej.
traffic-revisions-color-00003-qoq traffic-revisions-color-00002-zag
Aby podzielić ruch po równo między 2 wersje, uruchom to polecenie z wersjami:
gcloud run services update-traffic $SERVICE_NAME \ --region $REGION \ --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50
Testowanie podziału ruchu
Możesz przetestować usługę, odświeżając stronę w przeglądarce.
W połowie przypadków powinna wyświetlać się wersja w kolorze ciemnej zieleni morskiej, a w pozostałych – w kolorze beżowym. W danych wyjściowych zobaczysz też nazwę wersji, np.
<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>
4. Wdrażanie stopniowe
Z tej sekcji dowiesz się, jak stopniowo wdrażać zmiany w nowej wersji usługi Cloud Service. 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ą usługę Cloud Run.
Najpierw ustaw kolor tła na beige i wdroż funkcję o nazwie gradual-rollouts-colors.
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-colors \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--update-env-vars BG_COLOR=$BG_COLOR
Załóżmy, że chcemy stopniowo wprowadzać nową wersję z kolorem tła lawendowym.
Najpierw ustawmy bieżącą wersję beżową, aby otrzymywała 100% ruchu. Dzięki temu przyszłe wersje nie będą generować ruchu. Domyślnie Cloud Run kieruje 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. Zobacz dokumentację.
# 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
Zobaczysz dane wyjściowe podobne do Traffic: 100% radual-rollouts-colors-00001-yox
Teraz możesz wdrożyć nową wersję, która nie będzie otrzymywać ruchu. Zamiast wprowadzać zmiany w kodzie, możesz zaktualizować zmienną środowiskową BG_COLOR dla 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-colors \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--update-env-vars BG_COLOR=$BG_COLOR
Teraz, gdy otworzysz witrynę w przeglądarce, zobaczysz kolor beżowy, mimo że lawendowy był ostatnią wdrożoną wersją.
Testowanie wersji obsługującej 0% ruchu
Załóżmy, że udało Ci się potwierdzić, że Twoja wersja została wdrożona i obsługuje 0% ruchu. Mimo że wersja przeszła kontrole stanu, nadal chcesz sprawdzić, czy używa koloru tła lawendowego.
Aby przetestować wersję lawendową, możesz zastosować do niej tag. Tagowanie umożliwia bezpośrednie testowanie nowej wersji pod określonym adresem URL bez wysyłania do niej ruchu.
Najpierw pobierz adres URL obrazu najnowszej wersji (w kolorze lawendowym).
IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')
Teraz otaguj ten obraz powiązanym z nim kolorem.
gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION
Wyświetlą się dane wyjściowe podobne do tych:
The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Teraz, gdy otworzysz adres URL konkretnej wersji, zobaczysz kolor lawendowy.
Stopniowe zwiększanie ruchu
Teraz możesz zacząć wysyłać ruch do wersji lawendowej. Poniższy przykład pokazuje, jak wysłać 1% ruchu do koloru lawendowego.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=1
Aby wysłać 50% ruchu do koloru lawendowego, możesz użyć tego samego polecenia, ale zamiast 10% podać 50%.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=50
Powinna się wyświetlić lista z informacjami o tym, ile ruchu generuje każda wersja.
Traffic:
50% gradual-rollouts-colors-00001-hos
50% gradual-rollouts-colors-00004-mum
lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Gdy będziesz gotowy(-a) do pełnego wdrożenia koloru lawendowego, możesz ustawić go na 100%, aby zastąpić beżowy.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100
a teraz, gdy odwiedzisz witrynę, zobaczysz tylko lawendę.
5. Przywrócone
Załóżmy, że otrzymaliśmy wczesne opinie użytkowników, z których wynika, że wolą oni kolor beżowy od lawendowego, i musimy przywrócić kolor beżowy.
Aby wycofać zmiany do poprzedniej wersji (beżowej), uruchom to polecenie:
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-revisions $BEIGE_REVISION=100
a teraz, gdy odwiedzisz witrynę, zobaczysz beżowe tło.
Więcej informacji o operacjach przywracania znajdziesz w dokumentacji.
6. Gratulacje!
Gratulujemy ukończenia ćwiczenia!
Zalecamy zapoznanie się z dokumentacją dotyczącą wdrażania, wycofywania i migracji ruchu.
Omówione zagadnienia
- Jak podzielić ruch między co najmniej 2 wersje usługi 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ęczny limit wywołań Cloud Run w ramach bezpłatnej wersji), możesz usunąć usługę Cloud Run lub projekt utworzony w kroku 2.
Aby usunąć usługę Cloud Run, otwórz Cloud Run w konsoli Cloud pod adresem https://console.cloud.google.com/run/ i usuń funkcje utworzone w tym samouczku.
Jeśli zdecydujesz się 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. Listę wszystkich dostępnych projektów możesz wyświetlić, uruchamiając polecenie gcloud projects list.