Utiliser Eventarc pour recevoir des événements depuis Cloud Storage

Ce tutoriel explique comment déployer une application conteneurisée à l'aide d'un service Cloud Run authentifié qui reçoit des événements via Eventarc.

En spécifiant des filtres pour un déclencheur Eventarc, vous pouvez configurer le routage des événements, y compris la source et la cible des événements. Dans ce cas, la mise à jour d'un bucket Cloud Storage déclenche l'événement et une requête est envoyée à votre service Cloud Run sous la forme d'une requête HTTP.

Créer un dépôt standard Artifact Registry

Créez un dépôt standard Artifact Registry pour stocker votre image de conteneur :

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

Remplacez REPOSITORY par un nom unique pour le dépôt.

Créer un bucket Cloud Storage

Créez un bucket Cloud Storage qui servira de source d'événements :

gcloud storage buckets create gs://PROJECT_ID-bucket/ --location=us-central1

Une fois la source d'événements créée, vous pouvez déployer le service récepteur d'événements sur Cloud Run.

Déployer un récepteur d'événements sur Cloud Run

Vous allez déployer un service Cloud Run qui reçoit et consigne les événements.

  1. Clonez le dépôt GitHub.

    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.

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

    Node.js

    cd nodejs-docs-samples/eventarc/audit-storage/

    Python

    cd python-docs-samples/eventarc/audit-storage/

    Go

    cd golang-samples/eventarc/audit_storage/

    Java

    cd java-docs-samples/eventarc/audit-storage/

    C#

    cd dotnet-docs-samples/eventarc/audit-storage/
  3. Créez le conteneur pour le service Cloud Run :

    export PROJECT_ID=$(gcloud config get-value project)
    export SERVICE_NAME=helloworld-events
    gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
  4. Déployez l'image de conteneur dans Cloud Run :

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
  5. Lorsque l'invite Autoriser l'accès public à helloworld-events (O/N) ? s'affiche, répondez en saisissant n pour "Non".

Lorsque l'URL du service Cloud Run s'affiche, le déploiement est terminé.

Créer un déclencheur Eventarc

Le déclencheur Eventarc envoie des événements à partir du bucket Cloud Storage vers le service Cloud Run helloworld-events. Le service nécessite une authentification, et l'événement doit être déclenché par un appelant disposant d'un compte de service doté des rôles et autorisations IAM requis pour utiliser la ressource.

  1. Créez un déclencheur filtrant les événements Cloud Storage :

    gcloud eventarc triggers create ${SERVICE_NAME} \
        --destination-run-service=${SERVICE_NAME} \
        --destination-run-region=${REGION} \
        --location=${REGION} \
        --event-filters="type=google.cloud.storage.object.v1.finalized" \
        --event-filters="bucket=PROJECT_ID-bucket" \
        --service-account=PROJECT_NUMBER-compute@

    Cette action crée un déclencheur appelé helloworld-events.

    Notez que lorsque vous créez un déclencheur Eventarc pour la première fois dans un projet Google Cloud , le provisionnement de l'agent de service Eventarc peut prendre quelques instants. Ce problème peut généralement être résolu en essayant à nouveau de créer le déclencheur. Pour en savoir plus, consultez Erreurs d'autorisation refusée.

  2. Vérifiez que le déclencheur a bien été créé. Notez que, bien que votre déclencheur soit créé immédiatement, il peut falloir jusqu'à deux minutes pour qu'il soit pleinement opérationnel.

    gcloud eventarc triggers list --location=${REGION}

    La sortie devrait ressembler à ce qui suit :

    NAME: helloworld-events
    TYPE: google.cloud.storage.object.v1.finalized
    DESTINATION: Cloud Run service: helloworld-events
    ACTIVE: Yes
    

Générer et afficher un événement

Importez un fichier texte dans le bucket Cloud Storage pour générer un événement acheminé vers le service Cloud Run. Le service Cloud Run consigne l'événement dans les journaux de service.

  1. Pour générer un événement, procédez comme suit :

    Transférez un fichier texte vers Cloud Storage :

     echo "Hello World" > random.txt
     gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
    

    L'importation génère un événement, et le service Cloud Run consigne le message de l'événement.

  2. Pour afficher l'entrée de journal, procédez comme suit :

    1. Filtrez les entrées de journal et renvoyez la sortie au format JSON :

      gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
      
    2. Recherchez une entrée de journal semblable à ceci :

      "textPayload": "Detected change in Cloud Storage bucket: objects/random.txt"
      

L'affichage des journaux peut nécessiter quelques instants. S'ils n'apparaissent pas immédiatement, patientez une minute et vérifiez de nouveau.