Ce tutoriel simple montre comment rédiger, déployer et déclencher une fonction Cloud basée sur des événements avec un déclencheur Cloud Storage, pour répondre aux événements Cloud Storage.
Si vous recherchez des exemples de code pour utiliser Cloud Storage proprement dit, consultez l'exemple de navigateur Google Cloud.
Objectifs
- Rédiger et déployer une fonction Cloud basée sur des événements
- Déclencher la fonction en important un fichier dans Cloud Storage
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Cloud Run functions
- Cloud Storage
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Storage, and Eventarc APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Storage, and Eventarc APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Préparez votre environnement de développement :
Node.js
Python
Go
Java
C#
Ruby
PHP
Si la gcloud CLI est déjà installée, mettez-le à jour en exécutant la commande suivante :
gcloud components update
Préparer l'application
Créez un bucket Cloud Storage pour importer un fichier de test, avec un attribut de nom
YOUR_TRIGGER_BUCKET_NAME
encore jamais utilisé :gcloud storage buckets create gs://YOUR_TRIGGER_BUCKET_NAME
Clonez le dépôt de l'exemple d'application sur votre machine locale :
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
PHP
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Accédez au répertoire contenant l'exemple de code de Cloud Run Functions :
Node.js
cd nodejs-docs-samples/functions/helloworld/
Python
cd python-docs-samples/functions/helloworld/
Go
cd golang-samples/functions/helloworld/
Java
cd java-docs-samples/functions/helloworld/hello-gcs/
C#
cd dotnet-docs-samples/functions/helloworld/HelloGcs/
Ruby
cd ruby-docs-samples/functions/helloworld/storage/
PHP
cd php-docs-samples/functions/helloworld_storage/
Déployer et déclencher la fonction
Les fonctions Cloud Storage sont basées sur les notifications Pub/Sub de Cloud Storage et acceptent des types d’événements similaires :
Les sections suivantes décrivent comment déployer et déclencher une fonction pour chacun de ces types d'événements.
Finalisation de l'objet
Les objets finalisent les événements quand une "écriture" d'un objet Cloud Storage est correctement finalisée. Cela signifie en particulier que la création d'un objet ou le remplacement d'un objet existant déclenche cet événement. Les opérations de mise à jour des archives et des métadonnées sont ignorées par ce déclencheur.
Finalisation de l'objet : déployer la fonction
Consultez l'exemple de fonction qui gère les événements Cloud Storage :
Node.js
Python
Go
Java
C#
Ruby
PHP
Pour déployer la fonction, exécutez la commande suivante dans le répertoire contenant l'exemple de code :
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs20 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Node.js compatible pour exécuter votre fonction.
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Python compatible pour exécuter votre fonction.
Go
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Go compatible pour exécuter votre fonction.
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Java compatible pour exécuter votre fonction.
C#
gcloud functions deploy csharp-gcs-function \ --entry-point HelloGcs.Function \ --runtime dotnet6 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version .NET compatible pour exécuter votre fonction.
Ruby
gcloud functions deploy hello_gcs --runtime ruby32 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Ruby compatible pour exécuter votre fonction.
PHP
gcloud functions deploy helloGCS --runtime php82 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version PHP compatible pour exécuter votre fonction.
où YOUR_TRIGGER_BUCKET_NAME
est le nom du bucket Cloud Storage qui déclenche la fonction.
Finalisation de l'objet : déclencher la fonction
Pour déclencher la fonction :
Créez un fichier
gcf-test.txt
vide dans le répertoire où se trouve l'exemple de code.Importez le fichier dans Cloud Storage afin de déclencher la fonction :
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
où
YOUR_TRIGGER_BUCKET_NAME
est le nom de votre bucket Cloud Storage dans lequel vous importerez un fichier de test.Vérifiez les journaux pour vous assurer que les exécutions sont terminées :
gcloud functions logs read --limit 50
Suppression de l'objet
Les événements de suppression d'objet sont particulièrement utiles pour les buckets sans gestion des versions. Ils sont déclenchés lorsqu'une ancienne version d'un objet est supprimée. Ils sont également déclenchés lorsqu'un objet est écrasé. Les déclencheurs de suppression d'objet peuvent également être utilisés avec des buckets avec gestion des versions, qui se déclenchent lorsqu'une version d'un objet est définitivement supprimée.
Suppression de l'objet : déployer la fonction
En utilisant le même exemple de code que dans l'exemple de finalisation, déployez la fonction avec l'objet "delete" comme événement déclencheur. Exécutez la commande suivante dans le répertoire où se trouve l'exemple de code :
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs20 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Node.js compatible pour exécuter votre fonction.
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Python compatible pour exécuter votre fonction.
Go
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Go compatible pour exécuter votre fonction.
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Java compatible pour exécuter votre fonction.
C#
gcloud functions deploy csharp-gcs-function \ --entry-point HelloGcs.Function \ --runtime dotnet6 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version .NET compatible pour exécuter votre fonction.
Ruby
gcloud functions deploy hello_gcs --runtime ruby32 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Ruby compatible pour exécuter votre fonction.
PHP
gcloud functions deploy helloGCS --runtime php82 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version PHP compatible pour exécuter votre fonction.
où YOUR_TRIGGER_BUCKET_NAME
est le nom du bucket Cloud Storage qui déclenche la fonction.
Suppression de l'objet : déclencher la fonction
Pour déclencher la fonction :
Créez un fichier
gcf-test.txt
vide dans le répertoire où se trouve l'exemple de code.Assurez-vous que votre bucket est un bucket sans gestion des versions :
gcloud storage buckets update gs://YOUR_TRIGGER_BUCKET_NAME --no-versioning
Importez le fichier dans Cloud Storage :
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
où
YOUR_TRIGGER_BUCKET_NAME
est le nom de votre bucket Cloud Storage dans lequel vous importerez un fichier de test. À ce stade, la fonction ne doit pas encore être exécutée.Supprimez le fichier pour déclencher la fonction :
gcloud storage rm gs://YOUR_TRIGGER_BUCKET_NAME/gcf-test.txt
Vérifiez les journaux pour vous assurer que les exécutions sont terminées :
gcloud functions logs read --limit 50
Notez que l'exécution de la fonction peut prendre un certain temps.
Archivage de l'objet
Les événements d'archivage d'objets ne peuvent être utilisés qu'avec des buckets avec gestion des versions. Ils sont déclenchés lorsqu'une ancienne version d'un objet est archivée. Cela signifie en particulier que la suppression ou le remplacement d'un objet existant déclenche un événement d'archivage.
Archivage de l'objet : déployer la fonction
En utilisant le même exemple de code que dans l'exemple de finalisation, déployez la fonction avec l'archivage de l'objet comme événement déclencheur. Exécutez la commande suivante dans le répertoire où se trouve l'exemple de code :
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs20 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Node.js compatible pour exécuter votre fonction.
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Python compatible pour exécuter votre fonction.
Go
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Go compatible pour exécuter votre fonction.
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Java compatible pour exécuter votre fonction.
C#
gcloud functions deploy csharp-gcs-function \ --entry-point HelloGcs.Function \ --runtime dotnet6 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version .NET compatible pour exécuter votre fonction.
Ruby
gcloud functions deploy hello_gcs --runtime ruby32 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Ruby compatible pour exécuter votre fonction.
PHP
gcloud functions deploy helloGCS --runtime php82 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version PHP compatible pour exécuter votre fonction.
où YOUR_TRIGGER_BUCKET_NAME
est le nom du bucket Cloud Storage qui déclenche la fonction.
Archivage de l'objet : déclencher la fonction
Pour déclencher la fonction :
Créez un fichier
gcf-test.txt
vide dans le répertoire où se trouve l'exemple de code.Assurez-vous que la gestion des versions est activée dans votre bucket :
gcloud storage buckets update gs://YOUR_TRIGGER_BUCKET_NAME --versioning
Importez le fichier dans Cloud Storage :
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
où
YOUR_TRIGGER_BUCKET_NAME
est le nom de votre bucket Cloud Storage dans lequel vous importerez un fichier de test. À ce stade, la fonction ne doit pas encore être exécutée.Archivez le fichier pour déclencher la fonction :
gcloud storage rm gs://YOUR_TRIGGER_BUCKET_NAME/gcf-test.txt
Consultez les journaux pour vous assurer que les exécutions sont terminées :
gcloud functions logs read --limit 50
Mise à jour des métadonnées de l'objet
Les événements de mise à jour des métadonnées sont déclenchés lorsque les métadonnées d'un objet existant sont mises à jour.
Mise à jour des métadonnées de l'objet : déployer la fonction
En utilisant le même exemple de code que dans l'exemple de finalisation, déployez la fonction avec la mise à jour des métadonnées en tant qu'événement déclencheur. Exécutez la commande suivante dans le répertoire où se trouve l'exemple de code :
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs20 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Node.js compatible pour exécuter votre fonction.
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Python compatible pour exécuter votre fonction.
Go
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Go compatible pour exécuter votre fonction.
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Java compatible pour exécuter votre fonction.
C#
gcloud functions deploy csharp-gcs-function \ --entry-point HelloGcs.Function \ --runtime dotnet6 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version .NET compatible pour exécuter votre fonction.
Ruby
gcloud functions deploy hello_gcs --runtime ruby32 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version Ruby compatible pour exécuter votre fonction.
PHP
gcloud functions deploy helloGCS --runtime php82 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Utilisez l'option --runtime
pour spécifier l'ID d'exécution d'une version PHP compatible pour exécuter votre fonction.
où YOUR_TRIGGER_BUCKET_NAME
est le nom du bucket Cloud Storage qui déclenche la fonction.
Mise à jour des métadonnées de l'objet : déclencher la fonction
Pour déclencher la fonction :
Créez un fichier
gcf-test.txt
vide dans le répertoire où se trouve l'exemple de code.Assurez-vous que votre bucket est un bucket sans gestion des versions :
gcloud storage buckets update gs://YOUR_TRIGGER_BUCKET_NAME --no-versioning
Importez le fichier dans Cloud Storage :
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
où
YOUR_TRIGGER_BUCKET_NAME
est le nom de votre bucket Cloud Storage dans lequel vous importerez un fichier de test. À ce stade, la fonction ne doit pas encore être exécutée.Mettez à jour les métadonnées du fichier :
gcloud storage objects update gs://YOUR_TRIGGER_BUCKET_NAME/gcf-test.txt --content-type=text/plain
Consultez les journaux pour vous assurer que les exécutions sont terminées :
gcloud functions logs read --limit 50
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet mais supprimez les ressources individuelles.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer la fonction
La suppression de fonctions Cloud Run ne supprime pas les ressources stockées dans Cloud Storage.
Pour supprimer la fonction que vous avez créée dans ce tutoriel, exécutez la commande suivante :
Node.js
gcloud functions delete helloGCS
Python
gcloud functions delete hello_gcs
Go
gcloud functions delete HelloGCS
Java
gcloud functions delete java-gcs-function
C#
gcloud functions delete csharp-gcs-function
Ruby
gcloud functions delete hello_gcs
PHP
gcloud functions delete helloGCS
Vous pouvez également supprimer des fonctions Cloud Run à partir de la console Google Cloud.