1. Wprowadzenie
Omówienie
Funkcje Cloud Run to nowy sposób wdrażania zadań za pomocą znanych paradygmatów zdarzeń GCF i sygnatury funkcji. Zamiast korzystać z naszego procesu kompilacji i konfiguracji wdrożenia, funkcje Cloud Run dają Ci bezpośrednią kontrolę nad podstawową usługą utworzoną w Cloud Run.
Dzięki funkcjom Cloud Run zapewniamy prosty interfejs użytkownika wdrożenia źródła Cloud Run, co daje deweloperom pełną kontrolę nad ich obciążeniami za pomocą konfiguracji Cloud Run.
Z tej sekcji dowiesz się, jak wdrożyć funkcję uruchamianą po wystąpieniu zdarzenia w Node. Wdrożysz funkcję, która jest wywoływana za każdym razem, gdy obiekt jest finalizowany w zasobniku Google Cloud Storage.
W tym ćwiczeniu przykłady kodu korzystają z sampli nodejs. Możesz jednak używać przykładów kodu Cloud Functions 2 generacji w wybranym języku:
- Przykłady funkcji Pythona
- Przykłady funkcji Node.js
- Przykłady funkcji Go
- Przykłady funkcji Java
- Przykłady funkcji PHP
- Przykłady funkcji Ruby
- Przykłady funkcji.NET
Czego się nauczysz
- Jak wdrożyć funkcję Cloud Run sterowaną zdarzeniami, która jest wywoływana za każdym razem, gdy obiekt jest przesyłany do zasobnika GCS
- Jak utworzyć konto usługi z odpowiednimi rolami, aby odbierać zdarzenia z Cloud Storage i wywoływać funkcję Cloud Run
2. Konfigurowanie zmiennych środowiskowych i włączanie interfejsów API
Aktualizacja interfejsu wiersza poleceń gcloud
Ten warsztat wymaga zainstalowania najnowszej wersji interfejsu wiersza poleceń gcloud. Aby zaktualizować interfejs wiersza poleceń, uruchom:
gcloud components update
Włącz interfejsy API
Zanim zaczniesz korzystać z tego ćwiczenia, musisz włączyć kilka interfejsów API. Ten warsztat wymaga korzystania z tych interfejsów API. Aby włączyć te interfejsy API, uruchom to polecenie:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com
Konfigurowanie zmiennych środowiskowych
Możesz ustawić zmienne środowiskowe, których będziesz używać w tym ćwiczeniu.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID SERVICE_NAME=crf-event-codelab BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME TRIGGER_NAME=$SERVICE_NAME-trigger
3. Tworzenie zasobnika danych i konta usługi
Utwórz zasobnik na dane
Aby utworzyć zasobnik Cloud Storage, uruchom to polecenie:
gsutil mb -l us-central1 gs://$BUCKET_NAME
Tworzenie konta usługi
W tym przykładzie utworzysz konto usługi z wymaganymi uprawnieniami EventArc i rolą Wywołujący Cloud Run, aby odbierać zdarzenia z Cloud Storage i wywoływać funkcję Cloud Run.
Najpierw utwórz konto usługi.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_ACCOUNT="cloud-run-functions" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run functions Eventarc service account"
Następnie przypisz do konta usługi powiązanego z aktywatorem Eventarc rolę Odbiorca zdarzeń Eventarc (roles/eventarc.eventReceiver) w projekcie, aby aktywator mógł odbierać zdarzenia od dostawców zdarzeń.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
Następnie przypisz do konta usługi rolę wywołującego Cloud Run, aby mogło wywołać funkcję.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
4. Tworzenie i wdrażanie funkcji
Najpierw utwórz katalog dla kodu źródłowego i przejdź do niego.
mkdir ../$SERVICE_NAME && cd $_
Następnie utwórz plik package.json
z podaną niżej treścią:
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
Następnie utwórz plik index.js
z podaną niżej treścią:
const functions = require("@google-cloud/functions-framework"); // Register a CloudEvent callback with the Functions Framework that will // be triggered by Cloud Storage. functions.cloudEvent("helloGCS", (cloudEvent) => { console.log(`Event ID: ${cloudEvent.id}`); console.log(`Event Type: ${cloudEvent.type}`); const file = cloudEvent.data; console.log(`Bucket: ${file.bucket}`); console.log(`File: ${file.name}`); console.log(`Metageneration: ${file.metageneration}`); console.log(`Created: ${file.timeCreated}`); console.log(`Updated: ${file.updated}`); });
Teraz możesz wdrożyć funkcję Cloud Run, wykonując to polecenie:
gcloud beta run deploy $SERVICE_NAME \ --source . \ --function helloGCS \ --region $REGION \ --no-allow-unauthenticated
Uwaga:
- parametr –source służy do informowania Cloud Run o tym, że funkcja ma zostać skompilowana w usługę opartą na kontenerze, którą można uruchomić.
- flaga –function (nowa) służy do ustawienia punktu wejścia nowej usługi jako sygnatury funkcji, którą chcesz wywołać.
- (opcjonalnie) parametr –no-allow-unauthenticated, aby uniemożliwić publiczne wywoływanie funkcji.
Możesz wyświetlić nową usługę crf-nodejs-event
, uruchamiając to polecenie:
gcloud beta run services describe $SERVICE_NAME
5. Tworzenie zdarzenia
Możemy utworzyć w usłudze Eventarc funkcję, która będzie wysyłać wiadomości do naszej funkcji za każdym razem, gdy obiekt zostanie sfinalizowany w Google Cloud Storage:
BUCKET_REGION=$REGION gcloud eventarc triggers create $TRIGGER_NAME \ --location=$REGION \ --destination-run-service=crf-nodejs-event \ --destination-run-region=$BUCKET_REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --service-account=$SERVICE_ACCOUNT_ADDRESS
Uwaga:
- gcs-function-trigger to nazwa reguły.
- crf-nodejs-event to nazwa usługi Cloud Run, w której funkcja jest wdrożona.
- w przypadku parametru –event-filters nie używaj prefiksu gs:// w nazwie zasobnika.
Szczegółowy samouczek konfigurowania usługi Trigger z Cloud Storage za pomocą Eventarc znajdziesz w dokumentacji Cloud Run: https://cloud.google.com/run/docs/tutorials/eventarc
6. Testowanie funkcji
Po zakończeniu wdrażania zobaczysz adres URL usługi. Aby wywołać funkcję, musisz wysłać uwierzytelnione żądanie z tokenem tożsamości lub tokenem tożsamości podmiotu, który ma rolę Wywołujący Cloud Run, jak pokazano poniżej:
# get the Service URL SERVICE_URL="$(gcloud run services describe crf-nodejs-event --region us-central1 --format 'value(status.url)')" # invoke the service curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Funkcja została wdrożona, a jej aktywator został utworzony, więc możemy ją wywołać.
Utwórz plik i prześlij go do zasobnika Cloud Storage. Możesz to zrobić w interfejsie internetowym Cloud Console lub za pomocą narzędzia wiersza poleceń gsutil, np.
echo "hello world" > test.txt gsutil cp test gs://$BUCKET_NAME
Po przesłaniu pliku zostanie wygenerowane zdarzenie, a funkcja wydrukuje podstawowe informacje o obiekcie, np. nazwę pliku. Wyniki znajdziesz w logach funkcji w konsoli Cloud. Możesz też wysłać zapytanie o te dane za pomocą interfejsu wiersza poleceń gcloud:
gcloud logging read "resource.labels.service_name=crf-nodejs-event AND textPayload: File" --format=json
Powinny się wyświetlić te dane wyjściowe
"textPayload": "File: test.txt"
7. Gratulacje!
Gratulujemy ukończenia ćwiczenia.
Zalecamy zapoznanie się z dokumentacją funkcji Cloud Run.
Omówione zagadnienia
- Jak wdrożyć funkcję Cloud Run sterowaną zdarzeniami, która jest wywoływana za każdym razem, gdy obiekt jest przesyłany do zasobnika GCS
- Jak utworzyć konto usługi z odpowiednimi rolami, aby odbierać zdarzenia z Cloud Storage i wywoływać funkcję Cloud Run
8. Czyszczenie danych
Aby uniknąć przypadkowych opłat (np. jeśli usługa Cloud Run zostanie przypadkowo wywołana więcej razy niż miesięczny limit wywołań usługi Cloud Run w wersji bezpłatnej), możesz usunąć usługę Cloud Run lub projekt utworzony w kroku 2.
Aby usunąć usługi Cloud Run, otwórz Cloud Run w konsoli Google Cloud na stronie https://console.cloud.google.com/run/ i usuń usługę crf-event-codelab
utworzoną w tym samouczku.
Jeśli chcesz usunąć cały projekt, otwórz stronę https://console.cloud.google.com/cloud-resource-manager, wybierz projekt utworzony w kroku 2 i kliknij Usuń. Jeśli usuniesz projekt, musisz zmienić projekty w Cloud SDK. Aby wyświetlić listę wszystkich dostępnych projektów, uruchom gcloud projects list
.