Créer des abonnements Cloud Storage

Ce document explique comment créer un abonnement Cloud Storage. Vous pouvez utiliser la console Trusted Cloud , Google Cloud CLI, la bibliothèque cliente ou l'API Pub/Sub pour créer un abonnement Cloud Storage.

Avant de commencer

Avant de lire ce document, assurez-vous de connaître les éléments suivants :

Rôles et autorisations requis

Voici une liste de consignes concernant les rôles et les autorisations :

  • Pour créer un abonnement, vous devez configurer le contrôle des accès au niveau du projet.

  • Vous avez également besoin d'autorisations au niveau des ressources si vos abonnements et vos sujets se trouvent dans des projets différents, comme indiqué plus loin dans cette section.

  • Pour créer un abonnement Cloud Storage, l'agent de service Pub/Sub ou un compte de service personnalisé doivent être autorisés à écrire dans le bucket Cloud Storage spécifique et à lire les métadonnées du bucket. Pour savoir comment accorder ces autorisations, consultez la section suivante de ce document.

Pour obtenir les autorisations nécessaires pour créer des abonnements Cloud Storage, demandez à votre administrateur de vous accorder le rôle IAM Éditeur Pub/Sub (roles/pubsub.editor) sur le 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 des abonnements Cloud Storage. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour créer des abonnements Cloud Storage :

  • Créez un abonnement : pubsub.subscriptions.create
  • Joignez un abonnement à un sujet : pubsub.topics.attachSubscription
  • Extraire des données d'un abonnement : pubsub.subscriptions.consume
  • Souscrivez un abonnement : pubsub.subscriptions.get
  • Lister un abonnement : pubsub.subscriptions.list
  • Modifier un abonnement : pubsub.subscriptions.update
  • Supprimer un abonnement : pubsub.subscriptions.delete
  • Obtenez la stratégie IAM pour un abonnement : pubsub.subscriptions.getIamPolicy
  • Configurez la stratégie IAM pour un abonnement : pubsub.subscriptions.setIamPolicy

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

Pour permettre à un compte principal d'un projet de créer un abonnement Cloud Storage dans un autre projet, vous devez lui attribuer le rôle Éditeur Pub/Sub (roles/pubsub.editor) dans les deux projets. Cela fournit les autorisations nécessaires pour créer le nouvel abonnement Trusted Cloud et l'associer au sujet d'origine. Le rôle Éditeur Pub/Sub (roles/pubsub.editor) sur le sujet vous permet également d'associer des abonnements Trusted Cloud dans un autre projet au sujet.

Attribuer des rôles aux comptes de service

Certains services Trusted Cloud by S3NS disposent de comptes de service gérés par Trusted Cloudqui leur permettent d'accéder à vos ressources. Ces comptes de service sont appelés agents de service. Pub/Sub crée et gère un agent de service pour chaque projet au format service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

Vous pouvez choisir d'autoriser l'agent de service Pub/Sub ou un compte de service personnalisé à écrire dans le bucket Cloud Storage.

Accorder des autorisations à l'agent de service Pub/Sub signifie que tout utilisateur autorisé à créer un abonnement dans votre projet peut écrire dans le bucket Cloud Storage. Si vous souhaitez accorder des autorisations plus précises pour écrire dans le bucket Cloud Storage, configurez plutôt un compte de service personnalisé.

Pour en savoir plus sur Cloud Storage IAM, consultez Cloud Storage Identity and Access Management.

Attribuer des rôles Cloud Storage à l'agent de service Pub/Sub

Si vous souhaitez créer un abonnement Cloud Storage à l'aide de l'agent de service Pub/Sub, celui-ci doit être autorisé à écrire dans le bucket Cloud Storage spécifique et à lire les métadonnées du bucket.

Attribuez les rôles Créateur des objets de l'espace de stockage (roles/storage.objectCreator) et Lecteur des anciens buckets Storage (roles/storage.legacyBucketReader) à l'agent de service Pub/Sub. Vous pouvez accorder cette autorisation sur un bucket individuel ou sur l'ensemble du projet.

Bucket

  1. Dans la console Trusted Cloud , accédez à la page Cloud Storage.

    Accéder à Cloud Storage

  2. Cliquez sur le bucket Cloud Storage dans lequel vous souhaitez écrire des messages.

    La page Détails du bucket s'ouvre.

  3. Sur la page Informations sur le bucket, cliquez sur l'onglet Autorisations.

  4. Dans l'onglet Autorisations > Afficher par compte principal, cliquez sur Accorder l'accès.

    La page Accorder l'accès s'ouvre.

  5. Dans la section Ajouter des comptes principaux, saisissez le nom de votre agent de service Pub/Sub pour le projet contenant l'abonnement.

    L'agent de service est au format service-PROJECT_NUMBER@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Par exemple, pour un projet avec PROJECT_NUMBER=112233445566, l'agent de service est au format service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  6. Dans le menu déroulant Attribuer des rôles > Sélectionner un rôle, saisissez Creator et sélectionnez le rôle Créateur des objets Storage.

  7. Cliquez sur Ajouter un autre rôle.

  8. Dans le menu déroulant Sélectionner un rôle, saisissez Bucket Reader, puis sélectionnez le rôle Lecteur de buckets Storage (ancienne version).

  9. Cliquez sur Enregistrer.

