Créer un sujet

Dans Pub/Sub, un sujet est une ressource nommée qui représente un flux de messages. Vous devez créer un sujet avant de pouvoir publier ou vous abonner avec lui. Pub/Sub prend en charge deux types de sujets : un sujet standard et un sujet d'importation.

Ce document explique comment créer un sujet standard Pub/Sub. Si que vous souhaitez en savoir plus sur un sujet d'importation et sur la façon d'en créer un, consultez À propos des sujets d'importation

Pour créer un sujet, vous pouvez utiliser la console Google Cloud, la Google Cloud CLI, la bibliothèque cliente ou l'API Pub/Sub.

Avant de commencer

Rôles et autorisations requis pour gérer les sujets

Pour obtenir les autorisations nécessaires pour créer et gérer des sujets, demandez à votre administrateur de vous accorder le Éditeur Pub/Sub(roles/pubsub.editor) un rôle IAM sur votre sujet ou 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.

Ce rôle prédéfini contient les autorisations requises pour créer et gérer des sujets. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Vous devez disposer des autorisations suivantes pour créer et gérer des sujets :

  • Créez un sujet: pubsub.topics.create
  • Supprimer un sujet: pubsub.topics.delete
  • Pour dissocier un abonnement d'un sujet : pubsub.topics.detachSubscription
  • Obtenir un thème: pubsub.topics.get
  • Lister un sujet : pubsub.topics.list
  • Publier dans un sujet: pubsub.topics.publish
  • Modifier un sujet : pubsub.topics.update
  • Obtenez la stratégie IAM d'un sujet : pubsub.topics.getIamPolicy
  • Configurez la stratégie IAM d'un sujet : pubsub.topics.setIamPolicy

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

Vous pouvez configurer le contrôle des accès au niveau du projet et au niveau de ressources individuelles. Vous pouvez créer un abonnement dans un projet le joindre à un sujet situé dans un autre projet. Assurez-vous de disposer des autorisations requises pour chaque projet.

Propriétés d'un sujet

Lorsque vous créez ou mettez à jour un sujet, vous devez spécifier ses propriétés.

Ajouter un abonnement par défaut

Ajoute un abonnement par défaut au sujet Pub/Sub. Vous pouvez créer un autre abonnement pour le sujet après la création du sujet. L'abonnement par défaut possède les propriétés suivantes :

  • ID d'abonnement de -sub
  • Type de distribution : pull
  • Durée de conservation des messages de sept jours
  • Expire après 31 jours d'inactivité
  • Délai d'accusé de réception de 10 secondes
  • Stratégie de nouvelle tentative : immédiate

Utiliser un schéma

Un schéma est un format que le champ de données du message doit respecter. Un schéma est un contrat entre l'éditeur et l'abonné que Pub/Sub applique. Les schémas de sujet aident à standardiser les messages et les autorisations nécessaires pour être utilisés par différentes équipes dans votre organisation. Pub/Sub crée une autorité centrale pour les types de messages et les autorisations. Pour créer un sujet avec un schéma, consultez la section Présentation du schéma.

Activer l'ingestion

L'activation de cette propriété vous permet d'ingérer des flux de données provenant de sources externes dans un sujet, de Google Cloud. Pour créer un thème d'importation pour l'ingestion, consultez Créer un thème d'importation.

Activer la conservation des messages

Spécifie la durée pendant laquelle le sujet Pub/Sub conserve les messages après leur publication. Une fois la durée de conservation des messages terminée, Pub/Sub peut supprimer le message, quel que soit son de confirmation. Le stockage des messages est facturé pour le stockage messages publiés dans le sujet

  • Par défaut : non activé
  • Valeur minimale = 10 minutes
  • Valeur maximale = 31 jours

Exporter les données des messages vers BigQuery

Activer cette propriété vous permet de créer un abonnement BigQuery qui écrit des messages dans une table BigQuery existante qu'elles soient reçues. Vous n'avez pas besoin de configurer un abonné client. Pour en savoir plus sur les abonnements BigQuery, consultez la page Abonnements BigQuery.

Exporter des données de message vers Cloud Storage

Activer cette propriété vous permet de créer un bucket Cloud Storage abonnement qui écrit les messages dans un à mesure qu'elles sont reçues. Vous n'avez pas besoin de configurer un abonné client. Pour en savoir plus sur les abonnements Cloud Storage, consultez la page Abonnements Cloud Storage.

Clé de chiffrement gérée par Google

