Publier des événements dans un job Cloud Run

Ce guide de démarrage rapide explique comment publier et recevoir des messages d'événement en créant un bus Eventarc Advanced et en vous y inscrivant dans votre projet Google Cloud.

  • Un bus fait office de routeur central, recevant les messages provenant de sources d'événements ou publiés par des fournisseurs.

  • Un enregistrement achemine les messages reçus par le bus vers une ou plusieurs destinations via un pipeline de traitement.

Dans le cadre de ce guide démarrage rapide, vous allez effectuer les étapes suivantes :

  1. déployer un job Cloud Run ;

  2. Créez un bus Eventarc Advanced.

  3. Créez une inscription Eventarc Advanced.

  4. Publiez un message d'événement dans le bus.

  5. Affichez les données d'événement dans les journaux et vérifiez que le job Cloud Run s'est bien exécuté.

Vous pouvez suivre ce guide de démarrage rapide dans gcloud CLI.

Avant de commencer

Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour en savoir plus sur la résolution de ce problème, consultez Développer des applications dans un environnement Google Cloud limité.

  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. Install the Google Cloud CLI.

  3. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  4. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Run and Eventarc APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com 
  8. Install the Google Cloud CLI.

  9. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  10. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  11. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the Cloud Run and Eventarc APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com 
  14. Mettez à jour les composants gcloud :
    gcloud components update
  15. Connectez-vous à votre compte :
    gcloud auth login
  16. Définissez la variable de configuration utilisée dans ce guide de démarrage rapide :
    REGION=REGION

    Remplacez REGION par un emplacement compatible pour le bus (par exemple, us-central1).

  17. Si vous êtes le créateur du projet, vous disposez du rôle de base Propriétaire (roles/owner). Par défaut, ce rôle Identity and Access Management (IAM) inclut les autorisations nécessaires pour accéder à la plupart des ressources Google Cloud. Vous pouvez ignorer cette étape.

    Si vous n'êtes pas le créateur du projet, les autorisations requises doivent être accordées au compte principal approprié sur le projet. Par exemple, un compte principal peut être un compte Google (pour les utilisateurs finaux) ou un compte de service (pour les applications et les charges de travail de calcul).

    Autorisations requises

    Pour obtenir les autorisations nécessaires pour suivre ce guide de démarrage rapide, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

    Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

    Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

  18. Pour accorder à Eventarc Advanced les autorisations nécessaires pour exécuter un job Cloud Run, demandez à votre administrateur d'attribuer le rôle IAM Demandeur Cloud Run (roles/run.invoker) sur votre projetGoogle Cloud à un compte de service :
    1. Créez un compte de service. À des fins de test, vous allez associer ce compte de service à un pipeline Eventarc Advanced pour représenter l'identité du pipeline.
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      Remplacez SERVICE_ACCOUNT_NAME par le nom que vous souhaitez donner à votre compte de service.
    2. Attribuez le rôle IAM roles/run.invoker au compte de service :
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role=roles/run.invoker
  19. Déployer un job Cloud Run

    Déployez un job Cloud Run comme destination de votre événement. Contrairement à un service Cloud Run, qui écoute et diffuse les requêtes, un job Cloud Run n'exécute que ses tâches et se ferme une fois qu'elle a terminé. Un job n'écoute pas et ne diffuse pas les requêtes.

    D'autres destinations d'événements sont acceptées, comme un sujet Pub/Sub, des workflows ou un autre point de terminaison HTTP. Pour en savoir plus, consultez Fournisseurs et destinations d'événements.

    Déployez un job à partir d'un exemple de conteneur à l'aide de la commande gcloud run jobs deploy.

    gcloud run jobs deploy JOB_NAME --image us-docker.pkg.dev/cloudrun/container/job:latest \
        --region=$REGION

    Remplacez JOB_NAME par un nom unique pour le job Cloud Run (par exemple, my-job).

    Créer un bus Eventarc Advanced

    Un bus reçoit les messages d'événement d'une source de messages ou publiés par un fournisseur, et sert de routeur de messages.

    Pour en savoir plus, consultez Créer un bus pour acheminer les messages.

    Créez un bus Eventarc Advanced dans votre projet à l'aide de la commande gcloud eventarc message-buses create :

    gcloud eventarc message-buses create BUS_NAME \
        --location=$REGION

    Remplacez BUS_NAME par l'ID de votre bus ou par un nom complet, par exemple my-bus.

    Créer une inscription Eventarc Advanced

    Une inscription détermine les messages qui sont acheminés vers une destination. Il spécifie également le pipeline utilisé pour configurer la destination des messages d'événement. Dans ce cas, la destination cible est un job Cloud Run.

    Pour en savoir plus, consultez Créer un enregistrement pour recevoir des événements.

    Lorsque vous utilisez la gcloud CLI, vous créez d'abord un pipeline, puis un enregistrement :

    1. Créez un pipeline à l'aide de la commande gcloud eventarc pipelines create :

      gcloud eventarc pipelines create PIPELINE_NAME \
          --destinations=http_endpoint_uri='https://REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/PROJECT_NUMBER/jobs/JOB_NAME:run',http_endpoint_message_binding_template='{"body": ""}',oauth_token_authentication_service_account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
          --input-payload-format-json= \
          --location=$REGION

      Remplacez les éléments suivants :

      • PIPELINE_NAME : ID du pipeline ou nom complet, par exemple my-pipeline.
      • PROJECT_NUMBER : numéro de votre projet Google Cloud . Vous pouvez récupérer votre numéro de projet en exécutant la commande suivante :
      gcloud projects describe PROJECT_ID --format='value(projectNumber)'

      Veuillez noter les points suivants :

      • La clé http_endpoint_message_binding_template transforme l'événement au format attendu par l'API Cloud Run Admin. Lorsque vous définissez une liaison de message, vous devez configurer un format d'entrée pour accéder à la charge utile.
      • La clé oauth_token_authentication_service_account spécifie une adresse e-mail de compte de service. Cette adresse e-mail est utilisée pour générer un jeton OAuth, généralement utilisé uniquement lors de l'appel des API Google hébergées sur *.googleapis.com.
    2. Créez un enregistrement à l'aide de la commande gcloud eventarc enrollments create :

      gcloud eventarc enrollments create ENROLLMENT_NAME \
          --cel-match=MATCH_EXPRESSION \
          --destination-pipeline=PIPELINE_NAME \
          --message-bus=BUS_NAME \
          --message-bus-project=PROJECT_ID \
          --location=$REGION

      Remplacez les éléments suivants :

      • ENROLLMENT_NAME : ID de l'enregistrement ou nom complet, par exemple my-enrollment.
      • MATCH_EXPRESSION : expression de correspondance pour cet enregistrement à l'aide de CEL, par exemple :

        "message.type == 'hello-world-type'"
        

    Publier un message d'événement dans le bus

    Pour publier directement un message sur votre bus, utilisez la commande gcloud eventarc message-buses publish ou envoyez une requête à l'API REST Eventarc Publishing. Pour en savoir plus, consultez Publier des événements directement.

    Le message doit être au format CloudEvents, une spécification permettant d'uniformiser la description des données d'événement. L'élément data correspond à la charge utile de votre événement. Tout code JSON bien formé peut être inséré dans ce champ. Pour en savoir plus sur les attributs de contexte CloudEvents, consultez Format d'événement.

    Voici des exemples de publication directe d'un événement sur un bus Eventarc Advanced :

    Exemple 1

    Publiez un événement dans un bus à l'aide de la gcloud CLI et d'un --event-data ainsi que d'autres indicateurs d'attributs d'événement :

    gcloud eventarc message-buses publish BUS_NAME \
        --event-data='{"key": "hello-world-data"}' \
        --event-id=hello-world-id-1234 \
        --event-source=hello-world-source \
        --event-type=hello-world-type \
        --event-attributes="datacontenttype=application/json" \
        --location=$REGION
    

    Exemple 2

    Publiez un événement dans un bus en tant que message JSON à l'aide de la gcloud CLI et d'un indicateur --json-message :

    gcloud eventarc message-buses publish BUS_NAME \
        --location=$REGION \
        --json-message='{"id": "hello-world-id-1234", "type":
     "hello-world-type", "source":
     "hello-world-source", "specversion": "1.0", "data":
     {"key": "hello-world-data"}}'
    

    Une fois l'événement publié, vous devriez recevoir le message "Événement publié".

    Afficher les données d'événement dans les journaux Cloud Run

    Après avoir publié un événement sur votre bus Eventarc Advanced, consultez les journaux de votre job Cloud Run pour vérifier que l'événement a été reçu comme prévu.

    1. Filtrez les entrées de journal et renvoyez la sortie à l'aide de la commande gcloud logging read :

      gcloud logging read 'textPayload: "hello-world-data"'
      
    2. Recherchez une entrée de journal semblable à ceci :

      insertId: 670808e70002b5c6477709ae
      labels:
      instanceId: 007989f2a10a4a33c21024f2c8e06a9de65d9b4fdc2ee27697a50379b3fab2f975b9233dc357d50b06270829b9b479d5a1ee54a10fa2cb2d98c5f77a0895e2be0f9e6e4b20
      logName: projects/PROJECT_ID/logs/run.googleapis.com%2Fstderr
      receiveTimestamp: '2025-10-06T21:15:22.988264020Z'
      resource:
      labels:
      ...
      type: cloud_run_revision
      textPayload: "[2025-10-06 21:15:22,676] INFO in server: Body: b'{\"key\": \"hello-world-data\"\
        }'"
      timestamp: '2025-10-06T21:15:22.675530Z'
      
    3. Vérifiez que le job Cloud Run s'est exécuté correctement à l'aide de la commande gcloud run jobs describe :

      gcloud run jobs describe JOB_NAME \
          --region=$REGION
      

      Des résultats semblables aux lignes suivantes devraient s'afficher :

      ✔ Job JOB_NAME in region us-central1
      Executed 1 time
      ...
      

    Vous avez créé un bus et un enregistrement Eventarc Advanced, publié un message d'événement dans le bus et vérifié le résultat attendu dans les journaux du récepteur d'événements.

    Effectuer un nettoyage

    Pour éviter de continuer à payer des frais une fois ce guide de démarrage rapide terminé, supprimez les ressources que vous avez créées :

    1. Supprimez un job Cloud Run.

    2. Supprimez les ressources Eventarc Advanced :

      1. Supprimer un enregistrement

      2. Supprimez un pipeline.

      3. Supprimer un bus

    Vous pouvez également supprimer votre projet Google Cloud pour éviter des frais. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    Étapes suivantes