Projet

  1. Dans la console Trusted Cloud , accédez à la page IAM.

    Accéder à IAM

  2. Dans l'onglet Autorisations > Afficher par compte principal, cliquez sur Accorder l'accès.

    La page Accorder l'accès s'ouvre.

  3. Dans la section Ajouter des comptes principaux, saisissez le nom de votre agent de service Pub/Sub.

    L'agent de service est au format service-PROJECT_NUMBER@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Par exemple, pour un projet avec PROJECT_NUMBER=112233445566, l'agent de service est au format service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  4. Dans le menu déroulant Attribuer des rôles > Sélectionner un rôle, saisissez Storage Admin et sélectionnez le rôle Administrateur de l'espace de stockage.

  5. Cliquez sur Enregistrer.

Attribuer des rôles Cloud Storage à un compte de service personnalisé

Si vous souhaitez utiliser un compte de service personnalisé pour écrire dans un bucket Cloud Storage, vous devez définir les autorisations suivantes :

  • Le compte de service personnalisé doit être autorisé à écrire dans le bucket Cloud Storage spécifique et à lire les métadonnées du bucket.
  • L'agent de service Pub/Sub doit disposer de l'autorisation iam.serviceAccounts.getAccessToken sur le compte de service personnalisé.
  • L'utilisateur qui crée l'abonnement doit disposer de l'autorisation iam.serviceAccounts.actAs sur le compte de service personnalisé.

Pour créer le compte de service et accorder des autorisations, procédez comme suit :

  1. Créez le compte de service personnalisé. Le compte de service doit se trouver dans le même projet que l'abonnement.

  2. Attribuez les rôles Créateur des objets de l'espace de stockage (roles/storage.objectCreator) et Lecteur de buckets Storage (hérité) (roles/storage.legacyBucketReader) au compte de service personnalisé.

    Vous pouvez accorder l'autorisation de compte de service sur une seule table du projet ou sur toutes les tables du projet. Pour ce faire, consultez la section appropriée de Attribuer des rôles Trusted Cloud à l'agent de service Pub/Sub. Dans la procédure, remplacez l'adresse e-mail de l'agent de service Pub/Sub par l'adresse e-mail personnalisée du compte de service.

  3. Accordez à l'agent de service Pub/Sub l'autorisation iam.serviceAccounts.getAccessToken sur le compte de service personnalisé ou sur tous les comptes de service du projet. Vous pouvez accorder cette autorisation en attribuant le rôle roles/iam.serviceAccountTokenCreator à l'agent de service Pub/Sub.

    Choisissez la méthode appropriée en fonction de vos besoins.

Compte de service

  1. Dans la console Trusted Cloud , accédez à la page Comptes de service.

    Accéder à la page "Comptes de service"

  2. Saisissez le nom du compte de service personnalisé dans le filtre.

  3. Sélectionnez le compte de service dans la liste.

  4. Cliquez sur Comptes principaux ayant accès.

  5. Cliquez sur Accorder l'accès.

  6. Dans la section Ajouter des comptes principaux, saisissez le nom de votre agent de service Pub/Sub pour le projet contenant l'abonnement. L'agent de service est au format service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Par exemple, pour un projet avec project-number=112233445566, l'agent de service est au format service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  7. Dans la liste déroulante Sélectionner un rôle, saisissez Service Account, puis sélectionnez le rôle Créateur de jetons du compte de service.

  8. Cliquez sur Enregistrer.

Projet

  1. Dans la console Trusted Cloud , accédez à la page IAM.

    Accéder à IAM

  2. Cliquez sur Accorder l'accès.

  3. Dans la section Ajouter des comptes principaux, saisissez le nom de votre compte de service personnalisé.

  4. Dans la section Attribuer des rôles, cliquez sur Ajouter un autre rôle.

  5. Dans la liste déroulante Sélectionner un rôle, saisissez Service Account, puis sélectionnez le rôle Créateur de jetons du compte de service.

  6. Cliquez sur Enregistrer.

Si vous avez créé le compte de service personnalisé, vous devriez déjà disposer de l'autorisation iam.serviceAccounts.actAs nécessaire. Si vous devez accorder l'autorisation à une autre personne sur le compte de service :

  1. Dans la console Trusted Cloud , accédez à la page Comptes de service.

    Accéder à la page "Comptes de service"

  2. Saisissez le nom du compte de service personnalisé dans le filtre.

  3. Sélectionnez le compte de service dans la liste.

  4. Cliquez sur Comptes principaux ayant accès.

  5. Cliquez sur Accorder l'accès.

  6. Dans la section Ajouter des comptes principaux, saisissez le nom du compte auquel vous souhaitez accorder l'accès.

  7. Dans la liste déroulante Sélectionner un rôle, saisissez Service Account, puis sélectionnez le rôle Utilisateur du compte de service.

  8. Cliquez sur Enregistrer.

