Aktywowanie Cloud Run ze zdarzeniami Eventarc

1. Wprowadzenie

894762ebb681671c.png

Cloud Run umożliwia uruchamianie bezstanowych kontenerów w w pełni zarządzanym środowisku. Rozwiązanie to jest oparte na platformie open source Knative, co pozwala uruchamiać w pełni zarządzane kontenery w Cloud Run lub kontenery w klastrze Google Kubernetes Engine przy użyciu Cloud Run for Anthos.

cb762f29e9183a3f.png

Eventarc ułatwia łączenie różnych usług (Cloud Run, Cloud Functions, Workflows) 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, przesyłaniem, zabezpieczaniem, autoryzacją i obsługą błędów związanych ze zdarzeniami, co zwiększa elastyczność programistów i odporność aplikacji.

W tym module dowiesz się więcej o Eventarc. Dokładniej rzecz ujmując, będziesz nasłuchiwać zdarzeń z usług Pub/Sub, Cloud Storage i logów kontrolnych Cloud za pomocą Eventarc i przekazywać je do usługi Cloud Run.

Czego się nauczysz

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

2. Wizja Eventarc

Eventarc ma na celu dostarczanie zdarzeń z różnych źródeł zdarzeń Google, Google Cloud i innych firm do miejsc docelowych zdarzeń Google Cloud.

59b147dc030b2b0b.png

Źródła Google Cloud

Źródła zdarzeń, które są usługami należącymi do Google Cloud

Źródła Google

Źródła zdarzeń, które są usługami Google, takimi jak Gmail, Hangouts, Android Management i inne.

Źródła niestandardowe

Źródła zdarzeń, które nie są produktami Google i są tworzone przez samych użytkowników.

Źródła zewnętrzne

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

Zdarzenia są normalizowane do formatu CloudEvents v1.0, aby zapewnić interoperacyjność między usługami. CloudEvents to niezależna od dostawcy otwarta specyfikacja opisująca dane zdarzeń w popularnych formatach, która umożliwia 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 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óry nie jest używany przez interfejsy API Google. Możesz go w dowolnym momencie zaktualizować.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i jest niezmienny (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 modułów z kodem musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako PROJECT_ID). Jeśli Ci się nie podoba, wygeneruj inny losowy identyfikator lub spróbuj użyć własnego i sprawdź, czy jest dostępny. Po utworzeniu projektu jest on „zamrażany”.
  • Istnieje też trzecia wartość, czyli numer projektu, którego używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. 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ąć naliczenia opłat po zakończeniu tego samouczka, postępuj zgodnie z instrukcjami „czyszczenia” na końcu ćwiczenia. 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.

Uruchamianie Cloud Shell

Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. 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

wdrożyć usługę Cloud Run, która będzie odbierać zdarzenia, Wdrożysz kontener Hello w Cloud Run, który rejestruje 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. Aby sprawdzić, czy usługa została wdrożona, możesz otworzyć jej adres URL w dowolnym oknie przeglądarki.

5. Odkrywanie wydarzeń

Zanim utworzysz aktywatory w Eventarc, możesz sprawdzić, jakie są źródła zdarzeń, jakie rodzaje zdarzeń mogą one emitować i jak skonfigurować aktywatory, aby je wykorzystywać.

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 dowiedzieć się więcej 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 wyświetlić listę usług, które emitują określony typ zdarzenia:

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 może emitować każda usługa:

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 otrzymywania zdarzeń jest Cloud Pub/Sub. Każda aplikacja może publikować wiadomości w Pub/Sub, a te wiadomości mogą być dostarczane do Cloud Run za pomocą Eventarc.

Konfiguracja

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

gcloud services enable eventarc.googleapis.com

Potrzebujesz też konta usługi, które będzie 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, który będzie filtrować zdarzenia publikowane w temacie Pub/Sub wdrożonej usługi 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 w tle. Sprawdźmy to i przypiszmy do zmiennej:

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

