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 nos configurations de déploiement et de compilation avisées, Cloud Run vous donne un contrôle direct sur le service sous-jacent créé dans Cloud Run.
Avec les fonctions Cloud Run, nous fournissons l'expérience utilisateur simple du déploiement source Cloud Run, ce qui donne aux développeurs un contrôle total sur leurs charges de travail à l'aide de configurations Cloud Run.
Dans cette section, vous allez apprendre à déployer une fonction basée sur des événements dans Node. Vous allez déployer une fonction qui se déclenche chaque fois qu'un objet est finalisé dans un bucket Google Cloud Storage.
Cet atelier de programmation utilise des exemples Node.js dans les exemples ci-dessous. Toutefois, vous pouvez utiliser les exemples de code Cloud Functions 2e génération dans le langage de votre choix:
- Exemples de fonctions Python
- Exemples de fonctions Node.js
- Exemples de fonctions Go
- Exemples de fonctions Java
- Exemples de fonctions PHP
- Exemples de fonctions Ruby
- Exemples de fonctions.NET
Points abordés
- Déployer une fonction Cloud Run basée sur des é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
2. Configurer des variables d'environnement et activer les API
Mettre à jour la gcloud CLI
Cet atelier de programmation nécessite l'installation d'une version récente de gcloud CLI. 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 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
Configurer des variables d'environnement
Vous pouvez définir les 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 SERVICE_NAME=crf-event-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
Dans cet exemple, vous allez créer un compte de service avec les autorisations EventArc requises et le rôle de 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.
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"
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
Attribuez ensuite 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
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 $_
Ensuite, créez un fichier package.json
avec le contenu suivant:
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
Ensuite, créez un fichier index.js
avec le contenu suivant:
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}`); });
Vous pouvez maintenant déployer la fonction Cloud Run en exécutant la commande suivante:
gcloud beta run deploy $SERVICE_NAME \ --source . \ --function helloGCS \ --region $REGION \ --no-allow-unauthenticated
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 (new) est utilisée pour définir le point d'entrée du nouveau service comme signature de la fonction que vous souhaitez appeler
- (facultatif) l'attribut –no-allow-unauthenticated pour empêcher l'appel public de votre fonction
Vous pouvez afficher votre nouveau service crf-nodejs-event
en exécutant la commande suivante:
gcloud beta run services describe $SERVICE_NAME
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=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
Remarques :
- gcs-function-trigger est le nom du déclencheur
- crf-nodejs-event est le nom du service Cloud Run sur lequel notre fonction est déployée
- Pour l'option –event-filters, n'utilisez pas le préfixe gs:// dans le nom de votre bucket.
Vous trouverez un tutoriel détaillé sur la configuration du service de déclencheur depuis Cloud Storage à l'aide d'Eventarc dans la documentation Cloud Run: https://cloud.google.com/run/docs/tutorials/eventarc
6. Tester la fonction
Une fois le déploiement terminé, l'URL du service s'affiche. Pour appeler la fonction, vous devez envoyer une requête authentifiée avec votre jeton d'identité ou le jeton d'identité d'un principe doté du rôle Demandeur Cloud Run, comme indiqué ci-dessous:
# 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
Maintenant que notre fonction est déployée et qu'un déclencheur est créé, nous pouvons l'appeler.
Créez un fichier et importez-le dans votre bucket Cloud Storage. Pour ce faire, vous pouvez utiliser l'interface Web de la console Cloud ou l'outil gsutil CLI, par exemple
echo "hello world" > test.txt gsutil cp test gs://$BUCKET_NAME
Une fois le fichier importé, un événement est généré et votre fonction imprime des informations de base sur l'objet, par exemple le nom du fichier. Vous trouverez ce résultat dans les entrées de journal de la fonction dans la console Cloud. Vous pouvez également interroger ce résultat à l'aide de la gcloud CLI:
gcloud logging read "resource.labels.service_name=crf-nodejs-event AND textPayload: File" --format=json
Le résultat suivant doit s'afficher :
"textPayload": "File: test.txt"
7. Félicitations !
Félicitations, vous avez terminé l'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 des é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
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-event-codelab
que vous avez créé dans cet atelier de programmation.
Si vous choisissez de supprimer l'intégralité du projet, vous pouvez accéder à https://console.cloud.google.com/cloud-resource-manager, sélectionner le projet que vous avez créé à l'étape 2, puis cliquer sur "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
.