Propriétés des abonnements Cloud Storage

Lorsque vous configurez un abonnement Cloud Storage, vous devez spécifier les propriétés communes à tous les types d'abonnement et certaines propriétés supplémentaires spécifiques aux abonnements Cloud Storage.

Propriétés d'abonnement courantes

Découvrez les propriétés d'abonnement courantes que vous pouvez définir pour tous les abonnements.

Nom du bucket

Un bucket Cloud Storage doit déjà exister avant que vous ne créiez un abonnement Cloud Storage.

Les messages sont envoyés par lots et stockés dans le bucket Cloud Storage. Un seul lot ou fichier est stocké en tant qu'objet dans le bucket.

Le bucket Cloud Storage doit avoir l'option Paiements du demandeur désactivée.

Pour créer un bucket Cloud Storage, consultez Créer des buckets.

Préfixe, suffixe et date/heure du nom de fichier

Les fichiers Cloud Storage générés par l'abonnement Cloud Storage sont stockés en tant qu'objets dans le bucket Cloud Storage. Le nom de l'objet stocké dans le bucket Cloud Storage est au format suivant : <file-prefix><UTC-date-time>_<uuid><file-suffix>.

La liste suivante inclut des informations sur le format de fichier et les champs que vous pouvez personnaliser :

  • <file-prefix> est le préfixe de nom de fichier personnalisé. Ce champ est facultatif.

  • <UTC-date-time> est une chaîne générée automatiquement et personnalisable en fonction de l'heure de création de l'objet.

  • <uuid> est une chaîne aléatoire générée automatiquement pour l'objet.

  • <file-suffix> est le suffixe personnalisé du nom de fichier. Ce champ est facultatif. Le suffixe du nom de fichier ne peut pas se terminer par "/".

  • Vous pouvez modifier le préfixe et le suffixe du nom de fichier :

    • Par exemple, si la valeur du préfixe du nom de fichier est prod_ et que la valeur du suffixe du nom de fichier est _archive, un exemple de nom d'objet est prod_2023-09-25T04:10:00+00:00_uN1QuE_archive.

    • Si vous ne spécifiez pas le préfixe et le suffixe du nom de fichier, le nom de l'objet stocké dans le bucket Cloud Storage est au format suivant : <UTC-date-time>_<uuid>.

    • Les exigences de dénomination des objets Cloud Storage s'appliquent également au préfixe et au suffixe du nom de fichier. Pour en savoir plus, consultez À propos des objets Cloud Storage.

  • Vous pouvez modifier la façon dont la date et l'heure s'affichent dans le nom du fichier :

    • Les correspondances de date et heure obligatoires que vous ne pouvez utiliser qu'une seule fois : année (YYYY ou YY), mois (MM), jour (DD), heure (hh), minute (mm), seconde (ss). Par exemple, YY-YYYY ou MMM ne sont pas valides.

    • Des éléments de correspondance facultatifs que vous ne pouvez utiliser qu'une seule fois : le séparateur de date et d'heure (T) et le décalage de fuseau horaire (Z ou +00:00).

    • Éléments facultatifs que vous pouvez utiliser plusieurs fois : trait d'union (-), trait de soulignement (_), deux-points (:) et barre oblique (/).

    • Par exemple, si la valeur du format de date et heure du nom de fichier est YYYY-MM-DD/hh_mm_ssZ, un exemple de nom d'objet est prod_2023-09-25/04_10_00Z_uNiQuE_archive.

    • Si le format de date et d'heure du nom de fichier se termine par un caractère qui n'est pas un élément de correspondance, ce caractère remplacera le séparateur entre <UTC-date-time> et <uuid>. Par exemple, si la valeur du format de date et heure du nom de fichier est YYYY-MM-DDThh_mm_ss-, un exemple de nom d'objet est prod_2023-09-25T04_10_00-uNiQuE_archive.

Traitement des fichiers par lot

