1. Introduction
Présentation
Les fonctions Cloud Run sont une nouvelle façon de déployer des charges de travail à l'aide des paradigmes d'événements et de signature de fonction familiers de GCF. 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.
Avec les fonctions Cloud Run, nous proposons l'expérience utilisateur simple du déploiement de source Cloud Run, ce qui permet aux développeurs de contrôler entièrement leurs charges de travail à l'aide de configurations Cloud Run.
Dans cette section, vous allez apprendre à déployer une fonction événementielle 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 nodejs 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 des API
Mettre à jour la CLI gcloud
Cet atelier de programmation nécessite une version récente de la CLI gcloud installée. Vous pouvez mettre à jour la CLI en exécutant
gcloud components update
Activer les API
Avant de pouvoir 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
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 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
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.
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"
Ensuite, attribuez le rôle Destinataire des é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 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
Commencez par créer un répertoire pour le code source et accédez-y avec la commande cd.
mkdir ../$SERVICE_NAME && cd $_
Créez ensuite 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'indicateur -source permet d'indiquer à Cloud Run de créer la fonction dans un service basé sur des conteneurs exécutables.
- L'indicateur –function (nouveau) 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-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 où notre fonction est déployée.
- Pour l'indicateur –event-filters, n'utilisez pas le préfixe gs:// dans le nom de votre bucket.
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 suivante: 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 celui d'un compte principal disposant 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 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 :
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 cette sortie dans les entrées de journal de la fonction dans Cloud Console. Vous pouvez également effectuer une requête pour obtenir cette sortie à l'aide de la gcloud CLI:
gcloud logging read "resource.labels.service_name=crf-nodejs-event AND textPayload: File" --format=json
Vous devriez obtenir la sortie suivante :
"textPayload": "File: test.txt"
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 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 les frais involontaires (par exemple, si ce service Cloud Run est appelé par inadvertance plus de fois que votre quota mensuel 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 à 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'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 modifier les projets dans votre SDK Cloud. Vous pouvez afficher la liste de tous les projets disponibles en exécutant gcloud projects list
.