Aktywowanie zadań Cloud Run za pomocą usługi Cloud Scheduler

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.

d74200f0bd14d350.png

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

  1. 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ć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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.

eb0157a992f16fa3.png

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.

45f480cd1b9a995.png

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

fb95ae38baa7c543.png

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.

b12c8e312de3b66.png

Sprawdź, czy zmienne środowiskowe zostały ustawione, przeglądając sekcję KONFIGURACJA zadania w konsoli:

724c2919d05349c8.png

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

518cb00036a2561f.png

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 i PROJECT_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:

3bc9120df7fc6ed.png

Sprawdź dostępne opcje w menu Działania.

7945908025dd2f2b.png

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.

  1. W Cloud Scheduler wybierz „Wymuś uruchomienie zadania” w menu „Działania”.

6c8cbeae6165ba4a.png

  1. W zadaniu Cloud Run kliknij przycisk „WYKONAJ”.

229c22288882b5c3.png

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

50829ae27b135b2d.png

Aby znaleźć logi, przefiltruj je pod kątem słowa kluczowego „deleting” (usuwanie).

d94fb9e444b1c1b8.png

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:

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.