1. Omówienie
W tym module utworzysz zadanie Cloud Run i skonfigurujesz zadanie Cloud Scheduler. Wdrożysz usługę Cymbal Eats Menu za pomocą skryptu konfiguracji. Utworzysz zadanie Cloud Run, które będzie wykonywać wywołania interfejsu API usługi Cymbal Eats Menu. Wykonasz zadanie za pomocą interfejsu wiersza poleceń Google Cloud i skonfigurujesz jego harmonogram. Aby zweryfikować wykonanie, przejrzyj dzienniki i wywołaj usługę menu w celu potwierdzenia, ż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 uruchomi zadanie i zamknie je po zakończeniu.
Zadanie usługi czyszczenia
Zadanie usługi czyszczenia pobierze pozycje menu o stanie „Niepowodzenie” i je usunie. Podczas tworzenia nowych pozycji menu obrazy są analizowane za pomocą interfejsu Vision API w celu określenia, czy jest to danie spożywcze. W przypadku obrazów, które nie przejdą weryfikacji, stan pozycji menu zostanie zmieniony na „Niepowodzenie”, a następnie usunięte przez zadanie czyszczenia.
Czego się nauczysz
Z tego modułu nauczysz się:
- Tworzenie zadań Cloud Run
- Wykonywanie zadań Cloud Run
- Tworzenie zadań usługi Cloud Scheduler
- Sprawdź wykonanie zadań
Wymagania wstępne
- W tym module zakładamy, że znasz środowisko Cloud Console i środowiska powłoki.
- Wcześniejsze środowiska Cloud Run i Cloud Scheduler są przydatne, ale nie wymagane.
2. Konfiguracja i wymagania
Konfigurowanie projektu Cloud
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
- Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on
PROJECT_ID
). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu. - Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartoś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 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 za pomocą skryptu konfiguracji w Cloud Run. Usługa Menu to oparty na Javie mikroserwis, który na potrzeby backendu korzysta z bazy danych Cloud SQL Postgres, na bazie platformy Quarkus. Usługa Menu jest zależnością w czasie działania dla 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 kolejnych kroków.
3. Zbadaj kod zadania Cloud Run
Otwórz nową kartę w Cloud Shell, klikając ikonę plusa.
Przejdź do katalogu zawierającego usługę czyszczenia i przejrzyj pliki tworzące zadanie:
cd ~/cymbal-eats/cleanup-service
Usługa czyszczenia w tym katalogu zawiera element Dockerfile
, który definiuje obraz kontenera na potrzeby 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"]
Wymieniony poniżej skrypt czyszczenia zawiera polecenia do pobrania listy elementów menu, w przypadku których wystąpiły błędy, i usuwania ich przez wywołania usługi Menu za pomocą wywołań interfejsu API.
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
Zwróć uwagę na te informacje o 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 upływie których element, którego nie udało się przenieść, zostanie usunięty.MENU_SERVICE_URL
– adres URL usługi Cymbal Eats Menu.
4. Tworzenie zadania Cloud Run
Teraz 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 do przechowywania obrazów 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 przekaż 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 opublikowaniu otwórz Artifact Registry i sprawdź opublikowany obraz:
Wróć na drugą kartę Cloud Shell. Uruchom poniższe 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 elementy menu, które są starsze 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.
Otwórz w konsoli sekcję ZADANIA Cloud Run i sprawdź utworzone zadanie.
Kliknij zadanie i przejrzyj dostępne karty: HISTORY, LOGS, CONFIGURATION i YAML.
Sprawdź, czy zmienne środowiskowe zostały ustawione, sprawdzając sekcję CONFIGURATION w konsoli:
(Opcjonalnie) Jeśli chcesz zmienić zmienne Wiek elementu lub adresu URL usługi menu, których nie udało się zmienić, 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 sprawdzić zadanie, uruchom je, uruchamiają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
Otwórz kartę LOGS, aby sprawdzić dane wyjściowe zadania. W dziennikach powinny pojawić się błędy dotyczące wieku elementu i adresu URL usługi menu.
5. Skonfiguruj harmonogram zadania Cloud Run
Cloud Scheduler to w pełni zarządzane narzędzie do planowania zadań cron dla firm. Pozwala zaplanować praktycznie dowolne zadania, w tym zadania wsadowe, zadania big data, operacje w infrastrukturze w chmurze i inne.
Jedną ze sprawdzonych metod w zakresie bezpieczeństwa podczas pracy z zadaniem usługi Cloud Scheduler jest wykonanie każdego zadania za pomocą oddzielnych danych logowania. W tym kroku utworzysz konto usługi, które będzie używane przez zadanie algorytmu szeregowania czyszczenia.
export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa
gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}
Zadanie Cloud Scheduler wymaga uprawnień do wywoływania zadań Cloud Run.
Przypisz rolę Cloud Run Invoker
do konta usługi używanego w zadaniu usługi 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.
Usługa Cloud Scheduler obsługuje wiele typów celów.
- HTTP
- Pub/Sub
- App Engine HTTP
Utworzysz zadanie algorytmu szeregowania z użyciem typu docelowego HTTP.
Dla celów demonstracyjnych zaplanujesz jego 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
używany do wywoływania zadania Cloud Run:
REGION
iPROJECT_ID
– region Cloud Run i identyfikator projektu, w których zostało wdrożone zadanie usługi czyszczeniacleanup-service
– nazwa zadania Cloud Run
W konsoli otwórz Cloud Scheduler, aby sprawdzić utworzone zadanie algorytmu szeregowania:
Sprawdź opcje dostępne w menu Działania.
6. Testowanie zadania Cloud Run
Za pomocą punktów końcowych usługi menu przejrzyj 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 pozycji menu nr 1 na Failed
:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
Odczekaj minutę. Aby można było usunąć pozycję menu, musi ona mieć 1 minutę, zgodnie z wartością ustawioną przez parametr FAILED_ITEM_AGE
.
Możesz zaczekać na następne zaplanowane uruchomienie lub wymusić wykonanie zadania za pomocą konsoli.
Zadanie można aktywować na kilka sposobów – za pomocą interfejsu użytkownika lub wiersza poleceń.
W tym przykładzie, aby aktywować zadanie, uruchom polecenie w Cloud Shell(opcja 3).
- W Cloud Scheduler wybierz opcję „Wymuś uruchomienie zadania”. w menu Czynności.
- W sekcji Zadanie Cloud Run kliknij „EXECUTE” (WYKONAJ”. Przycisk
- W Cloud Shell uruchom to polecenie:
gcloud beta run jobs execute cleanup-service --region=$REGION
Przejdź do sekcji ZADANIA w Cloud Run, otwórz kartę LOGS (LOGS) i sprawdź, czy element menu został usunięty.
Przefiltruj dzienniki pod kątem „usuwania” słowa kluczowego, aby znaleźć dzienniki.
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:
W stanie „Ready
” zobaczysz 2 pozycje menu.
7. Gratulacje!
Gratulacje. Udało Ci się ukończyć ćwiczenia z programowania.
Omówione zagadnienia:
- Jak tworzyć zadania Cloud Run
- Jak wykonywać zadania Cloud Run
- Jak tworzyć zadania usługi Cloud Scheduler
- Jak sprawdzić wykonanie zadań
Co dalej:
Poznaj inne ćwiczenia z programowania Cymbal Eats:
- Aktywowanie przepływów pracy w Cloud za pomocą Eventarc
- Aktywowanie przetwarzania zdarzeń z Cloud Storage
- Łączenie z Private Cloud SQL z poziomu Cloud Run
- Łączenie z w pełni zarządzanymi bazami danych z Cloud Run
- Bezpieczna aplikacja bezserwerowa z serwerem proxy identyfikującym tożsamość (IAP)
- Bezpieczne wdrażanie w Cloud Run
- Zabezpieczanie ruchu przychodzącego w Cloud Run
- Łączenie z prywatnym 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.
Usuwam projekt
Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.