Tutoriel sur Cloud Storage


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, consultez l'exemple de navigateur Google Cloud.

Objectifs

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

  • Cloud Run functions
  • Cloud Build
  • Pub/Sub
  • Cloud Storage
  • Artifact Registry
  • Eventarc
  • Cloud Logging

For details, see Cloud Run functions pricing.

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions, Cloud Build, Artifact Registry, Eventarc, Logging, and Pub/Sub APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Functions, Cloud Build, Artifact Registry, Eventarc, Logging, and Pub/Sub APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Si la gcloud CLI est déjà installée, mettez-le à jour en exécutant la commande suivante :

    gcloud components update
  13. Préparez votre environnement de développement :

Prérequis

  1. Créez un bucket régional, où YOUR_BUCKET_NAME est un nom de bucket unique et où REGION est la région dans laquelle vous prévoyez de déployer votre fonction :

    gcloud storage buckets create gs://YOUR_BUCKET_NAME --location=REGION
  2. Pour utiliser les fonctions Cloud Storage, attribuez le rôle pubsub.publisher au compte de service Cloud Storage :

    PROJECT_ID=$(gcloud config get-value project)
    PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)')
    
    SERVICE_ACCOUNT=$(gcloud storage service-agent --project=$PROJECT_ID)
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member serviceAccount:$SERVICE_ACCOUNT \
      --role roles/pubsub.publisher
    

