Aktywowanie Cloud Run ze zdarzeniami Eventarc

1. Wprowadzenie

894762ebb681671c.png

Cloud Run umożliwia uruchamianie bezstanowych kontenerów w środowisku w pełni zarządzanym. Zostało ono stworzone na podstawie oprogramowania open source Knative, co pozwala uruchamiać w pełni zarządzane kontenery w Cloud Run lub kontenery w klastrze Google Kubernetes Engine za pomocą Cloud Run for Anthos.

cb762f29e9183a3f.png

Eventarc ułatwia łączenie różnych usług (Cloud Run, Cloud Functions, Workfklows) ze zdarzeniami z różnych źródeł. Umożliwia tworzenie architektur opartych na zdarzeniach, w których mikroserwisy są luźno sprzężone i rozproszone. Zajmuje się też pozyskiwaniem, dostarczaniem, bezpieczeństwem, autoryzacją i obsługą błędów, co zwiększa elastyczność programistów oraz odporność aplikacji.

Z tego ćwiczenia w Codelabs dowiesz się więcej o Eventarc. Dokładniej rzecz ujmując, będziesz nasłuchiwać zdarzeń z logów kontrolnych Pub/Sub, Cloud Storage i Cloud Audit przy użyciu Eventarc, a potem przekazywać je do usługi Cloud Run.

Czego się nauczysz

  • Wizja Eventarc
  • Odkrywanie zdarzeń w Eventarc
  • Tworzenie ujścia w Cloud Run
  • Tworzenie aktywatora dla Pub/Sub
  • Tworzenie aktywatora dla Cloud Storage
  • Tworzenie aktywatora logów kontrolnych Cloud
  • Poznaj interfejs Eventarc

2. Wizja Eventarc

Celem Eventarc jest dostarczanie zdarzeń z różnych źródeł Google, Google Cloud i zewnętrznych źródeł do miejsc docelowych zdarzeń Google Cloud.

59b147dc030b2b0b.png

Źródła Google Cloud

Źródła zdarzeń będące usługami należącymi do Google Cloud

Źródła Google

Źródła zdarzeń będące usługami Google, np. Gmail, Hangouts czy Zarządzanie urządzeniami z Androidem

Źródła niestandardowe

źródła zdarzeń, które nie są usługami Google i są tworzone przez użytkowników;

Źródła zewnętrzne

Źródła zdarzeń, które nie są własnością Google ani nie są tworzone przez klientów. Obejmuje to popularne źródła zdarzeń, takie jak Check Point CloudGuard, Datadog, ForgeRock czy Lacework, które należą do zewnętrznych dostawców i partnerów oraz są przez nie obsługiwane.

Zdarzenia są znormalizowane do formatu CloudEvents v1.0, aby zapewnić interoperacyjność między usługami. CloudEvents to otwarta specyfikacja otwarta przez dostawcę, która opisuje dane zdarzeń w typowych formatach, umożliwiając interoperacyjność między usługami, platformami i systemami.

3. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google i w każdej chwili możesz go zaktualizować.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (nie można go zmienić po ustawieniu). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz odwoływać się do identyfikatora projektu (który zwykle nazywa się PROJECT_ID), więc jeśli Ci się nie podoba, wygeneruj kolejny losowy kod lub wypróbuj swój własny i sprawdź, czy jest dostępny. Potem urządzenie jest „zawieszone”. po utworzeniu projektu.
  • Występuje trzecia wartość – numer projektu – używany przez niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby móc korzystać z zasobów i interfejsów API Cloud. 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, wykonaj czynności „wyczyść” znajdziesz na końcu tego ćwiczenia. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Uruchamianie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w Cloud.

W konsoli GCP kliknij ikonę Cloud Shell na górnym pasku narzędzi:

55efc1aaa7a4d3ad.png

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:

7ffe5cbb04455448.png

Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w tym module możesz wykonać w przeglądarce.

Zanim zaczniesz

W Cloud Shell sprawdź, czy identyfikator projektu jest skonfigurowany:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. Wdrażanie usługi Cloud Run

Wdróż usługę Cloud Run, aby odbierać zdarzenia. Wdrożysz kontener Hello w Cloud Run, który loguje zawartość CloudEvents.

Najpierw włącz wymagane usługi dla Cloud Run:

gcloud services enable run.googleapis.com

Wdróż kontener Hello w Cloud Run:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

Kiedy operacja zostanie wykonana, w wierszu poleceń wyświetli się URL usługi. Możesz otworzyć adres URL usługi w dowolnym oknie przeglądarki, aby sprawdzić, czy usługa została wdrożona.

5. Wykrywanie zdarzeń

Zanim utworzysz aktywatory w Eventarc, możesz dowiedzieć się, czym są źródła zdarzeń, jakie typy zdarzeń mogą generować i jak skonfigurować aktywatory w celu ich wykorzystania.

Aby wyświetlić listę różnych typów zdarzeń:

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

Aby uzyskać więcej informacji o poszczególnych typach zdarzeń:

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

Aby zobaczyć listę usług, które emitują zdarzenia określonego typu:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

Aby wyświetlić listę nazw metod (zdarzeń podrzędnych), które mogą generować poszczególne usługi:

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

6. Tworzenie aktywatora Pub/Sub

Jednym ze sposobów odbierania zdarzeń jest Cloud Pub/Sub. Każda aplikacja może publikować wiadomości w Pub/Sub, które mogą być dostarczane do Cloud Run przez Eventarc.

Konfiguracja

Zanim utworzysz jakiekolwiek aktywatory, włącz wymagane usługi dla Eventarc:

