1. Przegląd
W tym module utworzysz zadanie Cloud Run i skonfigurujesz zadanie Cloud Scheduler. Usługę menu Cymbal Eats wdrożysz za pomocą skryptu konfiguracji. Utworzysz zadanie Cloud Run, które wywołuje interfejs API usługi menu Cymbal Eats. Zadanie wykonasz za pomocą Google Cloud CLI i skonfigurujesz jego harmonogram. Wykonanie sprawdzisz, przeglądając logi i wykonując wywołania interfejsu Menu Service API, aby potwierdzić, że pozycje menu zostały usunięte.
Czym są zadania Cloud Run?
Zadanie Cloud Run uruchamia kontener, który nie obsługuje żądań sieciowych, ale wykonuje zadania operacyjne lub przetwarzanie danych. Kontener wykona zadanie i zakończy działanie.
Zadanie usługi czyszczenia
Zadanie usługi czyszczenia pobierze elementy menu w stanie Nieudane i je usunie. Gdy tworzone są nowe pozycje menu, obrazy są analizowane za pomocą interfejsu Vision API, aby sprawdzić, czy jest to produkt spożywczy. W przypadku zdjęć, które nie przejdą tej weryfikacji, stan pozycji menu zostanie zmieniony na „Nie udało się”, a następnie zostaną one usunięte przez zadanie czyszczenia.

Czego się nauczysz
W tym module nauczysz się:
- Tworzenie zadań Cloud Run
- Wykonywanie zadań Cloud Run
- Tworzenie zadań Cloud Scheduler
- Weryfikowanie wykonywania zadań
Wymagania wstępne
- Zakładamy, że użytkownik zna konsolę Cloud i środowiska powłoki.
- Znajomość usług Cloud Run i Cloud Scheduler może być pomocna, ale nie jest wymagana.
2. Konfiguracja i wymagania
Konfigurowanie projektu w Google 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óry nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i będzie obowiązywać przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego 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 repozytorium tego i przejść do katalogu zawierającego usługę menu:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
Wdróż usługę Menu w Cloud Run za pomocą skryptu konfiguracji. Usługa Menu to mikrousługa oparta na Javie, zbudowana przy użyciu platformy Quarkus i bazy danych Cloud SQL Postgres jako backendu. Usługa Menu jest zależnością środowiska wykonawczego zadania Cloud Run, które utworzysz w kolejnych krokach.
./setup.sh
Utworzenie wszystkich wymaganych komponentów zajmie około 10 minut.
Po wykonaniu powyższego polecenia przejdź do następnych kroków.
3. Poznawanie kodu zadania Cloud Run
Otwórz nową kartę w Cloud Shell, klikając ikonę plusa.

Przejdź do katalogu zawierającego usługę czyszczenia i sprawdź pliki, z których składa się zadanie:
cd ~/cymbal-eats/cleanup-service
Usługa cleanup-service 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"]
Rzeczywisty skrypt czyszczenia, wymieniony poniżej, zawiera polecenia umożliwiające uzyskanie listy pozycji menu o stanie „nieudany” i usunięcie ich przez wywołanie 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
Kilka uwag o skrypcie:
- Zmienne środowiskowe
FAILED_ITEM_AGEiMENU_SERVICE_URLzostaną ustawione podczas wdrażania i przekazane przez zadanie Cloud Run. FAILED_ITEM_AGE– liczba minut przed usunięciem elementu, którego nie udało się przetworzyć.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ługi:
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 prześlij 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 wyczyścić nieudane elementy menu starsze niż 1 minuta [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 otwórz sekcję ZADANIA Cloud Run i sprawdź utworzone zadanie.
Kliknij zadanie i przejrzyj 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 po utworzeniu zadania Cloud Run chcesz zmienić zmienne Failed Item Age lub Menu Service URL, 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 je w Cloud Run, wpisują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ć dane wyjściowe zadania, przejdź na kartę LOGI. W logach powinny być widoczne informacje o wieku nieudanego elementu i adresie URL usługi menu.

5. Konfigurowanie harmonogramu zadania Cloud Run
Cloud Scheduler to w pełni zarządzany harmonogram zadań cron klasy korporacyjnej. Umożliwia planowanie praktycznie dowolnych zadań, w tym zadań wsadowych, zadań big data, operacji na infrastrukturze w chmurze i innych.
Jedną ze sprawdzonych metod zapewniania bezpieczeństwa podczas pracy z zadaniami Cloud Scheduler jest wykonywanie każdego zadania przy użyciu osobnych danych logowania. W tym kroku 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 Cloud Scheduler będzie potrzebować uprawnień do wykonywania wywołań 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 skonfigurujesz harmonogram uruchamiania zadania usługi czyszczenia.
Cloud Scheduler obsługuje kilka typów celów.
- HTTP
- Pub/Sub
- App Engine HTTP
Utworzysz zadanie harmonogramu z użyciem typu docelowego HTTP.
Na potrzeby demonstracji zaplanujesz uruchamianie 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 jest używany do wywoływania zadania Cloud Run:
REGIONiPROJECT_ID– region Cloud Run i identyfikator projektu, w którym jest wdrożone zadanie usługi czyszczeniacleanup-service– nazwa zadania Cloud Run
W konsoli otwórz Cloud Scheduler, aby sprawdzić utworzone zadanie harmonogramu:

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

6. Testowanie zadania Cloud Run
Korzystając z punktów końcowych usługi Menu, możesz sprawdzić istniejące pozycje menu i ich stan:
curl ${MENU_SERVICE_URL}/menu | jq
Dane wyjściowe:
Zobaczysz 3 pozycje menu w stanie Ready.
Zmień stan elementu menu 1 na Failed:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
Odczekaj minutę. Aby element menu został usunięty, musi mieć 1 minutę, zgodnie z parametrem FAILED_ITEM_AGE.
Możesz poczekać na następne zaplanowane uruchomienie lub wymusić wykonanie zadania w konsoli.
Zadanie można uruchomić na kilka sposobów – za pomocą interfejsu lub wiersza poleceń.
W tym przykładzie uruchom polecenie w Cloud Shell(opcja 3), aby wywołać zadanie.
- W Cloud Scheduler, wybierając „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 pozycje menu w stanie Ready.
7. Gratulacje!
Gratulacje! Codelab został ukończony.
Omówione zagadnienia:
- Jak tworzyć zadania Cloud Run
- Jak wykonywać zadania Cloud Run
- Tworzenie zadań Cloud Scheduler
- Jak sprawdzić wykonanie zadań
Co dalej?
Zapoznaj się z innymi ćwiczeniami z programowania dotyczącymi Cymbal Eats:
- Aktywowanie Cloud Workflows za pomocą Eventarc
- Aktywowanie przetwarzania zdarzeń z Cloud Storage
- Nawiązywanie połączenia z prywatną instancją Cloud SQL z usługi Cloud Run
- Łączenie się z w pełni zarządzanymi bazami danych z usługi Cloud Run
- Zabezpieczanie aplikacji bezserwerowej za pomocą serwera proxy identyfikującego tożsamość (IAP)
- Bezpieczne wdrażanie w Cloud Run
- Zabezpieczanie ruchu przychodzącego w Cloud Run
- Łączenie się z prywatną bazą danych 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 w tym samouczku.