Préparer l'application

  1. Clonez le dépôt de l'exemple d'application sur votre ordinateur local :

    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.

  2. Accédez au répertoire contenant l'exemple de code Cloud Run Functions :

    Node.js

    cd nodejs-docs-samples/functions/v2/helloGCS/

    Python

    cd python-docs-samples/functions/v2/storage/

    Go

    cd golang-samples/functions/functionsv2/hellostorage/

    Java

    cd java-docs-samples/functions/v2/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

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}`);
});

Python

from cloudevents.http import CloudEvent

import functions_framework


# Triggered by a change in a storage bucket
@functions_framework.cloud_event
def hello_gcs(cloud_event: CloudEvent) -> tuple:
    """This function is triggered by a change in a storage bucket.

    Args:
        cloud_event: The CloudEvent that triggered this function.
    Returns:
        The event ID, event type, bucket, name, metageneration, and timeCreated.
    """
    data = cloud_event.data

    event_id = cloud_event["id"]
    event_type = cloud_event["type"]

    bucket = data["bucket"]
    name = data["name"]
    metageneration = data["metageneration"]
    timeCreated = data["timeCreated"]
    updated = data["updated"]

    print(f"Event ID: {event_id}")
    print(f"Event type: {event_type}")
    print(f"Bucket: {bucket}")
    print(f"File: {name}")
    print(f"Metageneration: {metageneration}")
    print(f"Created: {timeCreated}")
    print(f"Updated: {updated}")

    return event_id, event_type, bucket, name, metageneration, timeCreated, updated

Go


// Package helloworld provides a set of Cloud Functions samples.
package helloworld

import (
	"context"
	"fmt"
	"log"
	"strings"

	"github.com/GoogleCloudPlatform/functions-framework-go/functions"
	"github.com/cloudevents/sdk-go/v2/event"
	"github.com/googleapis/google-cloudevents-go/cloud/storagedata"
	"google.golang.org/protobuf/encoding/protojson"
)

func init() {
	functions.CloudEvent("HelloStorage", helloStorage)
}

// helloStorage consumes a CloudEvent message and logs details about the changed object.
func helloStorage(ctx context.Context, e event.Event) error {
	log.Printf("Event ID: %s", e.ID())
	log.Printf("Event Type: %s", e.Type())

	var data storagedata.StorageObjectData
	err := protojson.Unmarshal(e.Data(), &data)

	// Unmarshal() returns an unexported error.
	// Parse the error string to determine whether there is an unknown field.
	if err != nil && strings.Contains(err.Error(), "unknown field") {
		log.Println(err.Error())
		options := protojson.UnmarshalOptions{
			DiscardUnknown: true,
		}
		err = options.Unmarshal(e.Data(), &data)
	}
	if err != nil {
		return fmt.Errorf("protojson.Unmarshal: %w", err)
	}

	log.Printf("Bucket: %s", data.GetBucket())
	log.Printf("File: %s", data.GetName())
	log.Printf("Metageneration: %d", data.GetMetageneration())
	log.Printf("Created: %s", data.GetTimeCreated().AsTime())
	log.Printf("Updated: %s", data.GetUpdated().AsTime())
	return nil
}

Java

import com.google.cloud.functions.CloudEventsFunction;
import com.google.events.cloud.storage.v1.StorageObjectData;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.util.JsonFormat;
import io.cloudevents.CloudEvent;
import java.nio.charset.StandardCharsets;
import java.util.logging.Logger;

public class HelloGcs implements CloudEventsFunction {
  private static final Logger logger = Logger.getLogger(HelloGcs.class.getName());

  @Override
  public void accept(CloudEvent event) throws InvalidProtocolBufferException {
    logger.info("Event: " + event.getId());
    logger.info("Event Type: " + event.getType());

    if (event.getData() == null) {
      logger.warning("No data found in cloud event payload!");
      return;
    }

    String cloudEventData = new String(event.getData().toBytes(), StandardCharsets.UTF_8);
    StorageObjectData.Builder builder = StorageObjectData.newBuilder();

    // If you do not ignore unknown fields, then JsonFormat.Parser returns an
    // error when encountering a new or unknown field. Note that you might lose
    // some event data in the unmarshaling process by ignoring unknown fields.
    JsonFormat.Parser parser = JsonFormat.parser().ignoringUnknownFields();
    parser.merge(cloudEventData, builder);
    StorageObjectData data = builder.build();

    logger.info("Bucket: " + data.getBucket());
    logger.info("File: " + data.getName());
    logger.info("Metageneration: " + data.getMetageneration());
    logger.info("Created: " + data.getTimeCreated());
    logger.info("Updated: " + data.getUpdated());
  }
}

C#

using CloudNative.CloudEvents;
using Google.Cloud.Functions.Framework;
using Google.Events.Protobuf.Cloud.Storage.V1;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;

namespace HelloGcs;

 /// <summary>
 /// Example Cloud Storage-triggered function.
 /// This function can process any event from Cloud Storage.
 /// </summary>
public class Function : ICloudEventFunction<StorageObjectData>
{
    private readonly ILogger _logger;

    public Function(ILogger<Function> logger) =>
        _logger = logger;

    public Task HandleAsync(CloudEvent cloudEvent, StorageObjectData data, CancellationToken cancellationToken)
    {
        _logger.LogInformation("Event: {event}", cloudEvent.Id);
        _logger.LogInformation("Event Type: {type}", cloudEvent.Type);
        _logger.LogInformation("Bucket: {bucket}", data.Bucket);
        _logger.LogInformation("File: {file}", data.Name);
        _logger.LogInformation("Metageneration: {metageneration}", data.Metageneration);
        _logger.LogInformation("Created: {created:s}", data.TimeCreated?.ToDateTimeOffset());
        _logger.LogInformation("Updated: {updated:s}", data.Updated?.ToDateTimeOffset());
        return Task.CompletedTask;
    }
}

Ruby

require "functions_framework"

FunctionsFramework.cloud_event "hello_gcs" do |event|
  # This function supports all Cloud Storage events.
  # The `event` parameter is a CloudEvents::Event::V1 object.
  # See https://cloudevents.github.io/sdk-ruby/latest/CloudEvents/Event/V1.html
  payload = event.data

  logger.info "Event: #{event.id}"
  logger.info "Event Type: #{event.type}"
  logger.info "Bucket: #{payload['bucket']}"
  logger.info "File: #{payload['name']}"
  logger.info "Metageneration: #{payload['metageneration']}"
  logger.info "Created: #{payload['timeCreated']}"
  logger.info "Updated: #{payload['updated']}"
end

PHP


use CloudEvents\V1\CloudEventInterface;
use Google\CloudFunctions\FunctionsFramework;

// Register the function with Functions Framework.
// This enables omitting the `FUNCTIONS_SIGNATURE_TYPE=cloudevent` environment
// variable when deploying. The `FUNCTION_TARGET` environment variable should
// match the first parameter.
FunctionsFramework::cloudEvent('helloGCS', 'helloGCS');

function helloGCS(CloudEventInterface $cloudevent)
{
    // This function supports all Cloud Storage event types.
    $log = fopen(getenv('LOGGER_OUTPUT') ?: 'php://stderr', 'wb');
    $data = $cloudevent->getData();
    fwrite($log, 'Event: ' . $cloudevent->getId() . PHP_EOL);
    fwrite($log, 'Event Type: ' . $cloudevent->getType() . PHP_EOL);
    fwrite($log, 'Bucket: ' . $data['bucket'] . PHP_EOL);
    fwrite($log, 'File: ' . $data['name'] . PHP_EOL);
    fwrite($log, 'Metageneration: ' . $data['metageneration'] . PHP_EOL);
    fwrite($log, 'Created: ' . $data['timeCreated'] . PHP_EOL);
    fwrite($log, 'Updated: ' . $data['updated'] . PHP_EOL);
}

Pour déployer la fonction, exécutez la commande suivante dans le répertoire contenant l'exemple de code :

Node.js

gcloud functions deploy nodejs-finalize-function \
--gen2 \
--runtime=nodejs22 \
--region=REGION \
--source=. \
--entry-point=helloGCS \
--trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 python-finalize-function \
--gen2 \
--runtime=python312 \
--region=REGION \
--source=. \
--entry-point=hello_gcs \
--trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 go-finalize-function \
--gen2 \
--runtime=go122 \
--region=REGION \
--source=. \
--entry-point=HelloStorage \
--trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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-finalize-function \
--gen2 \
--runtime=java21 \
--region=REGION \
--source=. \
--entry-point=functions.HelloGcs \
--memory=512MB \
--trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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-finalize-function \
--gen2 \
--runtime=dotnet8 \
--region=REGION \
--source=. \
--entry-point=HelloGcs.Function \
--trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 ruby-finalize-function \
--gen2 \
--runtime=ruby33 \
--region=REGION \
--source=. \
--entry-point=hello_gcs \
-
-trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
-
-trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 php-finalize-function \
--gen2 \
--runtime=php83 \
--region=REGION \
--source=. \
--entry-point=helloGCS \
-
-trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
-
-trigger-event-filters="bucket=YOUR_BUCKET_NAME"

Utilisez l'option --runtime pour spécifier l'ID d'exécution d'une version PHP compatible pour exécuter votre fonction.

Remplacez les éléments suivants :

  • REGION : nom de la région Google Cloud dans laquelle vous souhaitez déployer votre fonction (par exemple, us-west1).
  • YOUR_BUCKET_NAME : nom du bucket Cloud Storage qui déclenche la fonction. Lorsque vous déployez des fonctions Cloud Run, spécifiez uniquement le nom du bucket, sans le gs:// initial. Exemple : --trigger-event-filters="bucket=my-bucket".

Finalisation de l'objet : déclencher la fonction

Testez la fonction en important un fichier dans votre bucket :

echo "Hello World" > test-finalize.txt
gcloud storage cp test-finalize.txt gs://YOUR_BUCKET_NAME/test-finalize.txt

L'événement CloudEvent reçu doit apparaître dans les journaux :

gcloud functions logs read YOUR_FUNCTION_NAME --region REGION --gen2 --limit=10

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 nodejs-delete-function \
--gen2 \
--runtime=nodejs22 \
--region=REGION \
--source=. \
--entry-point=helloGCS \
--trigger-event-filters="type=google.cloud.storage.object.v1.deleted" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 python-delete-function \
--gen2 \
--runtime=python312 \
--region=REGION \
--source=. \
--entry-point=hello_gcs \
--trigger-event-filters="type=google.cloud.storage.object.v1.deleted" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 go-delete-function \
--gen2 \
--runtime=go122 \
--region=REGION \
--source=. \
--entry-point=HelloStorage \
--trigger-event-filters="type=google.cloud.storage.object.v1.deleted" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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-delete-function \
--gen2 \
--runtime=java21 \
--region=REGION \
--source=. \
--entry-point=functions.HelloGcs \
--memory=512MB \
--trigger-event-filters="type=google.cloud.storage.object.v1.deleted" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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-delete-function \
--gen2 \
--runtime=dotnet8 \
--region=REGION \
--source=. \
--entry-point=HelloGcs.Function \
--trigger-event-filters="type=google.cloud.storage.object.v1.deleted" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 ruby-delete-function \
--gen2 \
--runtime=ruby33 \
--region=REGION \
--source=. \
--entry-point=hello_gcs \
-
-trigger-event-filters="type=google.cloud.storage.object.v1.deleted" \
-
-trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 php-delete-function \
--gen2 \
--runtime=php83 \
--region=REGION \
--source=. \
--entry-point=helloGCS \
-
-trigger-event-filters="type=google.cloud.storage.object.v1.deleted" \
-
-trigger-event-filters="bucket=YOUR_BUCKET_NAME"

Utilisez l'option --runtime pour spécifier l'ID d'exécution d'une version PHP compatible pour exécuter votre fonction.

Remplacez les éléments suivants :

  • REGION : nom de la région Google Cloud dans laquelle vous souhaitez déployer votre fonction (par exemple, us-west1).
  • YOUR_BUCKET_NAME : nom du bucket Cloud Storage qui déclenche la fonction. Lorsque vous déployez des fonctions Cloud Run, spécifiez uniquement le nom du bucket, sans le gs:// initial. Exemple : --trigger-event-filters="bucket=my-bucket".

Suppression de l'objet : déclencher la fonction

Pour déclencher la fonction :

  1. Créez un fichier test-delete.txt vide dans le répertoire où se trouve l'exemple de code.

  2. Assurez-vous que votre bucket est un bucket sans gestion des versions :

    gcloud storage buckets update gs://YOUR_BUCKET_NAME --no-versioning
  3. Importez le fichier dans Cloud Storage :

    gcloud storage cp test-delete.txt gs://YOUR_BUCKET_NAME

    YOUR_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.

  4. Supprimez le fichier pour déclencher la fonction :

    gcloud storage rm gs://YOUR_BUCKET_NAME/test-delete.txt
  5. L'événement CloudEvent reçu doit apparaître dans les journaux :

    gcloud functions logs read YOUR_FUNCTION_NAME --region REGION --gen2 --limit=10

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 nodejs-archive-function \
--gen2 \
--runtime=nodejs22 \
--region=REGION \
--source=. \
--entry-point=helloGCS \
--trigger-event-filters="type=google.cloud.storage.object.v1.archived" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 python-archive-function \
--gen2 \
--runtime=python312 \
--region=REGION \
--source=. \
--entry-point=hello_gcs \
--trigger-event-filters="type=google.cloud.storage.object.v1.archived" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 go-archive-function \
--gen2 \
--runtime=go122 \
--region=REGION \
--source=. \
--entry-point=HelloStorage \
--trigger-event-filters="type=google.cloud.storage.object.v1.archived" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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-archive-function \
--gen2 \
--runtime=java21 \
--region=REGION \
--source=. \
--entry-point=functions.HelloGcs \
--memory=512MB \
--trigger-event-filters="type=google.cloud.storage.object.v1.archived" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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-archive-function \
--gen2 \
--runtime=dotnet8 \
--region=REGION \
--source=. \
--entry-point=HelloGcs.Function \
--trigger-event-filters="type=google.cloud.storage.object.v1.archived" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 ruby-archive-function \
--gen2 \
--runtime=ruby33 \
--region=REGION \
--source=. \
--entry-point=hello_gcs \
-
-trigger-event-filters="type=google.cloud.storage.object.v1.archived" \
-
-trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 php-archive-function \
--gen2 \
--runtime=php83 \
--region=REGION \
--source=. \
--entry-point=helloGCS \
-
-trigger-event-filters="type=google.cloud.storage.object.v1.archived" \
-
-trigger-event-filters="bucket=YOUR_BUCKET_NAME"

Utilisez l'option --runtime pour spécifier l'ID d'exécution d'une version PHP compatible pour exécuter votre fonction.

Remplacez les éléments suivants :

  • REGION : nom de la région Google Cloud dans laquelle vous souhaitez déployer votre fonction (par exemple, us-west1).
  • YOUR_BUCKET_NAME : nom du bucket Cloud Storage qui déclenche la fonction. Lorsque vous déployez des fonctions Cloud Run, spécifiez uniquement le nom du bucket, sans le gs:// initial. Exemple : --trigger-event-filters="bucket=my-bucket".

Archivage de l'objet : déclencher la fonction

Pour déclencher la fonction :

  1. Créez un fichier test-archive.txt vide dans le répertoire où se trouve l'exemple de code.

  2. Assurez-vous que la gestion des versions est activée dans votre bucket :

     gcloud storage buckets update gs://YOUR_BUCKET_NAME --versioning
  3. Importez le fichier dans Cloud Storage :

    gcloud storage cp test-archive.txt gs://YOUR_BUCKET_NAME

    YOUR_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.

  4. Archivez le fichier pour déclencher la fonction :

    gcloud storage rm gs://YOUR_BUCKET_NAME/test-archive.txt
  5. L'événement CloudEvent reçu doit apparaître dans les journaux :

    gcloud functions logs read YOUR_FUNCTION_NAME --region REGION --gen2 --limit=10

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 nodejs-metadata-function \
--gen2 \
--runtime=nodejs22 \
--region=REGION \
--source=. \
--entry-point=helloGCS \
--trigger-event-filters="type=google.cloud.storage.object.v1.metadataUpdated" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 python-metadata-function \
--gen2 \
--runtime=python312 \
--region=REGION \
--source=. \
--entry-point=hello_gcs \
--trigger-event-filters="type=google.cloud.storage.object.v1.metadataUpdated" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 go-metadata-function \
--gen2 \
--runtime=go122 \
--region=REGION \
--source=. \
--entry-point=HelloStorage \
--trigger-event-filters="type=google.cloud.storage.object.v1.metadataUpdated" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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-metadata-function \
--gen2 \
--runtime=java21 \
--region=REGION \
--source=. \
--entry-point=functions.HelloGcs \
--memory=512MB \
--trigger-event-filters="type=google.cloud.storage.object.v1.metadataUpdated" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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-metadata-function \
--gen2 \
--runtime=dotnet8 \
--region=REGION \
--source=. \
--entry-point=HelloGcs.Function \
--trigger-event-filters="type=google.cloud.storage.object.v1.metadataUpdated" \
--trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 ruby-metadata-function \
--gen2 \
--runtime=ruby33 \
--region=REGION \
--source=. \
--entry-point=hello_gcs \
-
-trigger-event-filters="type=google.cloud.storage.object.v1.metadataUpdated" \
-
-trigger-event-filters="bucket=YOUR_BUCKET_NAME"

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 php-metadata-function \
--gen2 \
--runtime=php83 \
--region=REGION \
--source=. \
--entry-point=helloGCS \
-
-trigger-event-filters="type=google.cloud.storage.object.v1.metadataUpdated" \
-
-trigger-event-filters="bucket=YOUR_BUCKET_NAME"

Utilisez l'option --runtime pour spécifier l'ID d'exécution d'une version PHP compatible pour exécuter votre fonction.

Remplacez les éléments suivants :

  • REGION : nom de la région Google Cloud dans laquelle vous souhaitez déployer votre fonction (par exemple, us-west1).
  • YOUR_BUCKET_NAME : nom du bucket Cloud Storage qui déclenche la fonction. Lorsque vous déployez des fonctions Cloud Run, spécifiez uniquement le nom du bucket, sans le gs:// initial. Exemple : --trigger-event-filters="bucket=my-bucket".

Mise à jour des métadonnées de l'objet : déclencher la fonction

Pour déclencher la fonction :

  1. Créez un fichier test-metadata.txt vide dans le répertoire où se trouve l'exemple de code.

  2. Assurez-vous que votre bucket est un bucket sans gestion des versions :

    gcloud storage buckets update gs://YOUR_BUCKET_NAME --no-versioning
  3. Importez le fichier dans Cloud Storage :

    gcloud storage cp test-metadata.txt gs://YOUR_BUCKET_NAME

    YOUR_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.

  4. Mettez à jour les métadonnées du fichier :

    gcloud storage objects update gs://YOUR_BUCKET_NAME/test-metadata.txt --content-type=text/plain
  5. L'événement CloudEvent reçu doit apparaître dans les journaux :

    gcloud functions logs read YOUR_FUNCTION_NAME --region REGION --gen2 --limit=10

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 et 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 :

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. 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 les fonctions Cloud Run que vous avez créées dans ce tutoriel, exécutez la commande suivante :

gcloud functions delete YOUR_FUNCTION_NAME --gen2 --region REGION

Vous pouvez également supprimer des fonctions Cloud Run à partir de la console Google Cloud.

Étape suivante