1. Introduction
Présentation
Cloud Run Functions est 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 familiers. Au lieu d'utiliser notre processus de compilation et nos configurations de déploiement, Cloud Run Functions vous permet de contrôler directement le service sous-jacent créé sur Cloud Run.
Avec Cloud Run Functions, nous fournissons l'interface utilisateur simple du déploiement de code source Cloud Run, ce qui permet aux développeurs de contrôler entièrement leurs charges de travail à l'aide des 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. Toutefois, vous pouvez utiliser les exemples de code Cloud Functions 2nd gen dans la langue 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
- Comment 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 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 pouvoir 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 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
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.
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 Récepteur d'événements Eventarc (roles/eventarc.eventReceiver) sur le projet au compte de service associé à votre déclencheur Eventarc afin que le déclencheur 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 d'appelant 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.
mkdir ../$SERVICE_NAME && cd $_
Créez ensuite un fichier package.json avec le contenu suivant :
{
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
Créez ensuite 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" est utilisé pour indiquer à Cloud Run de compiler la fonction dans un service basé sur un conteneur exécutable.
- Le nouveau flag "–function" permet de définir le point d'entrée du nouveau service sur la signature de la 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-event-codelab 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=$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
Remarques :
- gcs-function-trigger est le nom du déclencheur.
- crf-event-codelab 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éclenchement à 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
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 $SERVICE_NAME --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 à appeler la fonction.
Créez un fichier et importez-le dans votre bucket Cloud Storage. Vous pouvez le faire via l'interface Web de la console Cloud ou à l'aide de l'outil CLI gsutil, par exemple :
echo "hello world" > test.txt gsutil cp test.txt gs://$BUCKET_NAME
Une fois le fichier importé, un événement est généré et votre fonction affiche 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 la console Cloud. Vous pouvez également interroger cette sortie à l'aide de la gcloud CLI :
gcloud logging read "resource.labels.service_name=$SERVICE_NAME AND textPayload: File" --format=json
Vous devriez obtenir le résultat suivant :
"textPayload": "File: test.txt"
7. Félicitations !
Bravo ! Vous avez terminé cet atelier de programmation.
Nous vous recommandons de consulter la documentation sur Cloud Run Functions.
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
- Comment 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 involontaires (par exemple, si ce service Cloud Run est invoqué par inadvertance plus de fois que votre quota mensuel d'invocations 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 sur https://console.cloud.google.com/run/, puis 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 choisir "Supprimer". Si vous supprimez le projet, vous devrez changer de projet dans votre SDK Cloud. Vous pouvez afficher la liste de tous les projets disponibles en exécutant gcloud projects list.