1. Wprowadzenie
Przegląd
Funkcje Cloud Run to nowy sposób wdrażania zbiorów zadań z wykorzystaniem znanych paradygmatów zdarzeń i sygnatury funkcji GCF. Zamiast korzystać z naszego procesu kompilacji i konfiguracji wdrożenia, funkcje Cloud Run zapewniają bezpośrednią kontrolę nad usługą utworzoną w Cloud Run.
W przypadku funkcji Cloud Run udostępniamy prosty interfejs użytkownika wdrażania źródła Cloud Run, który zapewnia programistom pełną kontrolę nad ich obciążeniami za pomocą konfiguracji Cloud Run.
Z tej sekcji dowiesz się, jak wdrożyć funkcję opartą na zdarzeniach w Node. Wdrożysz funkcję, która jest wywoływana za każdym razem, gdy obiekt jest finalizowany w zasobniku Cloud Storage.
W przykładach poniżej używamy próbek nodejs. Możesz jednak użyć przykładowych kodów Cloud Functions 2 generacji w wybranym języku:
- Przykłady funkcji Pythona
- Przykłady funkcji Node.js
- Przykłady funkcji Go
- Przykłady funkcji w języku Java
- Przykłady funkcji PHP
- Przykłady funkcji Ruby
- Przykłady funkcji.NET
Czego się nauczysz
- Jak wdrożyć funkcję Cloud Run opartą na zdarzeniach, 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 otrzymywać zdarzenia z Cloud Storage i wywoływać funkcję Cloud Run
2. Konfigurowanie zmiennych środowiskowych i włączanie interfejsów API
Aktualizowanie gcloud CLI
Ten przewodnik wymaga zainstalowania najnowszej wersji interfejsu gcloud CLI. Aby zaktualizować interfejs CLI, uruchom
gcloud components update
Włącz interfejsy API
Zanim zaczniesz korzystać z tego samouczka, musisz włączyć kilka interfejsów API. Ten przewodnik wymaga użycia tych interfejsów API: Możesz włączyć te interfejsy API, uruchamiając 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ć podczas naszych ćwiczeń z programowania.
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 na dane i konta usługi
Utworzenie zasobnika na dane
Zasobnik Cloud Storage możesz utworzyć, uruchamiając 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ącego Cloud Run, aby otrzymywać 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 przyznaj w projekcie rolę Odbiorca zdarzeń Eventarc (roles/eventarc.eventReceiver) kontu usługi powiązanemu z aktywatorem Eventarc, 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ływać 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 kodu źródłowego i przejdź do niego.
mkdir ../$SERVICE_NAME && cd $_
Następnie utwórz plik package.json o tej treści:
{
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
Następnie utwórz plik index.js o tej 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, uruchamiając to polecenie:
gcloud beta run deploy $SERVICE_NAME \
--source . \
--function helloGCS \
--region $REGION \
--no-allow-unauthenticated
Uwaga:
- Flaga –source służy do informowania Cloud Run, że funkcja ma zostać skompilowana w usługę opartą na kontenerach, którą można uruchomić.
- Flaga –function (nowa) służy do ustawiania punktu wejścia nowego serwisu na sygnaturę funkcji, którą chcesz wywołać.
- (opcjonalnie) argument –no-allow-unauthenticated, aby uniemożliwić publiczne wywoływanie funkcji.
Aby wyświetlić nową usługę crf-event-codelab, uruchom to polecenie:
gcloud beta run services describe $SERVICE_NAME
5. Tworzenie zdarzenia
Możemy utworzyć aktywator Eventarc, który 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=$SERVICE_NAME \
--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-event-codelab to nazwa usługi Cloud Run, w której wdrożona jest nasza funkcja.
- W przypadku flagi –event-filters nie używaj prefiksu gs:// w nazwie zasobnika.
Szczegółowy samouczek dotyczący konfigurowania usługi Trigger z Cloud Storage przy użyciu 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ącego Cloud Run, jak pokazano poniżej:
# get the Service URL SERVICE_URL="$(gcloud run services describe $SERVICE_NAME --region us-central1 --format 'value(status.url)')" # invoke the service curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Po wdrożeniu funkcji i utworzeniu aktywatora możemy wywołać funkcję.
Utwórz plik i prześlij go do zasobnika Cloud Storage. Możesz to zrobić za pomocą interfejsu internetowego konsoli Cloud lub narzędzia wiersza poleceń gsutil, np.
echo "hello world" > test.txt gsutil cp test.txt gs://$BUCKET_NAME
Po przesłaniu pliku zostanie wygenerowane zdarzenie, a funkcja wydrukuje podstawowe informacje o obiekcie, np. nazwę pliku. Te dane wyjściowe znajdziesz w Cloud Console w logach funkcji. Możesz też wysłać zapytanie o te dane wyjściowe za pomocą gcloud CLI:
gcloud logging read "resource.labels.service_name=$SERVICE_NAME 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 opartą na zdarzeniach, 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 otrzymywać zdarzenia z Cloud Storage i wywoływać funkcję Cloud Run
8. Czyszczenie danych
Aby uniknąć przypadkowych opłat (np. jeśli ta usługa Cloud Run zostanie przypadkowo wywołana więcej razy niż miesięczny limit wywołań Cloud Run w ramach bezpłatnej wersji), możesz usunąć usługę Cloud Run lub projekt utworzony w kroku 2.
Aby usunąć usługi Cloud Run, otwórz konsolę Cloud Run w Cloud Console pod adresem https://console.cloud.google.com/run/ i usuń usługę crf-event-codelab utworzoną w tym laboratorium.
Jeśli zdecydujesz się 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. Listę wszystkich dostępnych projektów możesz wyświetlić, uruchamiając polecenie gcloud projects list.