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énement et de la signature de fonction GCF que vous connaissez déjà. Au lieu d'utiliser notre processus de compilation et nos configurations de déploiement prédéfinis, 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 les é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 est déclenchée 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 en texte brut importé dans Cloud Storage
2. Configurer des variables d'environnement et activer des API
Mettre à jour gcloud CLI
Cet atelier de programmation nécessite l'installation d'une version récente de gcloud CLI. Vous pouvez mettre à jour l'interface de ligne de commande en exécutant la commande suivante :
gcloud components update
Activer les API
Avant de commencer cet atelier de programmation, vous devez activer plusieurs API. Cet atelier de programmation nécessite l'utilisation des 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 de stockage 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
Dans cet exemple, vous allez créer un compte de service avec les autorisations Eventarc requises et le rôle Demandeur Cloud Run pour recevoir un événement de Cloud Storage et 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"
Ensuite, attribuez le rôle Récepteur d'événements Eventarc (roles/eventarc.eventReceiver) sur le projet au compte de service associé à votre déclencheur Eventarc afin qu'il puisse recevoir des événements de fournisseurs d'événements.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
Ensuite, attribuez le rôle Demandeur Cloud Run au compte de service 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 le rôle Utilisateur AI Platform au compte de service afin qu'il puisse effectuer des appels à Gemini.
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
--role="roles/aiplatform.user"
Attribuez également le rôle Lecteur des objets de l'espace de stockage au compte de service afin 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é, le compte de service doit détenir le rôle roles/iam.serviceAccountTokenCreator sur votre projet.
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, le rôle roles/pubsub.publisher doit être accordé au compte de service Google Cloud Storage associé à votre déclencheur.
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
Commencez par créer un répertoire pour le code source, puis accédez-y.
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.*
Créez ensuite 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
--sourcepermet à Cloud Run de compiler la fonction dans un service basé sur un conteneur exécutable. - L'option
--function(nouvelle) permet de définir le point d'entrée du nouveau service sur la signature de fonction que vous souhaitez appeler. - (Facultatif) L'option
--no-allow-unauthenticatedempêche 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] sera créé dans la région [<YOUR_REGION>]." Acceptez la valeur par défaut "yes" 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
Veuillez noter que pour l'option --event-filters, n'utilisez pas le préfixe gs:// dans le nom de votre bucket.
Si l'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 : 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 à appeler la fonction.
Créez un fichier et importez-le dans votre bucket Cloud Storage. Vous pouvez le faire via l'interface Web Cloud Console ou à l'aide de l'outil de ligne de commande 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 texte brut. Le résumé est imprimé dans les journaux.
Vous pouvez afficher les journaux dans Cloud Console pour le 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, l'importation d'un fichier texte brut du guide de l'utilisateur des fonctions Cloud Run pour la version Preview privée génère les éléments suivants 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 !
Bravo ! 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 est déclenchée 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 en texte brut importé dans Cloud Storage
8. Effectuer un nettoyage
Pour éviter des frais involontaires (par exemple, si ce service Cloud Run est appelé par inadvertance plus de fois que votre allocation mensuelle d'appels Cloud Run dans le niveau 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 à Cloud Run dans Cloud Console à l'adresse https://console.cloud.google.com/run/, puis supprimez le crf-vertexai-codelab service que vous avez créé dans cet atelier de programmation.
Si vous choisissez de supprimer l'intégralité du projet, accédez à https://console.cloud.google.com/cloud-resource-manager, sélectionnez le projet que vous avez créé à l'étape 2, puis cliquez sur "Supprimer". Si vous supprimez le projet, vous devrez modifier les projets dans votre SDK Cloud. Vous pouvez afficher la liste de tous les projets disponibles en exécutant gcloud projects list.