Aby opublikować wiadomość w temacie, użyj gcloud:

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

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

69e0177e04a0d1af.png

Tworzenie na podstawie istniejącego tematu Pub/Sub

Domyślnie podczas tworzenia aktywatora Pub/Sub Eventarc tworzy w tle temat, który możesz wykorzystać jako temat transportowy między aplikacją a usługą Cloud Run. Jest to przydatne, gdy chcesz łatwo i szybko utworzyć aktywator oparty na Pub/Sub, ale czasami możesz chcieć użyć istniejącego tematu. Eventarc umożliwia określenie istniejącego tematu Pub/Sub w tym samym projekcie za pomocą flagi --transport-topic gcloud.

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

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

Utwórz aktywator:

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ć wyzwalacz, wysyłając wiadomość do tematu:

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

7. Tworzenie aktywatora Cloud Storage

W tym kroku utworzysz aktywator, który będzie nasłuchiwać zdarzeń z Cloud Storage.

Konfiguracja

Najpierw utwórz zasobnik, z którego będziesz odbierać zdarzenia:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

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

Przypisz rolę eventarc.eventReceiver, aby można było używać konta usługi 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

W przypadku aktywatorów Cloud Storage musisz też dodać rolę pubsub.publisher do konta usługi 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, aby kierować zdarzenia tworzenia nowych plików z zasobnika do 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 listę wszystkich aktywatorów, aby sprawdzić, czy aktywator został utworzony:

gcloud eventarc triggers list

Prześlij plik 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 Google Cloud, zobaczysz otrzymane zdarzenie:

904cfc93bb8e8df1.png

8. Tworzenie aktywatora logów kontrolnych Cloud

Aktywator Cloud Storage to lepszy sposób na nasłuchiwanie zdarzeń Cloud Storage, ale w tym kroku utworzysz aktywator logów kontrolnych Cloud, aby zrobić to samo.

Konfiguracja

Aby otrzymywać zdarzenia z usługi, musisz włączyć logi kontrolne Cloud. W konsoli Cloud wybierz IAM & AdminAudit Logs w menu u góry po lewej stronie. Na liście usług zaznacz Google Cloud Storage:

3c654597faed237c.png

Po prawej stronie upewnij się, że wybrane są opcje Admin, ReadWrite, a następnie kliknij Save:

1deb3ad78f11dd5f.png

Utwórz

Utwórz aktywator, aby kierować zdarzenia tworzenia nowych plików z zasobnika do 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 wyzwalaczy logów kontrolnych zajmuje trochę czasu. Aby sprawdzić, czy aktywator został utworzony, wyświetl listę wszystkich aktywatorów:

gcloud eventarc triggers list

Pole ACTIVE powinno mieć 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, tak jak wcześniej:

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

Jeśli sprawdzisz logi usługi Cloud Run w konsoli Google Cloud, zobaczysz otrzymane zdarzenie:

7be7859bcc8976f8.png

9. Poznaj interfejs Eventarc

W tym kroku zapoznasz się z interfejsem Eventarc w konsoli Google Cloud. W interfejsie Eventarc możesz wyświetlać wszystkie wyzwalacze, edytować i usuwać je oraz tworzyć nowe wyzwalacze w konsoli Google Cloud.

Otwórz sekcję Eventarc w Google Cloud:

81e139f17e0d29bf.png

Wyświetli się lista utworzonych wcześniej aktywatorów:

3240c7c830398718.png

Jeśli klikniesz wyzwalacz, możesz wyświetlić jego szczegóły, edytować go lub usunąć:

b4d8bbc6601a8b9e.png

Możesz też utworzyć nową regułę, klikając Create trigger i wypełniając szczegóły reguły:

3ee290ec72f130d5.png

10. Gratulacje!

Gratulujemy ukończenia ćwiczenia.

Omówione zagadnienia

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