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 sprawdzonych procesów kompilacji i konfiguracji wdrożenia, funkcje Cloud Run zapewniają bezpośrednią kontrolę nad bazową usługą utworzoną w Cloud Run.
W tej sekcji dowiesz się, jak wdrożyć w języku Python funkcję opartą na zdarzeniach, która używa Gemini do podsumowania zwykłego pliku tekstowego przesłanego do zasobnika Cloud Storage.
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
- Jak używać Gemini do streszczania dokumentów tekstowych przesłanych do Cloud Storage
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 \ eventarc.googleapis.com \ aiplatform.googleapis.com
Konfigurowanie zmiennych środowiskowych
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 PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_NAME=crf-vertexai-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
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.
SERVICE_ACCOUNT="crf-vertexai-codelab" 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 zdarzenia 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 umożliwić mu wywoływanie funkcji.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
Przypisz teraz temu kontu usługi rolę Użytkownik AI Platform, aby mogło ono wykonywać wywołania do Gemini.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role="roles/aiplatform.user"
Przypisz do konta usługi rolę wyświetlającego obiekty Cloud Storage, aby uzyskać dostęp do pliku.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role="roles/storage.objectViewer"
Aby można było tworzyć tokeny tożsamości, Cloud Pub/Sub wymaga przypisania w tym projekcie roli roles/iam.serviceAccountTokenCreator.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Aby możliwe było otrzymywanie zdarzeń za pomocą Cloud Storage, aktywator wymaga przypisania do konta usługi Google Cloud Storage roli role/pubsub.publisher.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
4. Utwórz i wdróż funkcję
Najpierw utwórz katalog dla kodu źródłowego i przejdź do niego.
mkdir $SERVICE_NAME && cd $_
Następnie utwórz plik requirements.txt
z podaną niżej treścią:
functions-framework==3.* google-cloud-aiplatform==1.63.* google-cloud-storage==2.16.*
Następnie utwórz plik main.py
z podaną niżej treścią:
import functions_framework import vertexai from vertexai.generative_models import GenerativeModel from google.cloud import storage vertexai.init(project="<YOUR_PROJECT_ID>", location="us-central1") model = GenerativeModel( model_name="gemini-1.5-pro-001", system_instruction=[ "Summarize the following document in a single sentence. Do not respond with more than one sentence.", ], ) # Triggered by a change in a storage bucket @functions_framework.cloud_event def hello_gcs(cloud_event): data = cloud_event.data # download the file storage_client = storage.Client() blob = storage_client.bucket(data["bucket"]).get_blob(data["name"]) #print(blob) doc = blob.download_as_text() contents = [doc] response = model.generate_content(contents) print(response.text) print(f"Response from Model: {response.text}")
Teraz możesz wdrożyć funkcję Cloud Run, uruchamiając to polecenie:
gcloud beta run deploy $SERVICE_NAME \ --source . \ --function hello_gcs \ --region $REGION \ --no-allow-unauthenticated \ --service-account $SERVICE_ACCOUNT_ADDRESS
Uwaga:
- flaga
--source
jest używana do tego, aby usługa Cloud Run skompilowała funkcję w uruchomionej usłudze opartej na kontenerze - flaga
--function
(nowa) jest używana do ustawienia punktu wejścia nowej usługi jako podpisu funkcji, która ma być wywoływana - (opcjonalnie)
--no-allow-unauthenticated
, aby uniemożliwić publiczne wywołanie funkcji
Może pojawić się pytanie „Wdrażanie ze źródła wymaga repozytorium Dockera w Artifact Registry do przechowywania utworzonych kontenerów. Utworzymy repozytorium o nazwie [cloud-run-source-deploy] w regionie [<YOUR_REGION>]. Zaakceptuj domyślną opcję „Tak”, aby utworzyć repozytorium.
Możesz wyświetlić nową usługę crf-vertexai-codelab
, uruchamiając to polecenie:
gcloud beta run services describe $SERVICE_NAME --region $REGION
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=$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: w przypadku flagi --event-filters
nie używaj prefiksu gs:// w nazwie zasobnika.
Jeśli pojawi się błąd If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent.
, poczekaj kilka minut i spróbuj ponownie.
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. Przetestuj funkcję
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.
gsutil cp <YOUR_PLAIN_TEXT_FILE> gs://$BUCKET_NAME
Po przesłaniu pliku zostanie wygenerowane zdarzenie, a Twoja funkcja wywoła Gemini, aby podsumować plik tekstowy. Podsumowanie zostanie wydrukowane w dziennikach.
Możesz wyświetlić logi w Cloud Console dla usługi Cloud Run lub uruchomić to polecenie:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"
Na przykład przesłanie pliku tekstowego z przewodnikiem użytkownika funkcji Cloud Run w ramach prywatnej wersji testowej spowoduje wydrukowanie tego tekstu w logach:
Response from Model: Cloud Run functions offer a new way to deploy serverless workloads with familiar Google Cloud Functions paradigms while providing control over the underlying Cloud Run service.
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
- Jak za pomocą Gemini podsumować dokument w postaci zwykłego tekstu przesłany do Cloud Storage
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 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-vertexai-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
.