Les abonnements Cloud Storage vous permettent de décider quand vous souhaitez créer un fichier de sortie stocké en tant qu'objet dans le bucket Cloud Storage. Pub/Sub écrit un fichier de sortie lorsque l'une des conditions de traitement par lot spécifiées est remplie. Voici les conditions de traitement par lot de Cloud Storage :

  • Durée maximale des lots de stockage. Ce paramètre est obligatoire. L'abonnement Cloud Storage écrit un nouveau fichier de sortie si la valeur spécifiée de la durée maximale est dépassée. Si vous ne spécifiez pas de valeur, la valeur par défaut de cinq minutes est appliquée. Voici les valeurs applicables pour la durée maximale :

    • Valeur minimale : 1 minute
    • Valeur par défaut : 5 minutes
    • Valeur maximale : 10 minutes
  • Nombre maximal d'octets par lot pour le stockage. Il s'agit d'un paramètre facultatif. L'abonnement Cloud Storage écrit un nouveau fichier de sortie si la valeur maximale d'octets spécifiée est dépassée. Voici les valeurs applicables pour le nombre maximal d'octets :

    • Valeur minimale : 1 Ko
    • Valeur maximale : 10 Gio
  • Nombre maximal de messages par lot pour le stockage Il s'agit d'un paramètre facultatif. L'abonnement Cloud Storage écrit un nouveau fichier de sortie si le nombre maximal de messages spécifié est dépassé. Voici les valeurs applicables pour le nombre maximal de messages :

    • Valeur minimale = 1 000

Par exemple, vous pouvez configurer une durée maximale de 6 minutes et une taille maximale de 2 Go. Si, à la quatrième minute, le fichier de sortie atteint une taille de 2 Go, Pub/Sub finalise le fichier précédent et commence à écrire dans un nouveau fichier.

Un abonnement Cloud Storage peut écrire dans plusieurs fichiers d'un bucket Cloud Storage simultanément. Si vous avez configuré votre abonnement pour créer un fichier toutes les six minutes, vous pouvez observer la création de plusieurs fichiers Cloud Storage toutes les six minutes.

Dans certains cas, Pub/Sub peut commencer à écrire dans un nouveau fichier avant l'heure configurée par les conditions de regroupement des fichiers. Un fichier peut également dépasser la valeur "Nombre maximal d'octets" si l'abonnement reçoit des messages dont la taille est supérieure à cette valeur.

Format de fichier

Lorsque vous créez un abonnement Cloud Storage, vous pouvez spécifier le format des fichiers de sortie à stocker dans un bucket Cloud Storage (Texte ou Avro).

  • Texte : les messages sont stockés en texte brut. Un caractère de nouvelle ligne sépare un message du message précédent dans le fichier. Seules les charges utiles des messages sont stockées, et non les attributs ni les autres métadonnées.

  • Avro : les messages sont stockés au format binaire Apache Avro. Lorsque vous sélectionnez Avro, vous pouvez activer les propriétés supplémentaires suivantes :

    • Écrire les métadonnées : cette option vous permet de stocker les métadonnées du message avec le message. Les métadonnées telles que les champs subscription_name, message_id, publish_time et attributes sont écrites dans les champs de premier niveau de l'objet Avro de sortie, tandis que toutes les autres propriétés du message autres que les données (par exemple, une clé ordering_key, si elle est présente) sont ajoutées en tant qu'entrées dans le mappage attributes.

      Si l'option Écrire les métadonnées est désactivée, seule la charge utile du message est écrite dans l'objet Avro de sortie. Voici le schéma Avro pour les messages de sortie avec les métadonnées d'écriture désactivées :

      {
        "type": "record",
        "namespace": "com.google.pubsub",
        "name": "PubsubMessage",
        "fields": [
          { "name": "data", "type": "bytes" }
        ]
      }
      

      Voici le schéma Avro pour les messages de sortie avec les métadonnées d'écriture activées :

      {
        "type": "record",
        "namespace": "com.google.pubsub",
        "name": "PubsubMessageWithMetadata",
        "fields": [
          { "name": "subscription_name", "type": "string" },
          { "name": "message_id", "type": "string"  },
          { "name": "publish_time", "type": {
              "type": "long",
              "logicalType": "timestamp-micros"
            }
          },
          { "name": "attributes", "type": { "type": "map", "values": "string" } },
          { "name": "data", "type": "bytes" }
        ]
      }
      
    • Utiliser un schéma avec sujet : cette option permet à Pub/Sub d'utiliser le schéma du sujet Pub/Sub auquel l'abonnement est associé lors de l'écriture de fichiers Avro.

      Lorsque vous utilisez cette option, n'oubliez pas de vérifier les exigences supplémentaires suivantes :

      • Le schéma du sujet doit être au format Apache Avro.

      • Si les options Utiliser le schéma du sujet et Écrire des métadonnées sont activées, le schéma du sujet doit comporter un objet Record à sa racine. Pub/Sub développera la liste des champs de l'enregistrement pour inclure les champs de métadonnées. Par conséquent, l'enregistrement ne peut pas contenir de champs portant le même nom que les champs de métadonnées (subscription_name, message_id, publish_time ou attributes).

Compte de service

