1. Omówienie
W tym laboratorium utworzysz zadanie Cloud Run i skonfigurujesz zadanie Cloud Scheduler. Usługę Cymbal Eats Menu Service wdrożesz za pomocą skryptu konfiguracyjnego. Utworzysz zadanie Cloud Run, które wywołuje interfejs API usługi Cymbal Eats Menu. Wykonasz zadanie za pomocą Google Cloud CLI i skonfigurujesz harmonogram. Aby sprawdzić wykonanie, przejrzyj logi i wykonaj wywołania interfejsu API do usługi menu, aby potwierdzić, że pozycje menu zostały usunięte.
Co to są zadania Cloud Run?
Zadanie Cloud Run uruchamia kontener, który nie obsługuje żądań sieciowych, ale wykonuje zadania operacyjne lub przetwarza dane. Kontenery będą wykonywać zadania i zamykać się po ich zakończeniu.
Zadanie usługi czyszczenia
Zadanie usługi czyszczenia pobierze elementy menu o stanie Nieudane i je usunie. Gdy tworzone są nowe pozycje menu, obrazy są analizowane za pomocą interfejsu Vision API, aby wykryć, czy jest to produkt spożywczy. W przypadku obrazów, które nie przejdą tej weryfikacji, stan elementów menu zostanie zmieniony na „Niepowodzenie”, a następnie usunięty przez zadanie czyszczenia.
Czego się nauczysz
Z tego modułu dowiesz się, jak:
- Tworzenie zadań Cloud Run
- Wykonywanie zadań Cloud Run
- Tworzenie zadań usługi Cloud Scheduler
- Weryfikowanie wykonania zadań
Wymagania wstępne
- Ten moduł zakłada, że użytkownik zna środowisko konsoli Cloud i powłoki.
- Doświadczenie w korzystaniu z Cloud Run i Cloud Scheduler może być przydatne, ale nie jest wymagane.
2. Konfiguracja i wymagania
Konfiguracja projektu Cloud
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, którego nie używają interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
- Identyfikator projektu jest niepowtarzalny w ramach wszystkich projektów Google Cloud i nie można go zmienić (po ustawieniu). Cloud Console automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem musisz odwoływać się do identyfikatora projektu (zazwyczaj jest to
PROJECT_ID
). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować inny losowy. Możesz też spróbować użyć własnego konta i sprawdzić, czy jest ono dostępne. Po tym kroku nie można go zmienić. Pozostanie ona niezmieniona przez cały czas trwania projektu. - Informacyjnie: istnieje jeszcze 3 wartość, numer projektu, którego używają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Cloud. Przejście przez ten moduł Codelab nie powinno wiązać się z wielkimi kosztami, jeśli w ogóle z nimi będzie. Aby wyłączyć zasoby, aby nie generować opłat po zakończeniu samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Konfiguracja środowiska
Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.
W Cloud Shell uruchom to polecenie, aby sklonować kod aplikacji z tego repozytorium, i przejdź do katalogu zawierającego usługę menu:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
Wdroż usługę Menu za pomocą skryptu konfiguracyjnego w Cloud Run. Usługa Menu to mikrousługa w Javie utworzona za pomocą frameworka Quarkus, która korzysta z bazy danych Cloud SQL for PostgreSQL jako backendu. Usługa Menu jest zależnością czasową zadania Cloud Run, które utworzysz w następnych krokach.
./setup.sh
Tworzenie wszystkich wymaganych komponentów zajmie około 10 minut.
Po wykonaniu tego polecenia wykonaj kolejne czynności.
3. Poznawanie kodu zadania Cloud Run
Kliknij ikonę plusa, aby otworzyć nową kartę w Cloud Shell.
Otwórz katalog zawierający usługę porządkowania i sprawdź pliki, które tworzą zadanie:
cd ~/cymbal-eats/cleanup-service
Usługa czyszczenia w tym katalogu zawiera plik Dockerfile
, który definiuje obraz kontenera dla zadania usługi czyszczenia z wymaganymi zależnościami(httpie, jq).
Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y httpie jq && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
Podany niżej skrypt czyszczenia zawiera polecenia służące do pobierania listy elementów menu o stanie „failed” (niepowodzenie) i usuwania ich przez wywoływanie interfejsu API usługi Menu.
script.sh
echo "FAILED_ITEM_AGE=$FAILED_ITEM_AGE"
echo "MENU_SERVICE_URL=$MENU_SERVICE_URL"
# Failed items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/failed | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber) )| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
# Processing items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/processing | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber))| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
Informacje o tym skrypcie:
- Zmienne środowiskowe
FAILED_ITEM_AGE
iMENU_SERVICE_URL
zostaną ustawione podczas wdrażania i przekazane przez zadanie Cloud Run. FAILED_ITEM_AGE
– liczba minut, po których element z wartością „Failed” zostanie usunięty.MENU_SERVICE_URL
– adres URL usługi Cymbal Eats Menu.
4. Tworzenie zadania Cloud Run
Następnie utworzysz obraz kontenera i opublikujesz go w Artifact Registry.
Ten obraz kontenera zostanie użyty do utworzenia zadania Cloud Run.
Włącz interfejsy API usług:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudscheduler.googleapis.com \
--quiet
Ustaw zmienne środowiskowe:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
export REGION=us-east1
export MENU_SERVICE_NAME=menu-service
Utwórz nowe repozytorium Artifact Registry, w którym będą przechowywane obrazy Dockera na potrzeby zadania czyszczenia:
gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION
Utwórz obraz kontenera za pomocą Cloud Build i przenieś go do Artifact Registry za pomocą jednego polecenia:
gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest
Przykładowe dane wyjściowe:
DURATION: 35S SOURCE: gs://cymbal-eats-14906-569_cloudbuild/source/1657126400.933586-dc3e91ec85934a55bb6d2f7012611365.tgz IMAGES: us-east1-docker.pkg.dev/cymbal-eats-14906-569/cymbal-eats/cleanup-service (+1 more) STATUS: SUCCESS
Po zakończeniu publikowania przejdź do Artifact Registry i sprawdź opublikowany obraz:
Wróć na drugą kartę Cloud Shell. Uruchom to polecenie, aby opisać usługę Menu i zapisać adres URL w zmiennej środowiskowej. Ta zmienna środowiskowa będzie używana do konfigurowania zadania Cloud Run.
MENU_SERVICE_URL=$(gcloud run services describe $MENU_SERVICE_NAME \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
Utwórz zadanie Cloud Run, aby usunąć nieudane pozycje menu, które mają więcej niż 1 minutę [ustawione przez FAILED_ITEM_AGE
].
gcloud beta run jobs create cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
Przykładowe dane wyjściowe:
Creating Cloud Run job [cleanup-service] in project [cymbal-eats] region [us-east1] OK Creating job... Done. Done. Job [cleanup-service] has successfully been created.
W konsoli przejdź do sekcji ZADAŃ Cloud Run i sprawdź utworzone zadanie.
Kliknij zadanie i poznaj dostępne karty: HISTORIA, LOGI, KONFIGURACJA i YAML.
Sprawdź, czy zmienne środowiskowe zostały ustawione, przeglądając sekcję KONFIGURACJA zadania w konsoli:
(Opcjonalnie) Jeśli chcesz zmienić zmienne wiek nieudanego elementu lub adres URL usługi menu po utworzeniu zadania Cloud Run, możesz użyć polecenia update:
gcloud beta run jobs update cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
Aby zweryfikować zadanie, uruchom zadanie Cloud Run, wykonując to polecenie:
gcloud beta run jobs execute cleanup-service --region=$REGION
Przykładowe dane wyjściowe:
OK Creating execution... Done. OK Provisioning resources... Done. Execution [cleanup-service-rlxs4] has successfully started running. View details about this execution by running: gcloud beta run jobs executions describe cleanup-service-rlxs4
Aby sprawdzić wyniki zadania, otwórz kartę LOGI. W logach powinien pojawić się adres URL usługi menu i wiek nieudanej pozycji.
5. Konfigurowanie harmonogramu dla zadania Cloud Run
Cloud Scheduler to w pełni zarządzany planista zadań cron na potrzeby przedsiębiorstw. Umożliwia planowanie praktycznie dowolnego zadania, w tym zadań wsadowych, zadań big data oraz operacji na infrastrukturze w chmurze.
Jedną ze sprawdzonych metod zapewniania bezpieczeństwa podczas pracy z zadaniem Cloud Scheduler jest wykonywanie każdego zadania przy użyciu oddzielnych poświadczeń. Na tym etapie utwórz konto usługi, które będzie używane przez zadanie harmonogramu czyszczenia.
export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa
gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}
Zadanie usługi Cloud Scheduler będzie wymagać uprawnień do wywoływania zadań Cloud Run.
Przypisz rolę Cloud Run Invoker
do konta usługi używanego w zadaniu Cloud Scheduler:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Następnie skonfiguruj harmonogram uruchamiania zadania usługi sprzątania.
Cloud Scheduler obsługuje kilka typów celów.
- HTTP
- Pub/Sub
- App Engine HTTP
Utworzysz zadanie harmonogramu przy użyciu typu docelowego HTTP.
Na potrzeby demonstracji uruchom go co 5 minut.
gcloud scheduler jobs create http cleanup-schedule \
--location $REGION \
--schedule="*/5 * * * *" \
--uri="https://$REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/$PROJECT_ID/jobs/cleanup-service:run" \
--http-method POST \
--oauth-service-account-email ${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
Sprawdź parametr uri
, który służy do wywołania zadania Cloud Run:
REGION
iPROJECT_ID
– region i identyfikator projektu Cloud Run, w którym wdrożono zadanie usługi czyszczenia.cleanup-service
– nazwa zadania Cloud Run,
Aby sprawdzić utworzone zadanie harmonogramowania, otwórz w konsoli Cloud Scheduler:
Sprawdź dostępne opcje w menu Działania.
6. Testowanie zadania Cloud Run
Za pomocą punktów końcowych usługi menu możesz sprawdzić istniejące pozycje menu oraz ich stan:
curl ${MENU_SERVICE_URL}/menu | jq
Dane wyjściowe:
Zobaczysz 3 pozycje menu w stanie Ready
.
Zmień stan pozycji menu 1 na Failed
:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
Zaczekaj minutę. Aby można było usunąć pozycję menu, musi ona mieć 1 minutę, zgodnie z parametrem FAILED_ITEM_AGE
.
Możesz poczekać na następne zaplanowane uruchomienie lub wymusić wykonanie zadania w konsoli.
Zadania można uruchamiać na kilka sposobów: za pomocą interfejsu użytkownika lub z wiersza poleceń.
W tym przykładzie uruchom polecenie w Cloud Shell(opcja 3), aby uruchomić zadanie.
- W Cloud Scheduler wybierz „Wymuś uruchomienie zadania” w menu „Działania”.
- W zadaniu Cloud Run kliknij przycisk „WYKONAJ”.
- W Cloud Shell uruchom to polecenie:
gcloud beta run jobs execute cleanup-service --region=$REGION
Przejdź do sekcji Zadania Cloud Run, otwórz kartę LOGI i sprawdź, czy element menu został usunięty.
Aby znaleźć logi, przefiltruj je pod kątem słowa kluczowego „deleting” (usuwanie).
Użyj punktów końcowych usługi menu, aby sprawdzić istniejące pozycje menu za pomocą punktu końcowego REST.
curl ${MENU_SERVICE_URL}/menu | jq
Dane wyjściowe:
Zobaczysz 2 elementy menu w stanie Ready
.
7. Gratulacje!
Gratulacje! Masz ukończone zajęcia.
Omówione zagadnienia:
- Tworzenie zadań Cloud Run
- Jak wykonywać zadania Cloud Run
- Jak tworzyć zadania usługi Cloud Scheduler
- Jak sprawdzić wykonanie zadań
Co dalej:
Inne ćwiczenia z programowania dotyczące Cymbal Eats:
- Aktywowanie przepływów pracy w Cloud za pomocą Eventarc
- Wywoływanie przetwarzania zdarzeń z Cloud Storage
- Łączenie z Private CloudSQL z Cloud Run
- Łączenie z w pełni zarządzanymi bazami danych z Cloud Run
- Bezpieczeństwo aplikacji bezserwerowej dzięki serwerowi proxy identyfikującemu tożsamość (IAP)
- Bezpieczne wdrażanie w Cloud Run
- Bezpieczeństwo ruchu przychodzącego Cloud Run
- Łączenie z prywatną usługą AlloyDB z Autopilota w GKE
Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.
Usuwanie projektu
Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.