1. Introduction
Présentation
Les fonctions Cloud Run constituent une nouvelle façon de déployer des charges de travail à l'aide des paradigmes d'événements GCF connus et de la signature des fonctions. Au lieu d'utiliser notre processus de compilation et nos configurations de déploiement, les fonctions Cloud Run vous permettent de contrôler directement le service sous-jacent créé sur Cloud Run.
Dans cette section, vous allez apprendre à déployer une fonction basée sur des événements en Python qui utilise Gemini pour résumer un fichier texte brut importé dans un bucket Cloud Storage.
Points abordés
- Déployer une fonction Cloud Run basée sur les événements qui se déclenche chaque fois qu'un objet est importé dans un bucket GCS
- Créer un compte de service avec les rôles appropriés pour recevoir un événement de Cloud Storage et appeler la fonction Cloud Run
- Utiliser Gemini pour résumer un document texte brut importé dans Cloud Storage
2. Configurer des variables d'environnement et activer les API
Mettre à jour la CLI gcloud
Cet atelier de programmation nécessite une version récente de la CLI gcloud. Vous pouvez mettre à jour la CLI en exécutant
gcloud components update
Activer les API
Avant de commencer à utiliser cet atelier de programmation, vous devez activer plusieurs API. Cet atelier de programmation nécessite d'utiliser les API suivantes. Vous pouvez activer ces API en exécutant la commande suivante:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com \ eventarc.googleapis.com \ aiplatform.googleapis.com
Configurer des variables d'environnement
Vous pouvez définir des variables d'environnement qui seront utilisées tout au long de cet atelier de programmation.
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. Créer un bucket Storage et un compte de service
Créer un bucket de stockage
Vous pouvez créer un bucket Cloud Storage en exécutant la commande suivante:
gsutil mb -l us-central1 gs://$BUCKET_NAME
Créer un compte de service
Pour cet exemple, vous allez créer un compte de service avec les autorisations Eventarc requises et le rôle de demandeur Cloud Run afin de recevoir un événement de Cloud Storage et d'appeler la fonction Cloud Run.
Commencez par créer le compte de service.
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"
Attribuez ensuite le rôle "Récepteur d'événements Eventarc" (roles/eventarc.eventReceiver) au compte de service associé à votre déclencheur Eventarc sur le projet afin qu'il puisse recevoir des événements des fournisseurs d'événements.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
Ensuite, attribuez au compte de service le rôle de demandeur Cloud Run afin qu'il puisse appeler la fonction.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
Attribuez maintenant au compte de service le rôle d'utilisateur AI Platform afin qu'il puisse appeler Gemini.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role="roles/aiplatform.user"
Attribuez également au compte de service le rôle "Lecteur des objets Storage" pour qu'il puisse accéder au fichier.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role="roles/storage.objectViewer"
Pour que Cloud Pub/Sub puisse créer des jetons d'identité, votre projet doit disposer du rôle 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
Pour recevoir des événements via Cloud Storage, votre déclencheur doit disposer du rôle roles/pubsub.publisher accordé au compte de service Google Cloud Storage.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
4. Créer et déployer la fonction
Tout d'abord, créez un répertoire pour le code source et utilisez la commande cd pour y accéder.
mkdir $SERVICE_NAME && cd $_
Créez ensuite un fichier requirements.txt
avec le contenu suivant:
functions-framework==3.* google-cloud-aiplatform==1.63.* google-cloud-storage==2.16.*
Ensuite, créez un fichier main.py
avec le contenu suivant:
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}")
Vous pouvez maintenant déployer la fonction Cloud Run en exécutant la commande suivante:
gcloud beta run deploy $SERVICE_NAME \ --source . \ --function hello_gcs \ --region $REGION \ --no-allow-unauthenticated \ --service-account $SERVICE_ACCOUNT_ADDRESS
Remarques :
- L'option
--source
permet d'indiquer à Cloud Run de créer la fonction dans un service exécutable basé sur des conteneurs. - L'option
--function
(nouvelle) permet de définir le point d'entrée du nouveau service comme signature de la fonction que vous souhaitez appeler. - (Facultatif)
--no-allow-unauthenticated
pour empêcher l'appel public de votre fonction
Le message suivant peut s'afficher : "Le déploiement à partir de la source nécessite un dépôt Docker Artifact Registry pour stocker les conteneurs créés. Un dépôt nommé [cloud-run-source-deploy] dans la région [<YOUR_REGION>] sera créé." Acceptez la valeur par défaut "yes" (Oui) pour créer le dépôt.
Vous pouvez afficher votre nouveau service crf-vertexai-codelab
en exécutant la commande suivante:
gcloud beta run services describe $SERVICE_NAME --region $REGION
5. Créer l'événement
Nous pouvons créer un déclencheur Eventarc pour envoyer des messages à notre fonction chaque fois qu'un objet est finalisé dans 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
Pour l'option --event-filters
, n'utilisez pas le préfixe gs:// dans le nom du bucket.
Si une erreur If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent.
s'affiche, veuillez patienter quelques minutes avant de réessayer.
Pour obtenir un tutoriel détaillé sur la configuration du service de déclencheur à partir de Cloud Storage à l'aide d'Eventarc, consultez la documentation Cloud Run à l'adresse https://cloud.google.com/run/docs/tutorials/eventarc.
6. Tester la fonction
Maintenant que notre fonction est déployée et qu'un déclencheur a été créé, nous sommes prêts à l'appeler.
Créez un fichier et importez-le dans votre bucket Cloud Storage. Pour ce faire, utilisez l'interface Web de la console Cloud ou l'outil CLI gsutil, par exemple :
gsutil cp <YOUR_PLAIN_TEXT_FILE> gs://$BUCKET_NAME
Une fois le fichier importé, un événement est généré et votre fonction appelle Gemini pour résumer le fichier au format texte brut. Le résumé est imprimé dans les journaux.
Vous pouvez afficher les journaux dans la console Cloud du service Cloud Run ou exécuter la commande suivante:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"
Par exemple, si vous importez un fichier texte brut du guide de l'utilisateur des fonctions Cloud Run pour la version bêta privée, le résultat suivant s'affiche dans les journaux:
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. Félicitations !
Félicitations ! Vous avez terminé cet atelier de programmation.
Nous vous recommandons de consulter la documentation sur les fonctions Cloud Run.
Points abordés
- Déployer une fonction Cloud Run basée sur les événements qui se déclenche chaque fois qu'un objet est importé dans un bucket GCS
- Créer un compte de service avec les rôles appropriés pour recevoir un événement de Cloud Storage et appeler la fonction Cloud Run
- Utiliser Gemini pour résumer un document texte brut importé dans Cloud Storage
8. Effectuer un nettoyage
Pour éviter des frais accidentels (par exemple, si ce service Cloud Run est appelé par inadvertance plus de fois que l'allocation mensuelle des appels Cloud Run dans la version sans frais), vous pouvez supprimer le service Cloud Run ou le projet que vous avez créé à l'étape 2.
Pour supprimer les services Cloud Run, accédez à la console Cloud Run à l'adresse https://console.cloud.google.com/run/ et supprimez le service crf-vertexai-codelab
que vous avez créé dans cet atelier de programmation.
Si vous choisissez de supprimer l'ensemble du projet, accédez à https://console.cloud.google.com/cloud-resource-manager, sélectionnez le projet que vous avez créé à l'étape 2, puis choisissez "Supprimer". Si vous supprimez le projet, vous devrez le modifier dans Cloud SDK. Vous pouvez afficher la liste de tous les projets disponibles en exécutant gcloud projects list
.