gcloud services enable eventarc.googleapis.com

Musisz też mieć konto usługi używane przez aktywatory. Utwórz konto usługi:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

Utwórz

Utwórz aktywator do filtrowania zdarzeń opublikowanych w temacie Pub/Sub w naszej wdrożonej usłudze Cloud Run:

TRIGGER_NAME=trigger-pubsub

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Test

Aktywator Pub/Sub tworzy temat pod okładkami. Sprawdźmy to i przypiszmy do zmiennej:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

Użyj polecenia gcloud, aby opublikować wiadomość w tym temacie:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

Usługa Cloud Run loguje treść wiadomości przychodzącej. Możesz to zobaczyć w sekcji Logi instancji Cloud Run:

69e0177e04a0d1af.png

Utwórz z istniejącym tematem Pub/Sub

Domyślnie, gdy tworzysz aktywator Pub/Sub, Eventarc tworzy temat pod okładkami, który możesz wykorzystać jako temat transportu między Twoją aplikacją a usługą Cloud Run. Jest to przydatne, gdy chcesz szybko i łatwo utworzyć aktywator oparty na Pub/Sub, ale czasami chcesz użyć istniejącego tematu. Eventarc pozwala określić istniejący temat Pub/Sub w tym samym projekcie za pomocą flagi gcloud --transport-topic.

Aby zobaczyć, jak to działa, utwórz temat Pub/Sub, który będzie używany jako temat transportu:

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

Utwórz regułę:

TRIGGER_NAME=trigger-pubsub-existing

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Możesz przetestować regułę, wysyłając wiadomość w temacie:

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

7. Utwórz aktywator Cloud Storage

W tym kroku utworzysz aktywator do nasłuchiwania zdarzeń z Cloud Storage.

Konfiguracja

Najpierw utwórz zasobnik do odbierania zdarzeń:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

Przypisz rolę eventarc.eventReceiver, aby konto usługi mogło być używane w aktywatorze Cloud Storage:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Musisz też dodać do konta usługi Cloud Storage rolę pubsub.publisher dla aktywatorów Cloud Storage:

SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

Utwórz

Utwórz aktywator do kierowania zdarzeń tworzenia nowych plików z zasobnika do swojej usługi:

TRIGGER_NAME=trigger-storage

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Test

Wyświetl wszystkie aktywatory, aby potwierdzić, że aktywator został utworzony:

gcloud eventarc triggers list

Przesyłanie pliku do zasobnika Cloud Storage:

echo "Hello World" > random.txt
gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Jeśli sprawdzisz logi usługi Cloud Run w konsoli Cloud, powinno być tam widoczne otrzymane zdarzenie:

904cfc93bb8e8df1.png

8. Utwórz aktywator logów kontrolnych Cloud

Chociaż aktywator Cloud Storage to lepszy sposób nasłuchiwania zdarzeń Cloud Storage, w tym kroku utworzysz aktywator logu kontrolnego Cloud, aby zrobić to samo.

Konfiguracja

Aby otrzymywać zdarzenia z usługi, musisz włączyć logi kontrolne Cloud. W Cloud Console wybierz IAM & Admin i Audit Logs w menu w lewym górnym rogu. Na liście usług zaznacz Google Cloud Storage:

3c654597faed237c.png

Po prawej stronie sprawdź, czy Admin, Read i Write są zaznaczone, i kliknij Save:

1deb3ad78f11dd5f.png

Utwórz

Utwórz aktywator do kierowania zdarzeń tworzenia nowych plików z zasobnika do swojej usługi:

TRIGGER_NAME=trigger-auditlog-storage

gcloud eventarc triggers create $TRIGGER_NAME\
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.audit.log.v1.written" \
  --event-filters="serviceName=storage.googleapis.com" \
  --event-filters="methodName=storage.objects.create" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Test

Inicjowanie aktywatorów logów kontrolnych może trochę potrwać. Aby sprawdzić, czy reguła została utworzona, wyświetl listę wszystkich wyzwalaczy:

gcloud eventarc triggers list

Zobaczysz, że pole ACTIVE zawiera wartość Yes:

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

Prześlij ten sam plik do zasobnika Cloud Storage co wcześniej:

gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Jeśli sprawdzisz logi usługi Cloud Run w konsoli Cloud, powinno być tam widoczne otrzymane zdarzenie:

7be7859bcc8976f8.png

9. Poznaj interfejs Eventarc

W tym kroku poznasz interfejs użytkownika Eventarc w konsoli Google Cloud. W interfejsie Eventarc możesz przeglądać wszystkie aktywatory, edytować je i usuwać, a także tworzyć nowe aktywatory w Google Cloud Console.

Otwórz sekcję Eventarc w Google Cloud:

81e139f17e0d29bf.png

Zobaczysz listę utworzonych wcześniej aktywatorów:

3240c7c830398718.png

Po kliknięciu reguły możesz wyświetlić jej szczegóły, edytować ją lub usunąć:

b4d8bbc6601a8b9e.png

Możesz też utworzyć nową regułę. W tym celu kliknij Create trigger i podaj jej szczegóły:

3ee290ec72f130d5.png

10. Gratulacje!

Gratulujemy ukończenia ćwiczeń z programowania.

Omówione zagadnienia

  • Wizja Eventarc
  • Odkrywanie zdarzeń w Eventarc
  • Tworzenie ujścia w Cloud Run
  • Tworzenie aktywatora dla Pub/Sub
  • Tworzenie aktywatora dla Cloud Storage
  • Tworzenie aktywatora logów kontrolnych Cloud
  • Poznaj interfejs Eventarc