Wprowadzenie do funkcji Cloud Run uruchamianych po zdarzeniach

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:

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.