Vous disposez des options suivantes pour écrire des messages dans une table BigQuery ou un bucket Cloud Storage :

  • Configurez un compte de service personnalisé afin que seuls les utilisateurs disposant de l'autorisation iam.serviceAccounts.actAs sur le compte de service puissent créer un abonnement qui écrit dans la table ou le bucket. Le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) est un exemple de rôle qui inclut l'autorisation iam.serviceAccounts.actAs.

  • Utilisez l'agent de service Pub/Sub par défaut qui permet à tout utilisateur ayant la possibilité de créer des abonnements dans le projet de créer un abonnement qui écrit dans la table ou le bucket. L'agent de service Pub/Sub est le paramètre par défaut lorsque vous ne spécifiez pas de compte de service personnalisé.

Créer un abonnement Cloud Storage

Console

  1. Dans la console Trusted Cloud , accédez à la page Abonnements.

    Accéder aux abonnements

  2. Cliquez sur Créer un abonnement.

  3. Dans le champ ID d'abonnement, saisissez un nom.

    Pour savoir comment nommer un abonnement, consultez Consignes de dénomination d'un sujet ou d'un abonnement.

  4. Choisissez ou créez un sujet dans le menu déroulant.

    L'abonnement reçoit les messages du sujet.

    Pour savoir comment créer un sujet, consultez Créer et gérer des sujets.

  5. Sélectionnez Type de diffusion et définissez-le sur Écrire dans Cloud Storage.

  6. Pour le bucket Cloud Storage, cliquez sur Parcourir.

    • Vous pouvez sélectionner un bucket existant dans n'importe quel projet approprié.

    • Vous pouvez également cliquer sur l'icône Créer et suivre les instructions à l'écran pour créer un bucket.

      Une fois le bucket créé, sélectionnez-le pour l'abonnement Cloud Storage.

      Pour savoir comment créer un bucket, consultez Créer des buckets.

    Lorsque vous spécifiez le bucket, Pub/Sub vérifie que l'agent de service Pub/Sub dispose des autorisations appropriées sur le bucket. En cas de problème d'autorisations, un message semblable à celui-ci s'affiche : Unable to verify if the Pub/Sub service agent has write permissions on this bucket. You may be lacking permissions to view or set permissions.

  7. Si vous rencontrez des problèmes d'autorisation, cliquez sur Définir l'autorisation et suivez les instructions à l'écran.

    Vous pouvez également suivre les instructions de la section Attribuer des rôles Cloud Storage à l'agent de service Pub/Sub.

  8. Pour le paramètre Format de fichier, sélectionnez Texte ou Avro.

    Si vous sélectionnez Avro, vous pouvez également indiquer si vous souhaitez stocker les métadonnées du message dans le résultat.

    Pour en savoir plus sur les deux options, y compris l'option de métadonnées de message pour le format Avro, consultez Format de fichier.

  9. Facultatif : Vous pouvez spécifier le préfixe, le suffixe et la date/heure du nom de fichier pour tous les fichiers à écrire dans le bucket Cloud Storage. Un fichier est stocké en tant qu'objet dans le bucket.

    Pour savoir comment définir le préfixe, le suffixe et la date/heure du nom de fichier, consultez Préfixe, suffixe et date/heure du nom de fichier.

  10. Pour le regroupement de fichiers, spécifiez un délai maximal avant la création d'un fichier.

    Vous pouvez également définir la taille maximale des fichiers ou le nombre maximal de messages pour les fichiers.

    Pour en savoir plus sur les deux options de traitement par lot des fichiers, consultez Traitement par lot des fichiers.

  11. Nous vous recommandons vivement d'activer la file d'attente de lettres mortes pour gérer les échecs de messages.

    Pour en savoir plus, consultez Sujet de lettres mortes.

  12. Vous pouvez conserver les autres paramètres par défaut, puis cliquer sur Créer.