Indique que le sujet est chiffré à l'aide de clés de chiffrement gérées par Google. Par défaut, Pub/Sub chiffre les messages à l'aide de clés gérées par Google, Par conséquent, choisir cette option conserve le comportement par défaut. Google gère la clé une gestion et une rotation automatiques de vos messages, protégées par le chiffrement le plus performant. Cette option ne nécessite aucune configuration supplémentaire. Pour en savoir plus sur les clés de chiffrement gérées par Google, consultez Chiffrement par défaut avec des clés appartenant à Google et gérées par Google.

Clé Cloud KMS

Indique si le sujet est chiffré avec une clé de chiffrement gérée par le client (CMEK). Par défaut, Pub/Sub chiffre les messages avec des clés appartenant à Google et gérées par Google. Si vous spécifiez cette option, Pub/Sub utilise le modèle de chiffrement encapsulé avec CMEK. Dans cette approche, Cloud KMS ne chiffre pas les messages. À la place, Cloud KMS chiffre les clés de chiffrement de données (DEK) que Pub/Sub crée pour chaque sujet. Pub/Sub chiffre les messages la dernière clé DEK générée pour le sujet. Pub/Sub déchiffre les messages peu de temps avant qu'ils ne soient distribués aux abonnés. Pour en savoir plus sur la création d'une clé, consultez Configurer le chiffrement des messages.

Créer un sujet

Créez un sujet avant de pouvoir y publier des messages ou de vous y abonner.

Console

Pour créer un sujet, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Sujets de Pub/Sub.

    Accéder aux sujets

  2. Cliquez sur Create topic (Créer un sujet).

  3. Dans le champ ID du sujet, saisissez un ID pour votre sujet. Pour en savoir plus sur l'attribution de noms aux sujets, consultez les consignes d'attribution de noms.

  4. Conservez l'option Ajouter un abonnement par défaut.

  5. Facultatif. Ne sélectionnez pas les autres options.

  6. Cliquez sur Create topic (Créer un sujet).

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pour créer un sujet, exécutez la commande gcloud pubsub topics create :

    gcloud pubsub topics create TOPIC_ID

REST

Pour créer un sujet, utilisez la projects.topics.create méthode:

La demande doit être authentifiée à l'aide d'un jeton d'accès dans l'en-tête Authorization. Pour obtenir un jeton d'accès pour les identifiants par défaut actuels de l'application, exécutez la commande suivante : gcloud auth application-default print-access-token.

PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer ACCESS_TOKEN
    

