Wprowadzenie do opartych na zdarzeniach funkcji Cloud Run

1. Wprowadzenie

Omówienie

Funkcje Cloud Run to nowy sposób wdrażania zadań przy użyciu znanych paradygmatów zdarzeń GCF i podpisu funkcji. Zamiast korzystać z naszego sprawdzonych procesów kompilacji i konfiguracji wdrożenia, funkcje Cloud Run zapewniają bezpośrednią kontrolę nad bazową usługą utworzoną w Cloud Run.

Dzięki funkcjom Cloud Run zapewniamy prosty UX wdrożenia źródła Cloud Run, dając programistom pełną kontrolę nad zadaniami za pomocą konfiguracji Cloud Run.

Z tej sekcji dowiesz się, jak wdrożyć w Node.js funkcję opartą na zdarzeniach. Wdrożysz funkcję, która jest aktywowana za każdym razem, gdy obiekt zostanie sfinalizowany w zasobniku Google Cloud Storage.

W tym ćwiczeniu w Codelabs używane są przykłady Nodejs w poniższych przykładach. Możesz jednak skorzystać z przykładowych kodów Cloud Functions 2 generacji w wybranym języku:

Czego się nauczysz

  • Jak wdrożyć opartą na zdarzeniach funkcję Cloud Run, która jest aktywowana za każdym razem, gdy obiekt jest przesyłany do zasobnika GCS
  • Jak utworzyć konto usługi z odpowiednimi rolami umożliwiającymi otrzymywanie zdarzenia z Cloud Storage i wywoływanie funkcji w Cloud Run

2. Skonfiguruj zmienne środowiskowe i włącz interfejsy API

Zaktualizuj interfejs wiersza poleceń gcloud

To ćwiczenie w Codelabs wymaga zainstalowania najnowszej wersji interfejsu wiersza poleceń gcloud. Aby zaktualizować interfejs wiersza poleceń, uruchom polecenie

gcloud components update

Włącz interfejsy API

Zanim zaczniesz korzystać z tego ćwiczenia z programowania, musisz włączyć kilka interfejsów API. To ćwiczenie w Codelabs wymaga używania poniższych 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

Skonfiguruj zmienne środowiskowe

Możesz ustawić zmienne środowiskowe, które będą używane podczas tego ćwiczenia 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

Utwórz zasobnik 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, które umożliwi odbieranie zdarzenia z Cloud Storage i wywoływanie funkcji 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 rolę odbiornika zdarzeń Eventarc (roles/eventarc.eventReceiver) w projekcie do konta usługi powiązanego z Twoim 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 ono wywoływać funkcję.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/run.invoker

4. Utwórz i wdróż funkcję

Najpierw utwórz katalog na kod źródłowy i cd w tym katalogu.

mkdir ../$SERVICE_NAME && cd $_

Następnie utwórz plik package.json z tą zawartością:

{
    "dependencies": {
        "@google-cloud/functions-framework": "^3.0.0"
    }
}

Następnie utwórz plik index.js z tą zawartoś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 jest używana do tego, aby usługa Cloud Run skompilowała funkcję w uruchomionej usłudze opartej na kontenerze
  • flaga –funkcja (nowa) jest używana do ustawienia punktu wejścia nowej usługi jako podpisu funkcji, która ma być wywoływana.
  • (opcjonalnie) atrybut –no-allow-unauthenticated w celu uniemożliwienia publicznego wywołania funkcji

Aby wyświetlić nową usługę crf-nodejs-event, 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=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 aktywatora
  • crf-nodejs-event to nazwa usługi Cloud Run, w której wdrożono naszą funkcję
  • w przypadku flagi –event-filters nie używaj prefiksu gs:// w nazwie zasobnika.

Szczegółowy samouczek konfigurowania usługi aktywującej z Cloud Storage za pomocą Eventarc znajdziesz w dokumentacji Cloud Run tutaj: https://cloud.google.com/run/docs/tutorials/eventarc

6. Przetestuj funkcję

Po zakończeniu wdrażania zobaczysz adres URL usługi. Aby wywołać funkcję, musisz wysłać uwierzytelnione żądanie z Twoim tokenem tożsamości lub tokenem tożsamości podmiotu, który ma przypisaną rolę wywołującego 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

Po wdrożeniu funkcji i utworzeniu aktywatora możemy ją wywoływać.

utworzyć plik i przesłać go do zasobnika Cloud Storage, Możesz to zrobić w interfejsie internetowym konsoli Cloud 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. i nazwą pliku. Te dane wyjściowe znajdziesz we wpisach logu dotyczących funkcji w konsoli Cloud. Możesz też wysłać zapytanie o te dane wyjściowe za pomocą interfejsu wiersza poleceń gcloud:

gcloud logging read "resource.labels.service_name=crf-nodejs-event AND textPayload: File" --format=json 

i powinny się wyświetlić następujące dane wyjściowe

"textPayload": "File: test.txt"

7. Gratulacje!

Gratulujemy ukończenia ćwiczeń z programowania.

Zalecamy zapoznanie się z dokumentacją funkcji Cloud Run.

Omówione zagadnienia

  • Jak wdrożyć opartą na zdarzeniach funkcję Cloud Run, która jest aktywowana za każdym razem, gdy obiekt jest przesyłany do zasobnika GCS
  • Jak utworzyć konto usługi z odpowiednimi rolami umożliwiającymi otrzymywanie zdarzenia z Cloud Storage i wywoływanie funkcji w Cloud Run

8. Czyszczenie danych

Aby uniknąć niezamierzonych opłat (na przykład jeśli ta usługa Cloud Run została przypadkowo wywołana więcej razy niż miesięczna alokacja wywołań Cloud Run na poziomie bezpłatnym), możesz usunąć usługę Cloud Run lub projekt utworzony w kroku 2.

Aby usunąć usługi Cloud Run, otwórz konsolę Cloud Run na stronie https://console.cloud.google.com/run/ i usuń usługę crf-event-codelab utworzoną w ramach tego ćwiczenia z programowania.

Jeśli zdecydujesz się usunąć cały projekt, możesz otworzyć stronę https://console.cloud.google.com/cloud-resource-manager, wybrać projekt utworzony w kroku 2 i kliknąć Usuń. Jeśli usuniesz projekt, musisz zmienić projekty w pakiecie SDK Cloud. Aby wyświetlić listę wszystkich dostępnych projektów, uruchom polecenie gcloud projects list.