gcloud

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

    Activate Cloud Shell

    At the bottom of the Trusted 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 abonnement Cloud Storage, exécutez la commande gcloud pubsub subscriptions create.
    gcloud pubsub subscriptions create SUBSCRIPTION_ID \
        --topic=TOPIC_ID \
        --cloud-storage-bucket=BUCKET_NAME \
        --cloud-storage-file-prefix=CLOUD_STORAGE_FILE_PREFIX \
        --cloud-storage-file-suffix=CLOUD_STORAGE_FILE_SUFFIX \
        --cloud-storage-file-datetime-format=CLOUD_STORAGE_FILE_DATETIME_FORMAT \
        --cloud-storage-max-duration=CLOUD_STORAGE_MAX_DURATION \
        --cloud-storage-max-bytes=CLOUD_STORAGE_MAX_BYTES \
        --cloud-storage-max-messages=CLOUD_STORAGE_MAX_MESSAGES \
        --cloud-storage-output-format=CLOUD_STORAGE_OUTPUT_FORMAT \
        --cloud-storage-write-metadata
        --cloud-storage-use-topic-schema

    Si vous souhaitez utiliser un compte de service personnalisé, fournissez-le en tant qu'argument supplémentaire :

    gcloud pubsub subscriptions create SUBSCRIPTION_ID \
        --topic=TOPIC_ID \
        --cloud-storage-bucket=BUCKET_NAME \
        --cloud-storage-file-prefix=CLOUD_STORAGE_FILE_PREFIX \
        --cloud-storage-file-suffix=CLOUD_STORAGE_FILE_SUFFIX \
        --cloud-storage-file-datetime-format=CLOUD_STORAGE_FILE_DATETIME_FORMAT \
        --cloud-storage-max-duration=CLOUD_STORAGE_MAX_DURATION \
        --cloud-storage-max-bytes=CLOUD_STORAGE_MAX_BYTES \
        --cloud-storage-max-messages=CLOUD_STORAGE_MAX_MESSAGES \
        --cloud-storage-output-format=CLOUD_STORAGE_OUTPUT_FORMAT \
        --cloud-storage-write-metadata
        --cloud-storage-use-topic-schema
        --cloud-storage-service-account-email=SERVICE_ACCOUNT_NAME
        

    Dans la commande, seuls SUBSCRIPTION_ID, l'option --topic et l'option --cloud-storage-bucket sont obligatoires. Les options restantes sont facultatives et peuvent être omises.

    Remplacez les éléments suivants :

    • SUBSCRIPTION_ID : nom ou ID de votre nouvel abonnement Cloud Storage.
    • TOPIC_ID : nom ou ID de votre sujet.
    • BUCKET_NAME : spécifie le nom d'un bucket existant. Exemple :prod_bucket Le nom du bucket ne doit pas inclure l'ID du projet. Pour créer un bucket, consultez Créer des buckets.
    • CLOUD_STORAGE_FILE_PREFIX : spécifie le préfixe du nom de fichier Cloud Storage. Par exemple, log_events_.
    • CLOUD_STORAGE_FILE_SUFFIX : spécifie le suffixe du nom de fichier Cloud Storage. Par exemple, .txt.
    • CLOUD_STORAGE_FILE_DATETIME_FORMAT : Spécifie le format de date et d'heure pour le nom de fichier Cloud Storage. Exemple :YYYY-MM-DD/hh_mm_ssZ
    • CLOUD_STORAGE_MAX_DURATION : durée maximale pouvant s'écouler avant la création d'un fichier Cloud Storage. La valeur doit être comprise entre 1 m et 10 m. Par exemple, 5m.
    • CLOUD_STORAGE_MAX_BYTES : nombre maximal d'octets pouvant être écrits dans un fichier Cloud Storage avant la création d'un nouveau fichier. La valeur doit être comprise entre 1 ko et 10 Go. Par exemple, 20MB.
    • CLOUD_STORAGE_MAX_MESSAGES : nombre maximal de messages pouvant être écrits dans un fichier Cloud Storage avant la création d'un nouveau fichier. La valeur doit être supérieure ou égale à 1 000. Exemple :100000
    • CLOUD_STORAGE_OUTPUT_FORMAT : format de sortie des données écrites dans Cloud Storage. Les valeurs sont les suivantes :
      • text : les messages sont écrits sous forme de texte brut, séparés par un retour à la ligne.
      • avro : les messages sont écrits au format binaire Avro. --cloud-storage-write-metadata et --cloud-storage-use-topic-schema n'affectent que les abonnements avec le format de sortie avro.
    • SERVICE_ACCOUNT_NAME : spécifie le nom du compte de service à utiliser pour écrire dans Cloud Storage.
  3. C++

    Avant d'essayer cet exemple, suivez les instructions de configuration pour C++ 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 pour C++.

    Pour vous authentifier auprès de Pub/Sub, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

    Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

    namespace pubsub = ::google::cloud::pubsub;
    namespace pubsub_admin = ::google::cloud::pubsub_admin;
    [](pubsub_admin::SubscriptionAdminClient client,
       std::string const& project_id, std::string const& topic_id,
       std::string const& subscription_id, std::string const& bucket) {
      google::pubsub::v1::Subscription request;
      request.set_name(
          pubsub::Subscription(project_id, subscription_id).FullName());
      request.set_topic(pubsub::Topic(project_id, topic_id).FullName());
      request.mutable_cloud_storage_config()->set_bucket(bucket);
      auto sub = client.CreateSubscription(request);
      if (!sub) {
        if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
          std::cout << "The subscription already exists\n";
          return;
        }
        throw std::move(sub).status();
      }
    
      std::cout << "The subscription was successfully created: "
                << sub->DebugString() << "\n";
    }

    C#

    Avant d'essayer cet exemple, suivez les instructions de configuration pour C# 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 pour C#.

    Pour vous authentifier auprès de Pub/Sub, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

    Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

    
    using Google.Cloud.PubSub.V1;
    using Google.Protobuf.WellKnownTypes;
    using System;
    
    public class CreateCloudStorageSubscriptionSample
    {
        public Subscription CreateCloudStorageSubscription(string projectId, string topicId, string subscriptionId,
            string bucket, string filenamePrefix, string filenameSuffix, TimeSpan maxDuration)
        {
            SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
            TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
            SubscriptionName subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);
    
            var subscriptionRequest = new Subscription
            {
                SubscriptionName = subscriptionName,
                TopicAsTopicName = topicName,
                CloudStorageConfig = new CloudStorageConfig
                {
                    Bucket = bucket,
                    FilenamePrefix = filenamePrefix,
                    FilenameSuffix = filenameSuffix,
                    MaxDuration = Duration.FromTimeSpan(maxDuration)
                }
            };
            var subscription = subscriber.CreateSubscription(subscriptionRequest);
            return subscription;
        }
    }

    Go

    Avant d'essayer cet exemple, suivez les instructions de configuration pour Go 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 pour Go.

    Pour vous authentifier auprès de Pub/Sub, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

    Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

    import (
    	"context"
    	"fmt"
    	"io"
    	"time"
    
    	"cloud.google.com/go/pubsub/v2"
    	"cloud.google.com/go/pubsub/v2/apiv1/pubsubpb"
    	"google.golang.org/protobuf/types/known/durationpb"
    )
    
    // createCloudStorageSubscription creates a Pub/Sub subscription that exports messages to Cloud Storage.
    func createCloudStorageSubscription(w io.Writer, projectID, topic, subscription, bucket string) error {
    	// projectID := "my-project-id"
    	// topic := "projects/my-project-id/topics/my-topic"
    	// subscription := "projects/my-project/subscriptions/my-sub"
    	// bucket := "my-bucket" // bucket must not have the gs:// prefix
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	sub, err := client.SubscriptionAdminClient.CreateSubscription(ctx, &pubsubpb.Subscription{
    		Name:  subscription,
    		Topic: topic,
    		CloudStorageConfig: &pubsubpb.CloudStorageConfig{
    			Bucket:         bucket,
    			FilenamePrefix: "log_events_",
    			FilenameSuffix: ".avro",
    			OutputFormat: &pubsubpb.CloudStorageConfig_AvroConfig_{
    				AvroConfig: &pubsubpb.CloudStorageConfig_AvroConfig{
    					WriteMetadata: true,
    				},
    			},
    			MaxDuration: durationpb.New(1 * time.Minute),
    			MaxBytes:    1e8,
    		},
    	})
    	if err != nil {
    		return fmt.Errorf("failed to create cloud storage sub: %w", err)
    	}
    	fmt.Fprintf(w, "Created Cloud Storage subscription: %v\n", sub)
    
    	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 la documentation de référence sur l'API Pub/Sub pour Java.

    Pour vous authentifier auprès de Pub/Sub, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

    Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

    import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
    import com.google.protobuf.Duration;
    import com.google.pubsub.v1.CloudStorageConfig;
    import com.google.pubsub.v1.ProjectSubscriptionName;
    import com.google.pubsub.v1.ProjectTopicName;
    import com.google.pubsub.v1.Subscription;
    import java.io.IOException;
    
    public class CreateCloudStorageSubscriptionExample {
      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";
        String subscriptionId = "your-subscription-id";
        String bucket = "your-bucket";
        String filenamePrefix = "log_events_";
        String filenameSuffix = ".text";
        Duration maxDuration = Duration.newBuilder().setSeconds(300).build();
    
        createCloudStorageSubscription(
            projectId, topicId, subscriptionId, bucket, filenamePrefix, filenameSuffix, maxDuration);
      }
    
      public static void createCloudStorageSubscription(
          String projectId,
          String topicId,
          String subscriptionId,
          String bucket,
          String filenamePrefix,
          String filenameSuffix,
          Duration maxDuration)
          throws IOException {
        try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
    
          ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
          ProjectSubscriptionName subscriptionName =
              ProjectSubscriptionName.of(projectId, subscriptionId);
    
          CloudStorageConfig cloudStorageConfig =
              CloudStorageConfig.newBuilder()
                  .setBucket(bucket)
                  .setFilenamePrefix(filenamePrefix)
                  .setFilenameSuffix(filenameSuffix)
                  .setMaxDuration(maxDuration)
                  .build();
    
          Subscription subscription =
              subscriptionAdminClient.createSubscription(
                  Subscription.newBuilder()
                      .setName(subscriptionName.toString())
                      .setTopic(topicName.toString())
                      .setCloudStorageConfig(cloudStorageConfig)
                      .build());
    
          System.out.println("Created a CloudStorage subscription: " + subscription.getAllFields());
        }
      }
    }

    Node.js

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicName = 'YOUR_TOPIC_NAME';
    // const subscriptionName = 'YOUR_SUBSCRIPTION_NAME';
    // const bucket = 'YOUR_BUCKET_ID';
    // const filenamePrefix = 'YOUR_FILENAME_PREFIX';
    // const filenameSuffix = 'YOUR_FILENAME_SUFFIX';
    // const maxDuration = 60;
    
    // 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 createCloudStorageSubscription(
      topicName,
      subscriptionName,
      bucket,
      filenamePrefix,
      filenameSuffix,
      maxDuration,
    ) {
      const options = {
        cloudStorageConfig: {
          bucket,
          filenamePrefix,
          filenameSuffix,
          maxDuration: {
            seconds: maxDuration,
          },
        },
      };
    
      await pubSubClient
        .topic(topicName)
        .createSubscription(subscriptionName, options);
    
      console.log(
        `Created subscription ${subscriptionName} with a cloud storage configuration.`,
      );
    }

    Node.js

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicName = 'YOUR_TOPIC_NAME';
    // const subscriptionName = 'YOUR_SUBSCRIPTION_NAME';
    // const bucket = 'YOUR_BUCKET_ID';
    // const filenamePrefix = 'YOUR_FILENAME_PREFIX';
    // const filenameSuffix = 'YOUR_FILENAME_SUFFIX';
    // const maxDuration = 60;
    
    // Imports the Google Cloud client library
    import {CreateSubscriptionOptions, PubSub} from '@google-cloud/pubsub';
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createCloudStorageSubscription(
      topicName: string,
      subscriptionName: string,
      bucket: string,
      filenamePrefix: string,
      filenameSuffix: string,
      maxDuration: number,
    ) {
      const options: CreateSubscriptionOptions = {
        cloudStorageConfig: {
          bucket,
          filenamePrefix,
          filenameSuffix,
          maxDuration: {
            seconds: maxDuration,
          },
        },
      };
    
      await pubSubClient
        .topic(topicName)
        .createSubscription(subscriptionName, options);
    
      console.log(
        `Created subscription ${subscriptionName} with a cloud storage configuration.`,
      );
    }

    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 pour PHP.

    Pour vous authentifier auprès de Pub/Sub, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

    Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

    use Google\Cloud\PubSub\PubSubClient;
    
    /**
     * Creates a Pub/Sub GCS subscription.
     *
     * @param string $projectId  The Google project ID.
     * @param string $topicName  The Pub/Sub topic name.
     * @param string $subscriptionName  The Pub/Sub subscription name.
     * @param string $bucket The Cloud Storage bucket name without any prefix like "gs://".
     */
    function create_cloud_storage_subscription($projectId, $topicName, $subscriptionName, $bucket)
    {
        $pubsub = new PubSubClient([
            'projectId' => $projectId,
        ]);
        $topic = $pubsub->topic($topicName);
        $subscription = $topic->subscription($subscriptionName);
        $config = ['bucket' => $bucket];
        $subscription->create([
            'cloudStorageConfig' => $config
        ]);
    
        printf('Subscription created: %s' . PHP_EOL, $subscription->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 la documentation de référence sur l'API Pub/Sub pour Python.

    Pour vous authentifier auprès de Pub/Sub, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

    Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

    from google.cloud import pubsub_v1
    from google.protobuf import duration_pb2
    
    # TODO(developer)
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    # subscription_id = "your-subscription-id"
    # bucket = "my-bucket"
    
    filename_prefix = "log_events_"
    filename_suffix = ".avro"
    # Either CloudStorageConfig.AvroConfig or CloudStorageConfig.TextConfig
    # defaults to TextConfig
    avro_config = pubsub_v1.types.CloudStorageConfig.AvroConfig(write_metadata=True)
    
    publisher = pubsub_v1.PublisherClient()
    subscriber = pubsub_v1.SubscriberClient()
    topic_path = publisher.topic_path(project_id, topic_id)
    subscription_path = subscriber.subscription_path(project_id, subscription_id)
    max_duration = duration_pb2.Duration()
    max_duration.FromSeconds(300)
    
    cloudstorage_config = pubsub_v1.types.CloudStorageConfig(
        bucket=bucket,
        filename_prefix=filename_prefix,
        filename_suffix=filename_suffix,
        avro_config=avro_config,
        # Min 1 minutes, max 10 minutes
        max_duration=max_duration,
        # Min 1 KB, max 10 GiB
        max_bytes=10000000,
    )
    
    # Wrap the subscriber in a 'with' block to automatically call close() to
    # close the underlying gRPC channel when done.
    with subscriber:
        subscription = subscriber.create_subscription(
            request={
                "name": subscription_path,
                "topic": topic_path,
                "cloud_storage_config": cloudstorage_config,
            }
        )
    
    print(f"CloudStorage subscription created: {subscription}.")
    print(f"Bucket for subscription is: {bucket}")
    print(f"Prefix is: {filename_prefix}")
    print(f"Suffix is: {filename_suffix}")

Surveiller un abonnement Cloud Storage

Cloud Monitoring fournit un certain nombre de métriques pour surveiller les abonnements.

Pour obtenir la liste de toutes les métriques disponibles liées à Pub/Sub et leurs descriptions, consultez la documentation sur la surveillance de Pub/Sub.

Vous pouvez également surveiller les abonnements dans Pub/Sub.

Étapes suivantes