Où :

  • PROJECT_ID est l'ID de votre projet.
  • TOPIC_ID est l'ID de votre sujet.
  • Réponse :

    {
     "name": "projects/PROJECT_ID/topics/TOPIC_ID"
    }

    C++

    Avant d'essayer cet exemple, suivez les instructions de configuration de C++ dans le Guide de démarrage rapide de Pub/Sub bibliothèques clientes. Pour en savoir plus, consultez les API C++ Pub/Sub documentation de référence.

    Pour vous authentifier auprès de Pub/Sub, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

    namespace pubsub = ::google::cloud::pubsub;
    namespace pubsub_admin = ::google::cloud::pubsub_admin;
    [](pubsub_admin::TopicAdminClient client, std::string project_id,
       std::string topic_id) {
      auto topic = client.CreateTopic(
          pubsub::Topic(std::move(project_id), std::move(topic_id)).FullName());
      // Note that kAlreadyExists is a possible error when the library retries.
      if (topic.status().code() == google::cloud::StatusCode::kAlreadyExists) {
        std::cout << "The topic already exists\n";
        return;
      }
      if (!topic) throw std::move(topic).status();
    
      std::cout << "The topic was successfully created: " << topic->DebugString()
                << "\n";
    }

    C#

    Avant d'essayer cet exemple, suivez les instructions de configuration de C# dans le Guide de démarrage rapide de Pub/Sub bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub C#.

    Pour vous authentifier auprès de Pub/Sub, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

    
    using Google.Cloud.PubSub.V1;
    using Grpc.Core;
    using System;
    
    public class CreateTopicSample
    {
        public Topic CreateTopic(string projectId, string topicId)
        {
            PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
            var topicName = TopicName.FromProjectTopic(projectId, topicId);
            Topic topic = null;
    
            try
            {
                topic = publisher.CreateTopic(topicName);
                Console.WriteLine($"Topic {topic.Name} created.");
            }
            catch (RpcException e) when (e.Status.StatusCode == StatusCode.AlreadyExists)
            {
                Console.WriteLine($"Topic {topicName} already exists.");
            }
            return topic;
        }
    }

    Go

    Avant d'essayer cet exemple, suivez les instructions de configuration de Go dans le Guide de démarrage rapide de Pub/Sub bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub Go.

    Pour vous authentifier auprès de Pub/Sub, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/pubsub"
    )
    
    func create(w io.Writer, projectID, topicID string) error {
    	// projectID := "my-project-id"
    	// topicID := "my-topic"
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	t, err := client.CreateTopic(ctx, topicID)
    	if err != nil {
    		return fmt.Errorf("CreateTopic: %w", err)
    	}
    	fmt.Fprintf(w, "Topic created: %v\n", t)
    	return nil
    }
    

    Java

    Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de Pub/Sub : utiliser les bibliothèques clientes. Pour en savoir plus, consultez les API Java Pub/Sub documentation de référence.

    Pour vous authentifier auprès de Pub/Sub, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

    
    import com.google.cloud.pubsub.v1.TopicAdminClient;
    import com.google.pubsub.v1.Topic;
    import com.google.pubsub.v1.TopicName;
    import java.io.IOException;
    
    public class CreateTopicExample {
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String topicId = "your-topic-id";
    
        createTopicExample(projectId, topicId);
      }
    
      public static void createTopicExample(String projectId, String topicId) throws IOException {
        try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
          TopicName topicName = TopicName.of(projectId, topicId);
          Topic topic = topicAdminClient.createTopic(topicName);
          System.out.println("Created topic: " + topic.getName());
        }
      }
    }

    Node.js

    /**
     * TODO(developer): Uncomment this variable before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    
    // Imports the Google Cloud client library
    const {PubSub} = require('@google-cloud/pubsub');
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createTopic(topicNameOrId) {
      // Creates a new topic
      await pubSubClient.createTopic(topicNameOrId);
      console.log(`Topic ${topicNameOrId} created.`);
    }

    Node.js

    /**
     * TODO(developer): Uncomment this variable before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    
    // Imports the Google Cloud client library
    import {PubSub} from '@google-cloud/pubsub';
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createTopic(topicNameOrId: string) {
      // Creates a new topic
      await pubSubClient.createTopic(topicNameOrId);
      console.log(`Topic ${topicNameOrId} created.`);
    }

    PHP

    Avant d'essayer cet exemple, suivez les instructions de configuration pour PHP du guide de démarrage rapide de Pub/Sub : utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub PHP.

    Pour vous authentifier auprès de Pub/Sub, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

    use Google\Cloud\PubSub\PubSubClient;
    
    /**
     * Creates a Pub/Sub topic.
     *
     * @param string $projectId  The Google project ID.
     * @param string $topicName  The Pub/Sub topic name.
     */
    function create_topic($projectId, $topicName)
    {
        $pubsub = new PubSubClient([
            'projectId' => $projectId,
        ]);
        $topic = $pubsub->createTopic($topicName);
    
        printf('Topic created: %s' . PHP_EOL, $topic->name());
    }

    Python

    Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de Pub/Sub : utiliser les bibliothèques clientes. Pour en savoir plus, consultez les API Python Pub/Sub documentation de référence.

    Pour vous authentifier auprès de Pub/Sub, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

    from google.cloud import pubsub_v1
    
    # TODO(developer)
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    
    publisher = pubsub_v1.PublisherClient()
    topic_path = publisher.topic_path(project_id, topic_id)
    
    topic = publisher.create_topic(request={"name": topic_path})
    
    print(f"Created topic: {topic.name}")

    Ruby

    Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby dans le Guide de démarrage rapide de Pub/Sub bibliothèques clientes. Pour en savoir plus, consultez les API Ruby Pub/Sub documentation de référence.

    Pour vous authentifier auprès de Pub/Sub, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

    # topic_id = "your-topic-id"
    
    pubsub = Google::Cloud::Pubsub.new
    
    topic = pubsub.create_topic topic_id
    
    puts "Topic #{topic.name} created."

    Contraintes liées aux règles d'administration

    Les règles d'administration peuvent restreindre la création de sujets, par exemple une règle peut restreindre le stockage des messages dans la même région. Pour éviter les erreurs de création de sujets, examinez et mettez à jour les règles de l'organisation, si nécessaire, avant de créer un sujet.

    Si vous venez de créer votre projet, attendez quelques minutes que la règle d'administration doit s'initialiser avant de créer un sujet.

    Accéder à la page Règles d'administration

    Pour en savoir plus, consultez la section Configurer des règles de stockage des messages.

    Étape suivante