Crea suscripciones a Cloud Storage

En este documento, se describe cómo crear una suscripción a Cloud Storage. Puedes usar la consola de Google Cloud, Google Cloud CLI, la biblioteca cliente o la API de Pub/Sub para crear una suscripción a Cloud Storage.

Antes de comenzar

Antes de leer este documento, asegúrate de estar familiarizado con la siguiente información:

Roles y permisos requeridos

La siguiente es una lista de lineamientos relacionados con los roles y los permisos:

  • Para crear una suscripción, debes configurar el control de acceso a nivel de proyecto.

  • También necesitas permisos a nivel de recurso si tus suscripciones y temas se encuentran en proyectos diferentes, como se explica más adelante en esta sección.

  • Para crear una suscripción a Cloud Storage, la cuenta de servicio de Pub/Sub debe tener permiso para escribir en el bucket específico de Cloud Storage y leer los metadatos del bucket. Si quieres obtener más información para otorgar estos permisos, consulta la siguiente sección de este documento.

Para obtener los permisos que necesitas para crear suscripciones a Cloud Storage, pídele a tu administrador que te otorgue el rol de IAM Editor de Pub/Sub (roles/pubsub.editor) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Este rol predefinido contiene los permisos necesarios para crear suscripciones a Cloud Storage. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear suscripciones a Cloud Storage:

  • Crea una suscripción: pubsub.subscriptions.create
  • Adjunta una suscripción a un tema: pubsub.topics.attachSubscription
  • Extraer de una suscripción: pubsub.subscriptions.consume
  • Obtener una suscripción: pubsub.subscriptions.get
  • Muestra una suscripción: pubsub.subscriptions.list
  • Actualiza una suscripción: pubsub.subscriptions.update
  • Borrar una suscripción: pubsub.subscriptions.delete
  • Obtén la política de IAM para una suscripción: pubsub.subscriptions.getIamPolicy
  • Configura la política de IAM para una suscripción: pubsub.subscriptions.setIamPolicy

También puedes obtener estos permisos con roles personalizados o, también, otros roles predefinidos.

Si necesitas crear suscripciones de Cloud Storage en un proyecto que estén asociados con un tema en otro proyecto, pídele al administrador de temas que también te otorgue la función de IAM (roles/pubsub.editor) del editor de Pub/Sub en el tema.

Asigna roles de Cloud Storage a la cuenta de servicio de Pub/Sub

Algunos servicios de Google Cloud tienen cuentas de servicio administradas por Google Cloud que permiten que accedan a tus recursos. Estas cuentas de servicio se conocen como agentes de servicio. Pub/Sub crea y mantiene una cuenta de servicio para cada proyecto en el formato service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com.

Para crear una suscripción a Cloud Storage, la cuenta de servicio de Pub/Sub debe tener permiso para escribir en el bucket específico de Cloud Storage y leer los metadatos del bucket. Elige uno de los siguientes procedimientos:

  • Otorga permisos a nivel de bucket. En el bucket de Cloud Storage específico, otorga el rol de Creador de objetos de almacenamiento (roles/storage.objectCreator) y el de Lector de buckets heredados de almacenamiento (roles/storage.legacyBucketReader) a la cuenta de servicio de Pub/Sub.

  • Si debes otorgar funciones a nivel de proyecto, puedes otorgar la función de administrador de almacenamiento (roles/storage.admin) en el proyecto que contiene el bucket de Cloud Storage. Otórgale esta función a la cuenta de servicio de Pub/Sub.

Permisos de buckets

Realiza los siguientes pasos para otorgar las funciones de Creador de objetos de almacenamiento (roles/storage.objectCreator) y Lector de buckets heredados de almacenamiento (roles/storage.legacyBucketReader) a nivel de bucket:

  1. En la consola de Google Cloud, ve a la página de Cloud Storage.

    Ir a Cloud Storage

  2. Haz clic en el bucket de Cloud Storage en el que quieres escribir los mensajes.

    Se abrirá la página Detalles del bucket.

  3. En la página Detalles del bucket, haz clic en la pestaña Permisos.

  4. En la pestaña Permisos > Ver por principales, haz clic en Otorgar acceso.

    Se abrirá la página Otorgar acceso.

  5. En la sección Agregar principales, ingresa el nombre de tu cuenta de servicio de Pub/Sub.

    El formato de la cuenta de servicio es service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com. Por ejemplo, para un proyecto con PROJECT_NUMBER=112233445566, la cuenta de servicio tiene el formato service-112233445566@gcp-sa-pubsub.iam.gserviceaccount.com.

  6. En el menú desplegable Asignar roles > Seleccionar un rol, ingresa Creator y selecciona la función Creador de objetos de almacenamiento.

  7. Haz clic en Agregar otro rol.

  8. En el menú desplegable Seleccionar una función, ingresa Bucket Reader y selecciona la función Lector de buckets heredados de almacenamiento.

  9. Haz clic en Guardar.

Permisos del proyecto

Sigue estos pasos para otorgar la función de administrador de almacenamiento (roles/storage.admin) a nivel de proyecto:

  1. En la consola de Google Cloud, ve a la página IAM.

    Ir a IAM

  2. En la pestaña Permisos > Ver por principales, haz clic en Otorgar acceso.

    Se abrirá la página Otorgar acceso.

  3. En la sección Agregar principales, ingresa el nombre de tu cuenta de servicio de Pub/Sub.

    El formato de la cuenta de servicio es service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com. Por ejemplo, para un proyecto con PROJECT_NUMBER=112233445566, la cuenta de servicio tiene el formato service-112233445566@gcp-sa-pubsub.iam.gserviceaccount.com.

  4. En el menú desplegable Asignar roles > Seleccionar un rol, ingresa Storage Admin y selecciona la función Administrador de almacenamiento.

  5. Haz clic en Guardar.

Para obtener más información sobre IAM de Cloud Storage, consulta Identity and Access Management de Cloud Storage.

Propiedades de suscripción de Cloud Storage

Cuando configuras una suscripción a Cloud Storage, debes especificar las propiedades comunes a todos los tipos de suscripción y algunas propiedades adicionales específicas de la suscripción a Cloud Storage.

Propiedades de suscripción comunes

Obtén información sobre las propiedades de suscripción comunes que puedes configurar en todas las suscripciones.

Nombre del bucket

Ya debe existir un bucket de Cloud Storage antes de crear una suscripción a Cloud Storage.

Los mensajes se envían como lotes y se almacenan en el bucket de Cloud Storage. Un solo lote o archivo se almacena como un objeto en el bucket.

El bucket de Cloud Storage debe tener inhabilitados los pagos del solicitante.

Para crear un bucket de Cloud Storage, consulta Crea buckets.

Prefijo, sufijo y fecha y hora del nombre de archivo

Los archivos de salida de Cloud Storage que genera la suscripción a Cloud Storage se almacenan como objetos en el bucket de Cloud Storage. El nombre del objeto almacenado en el bucket de Cloud Storage tiene el siguiente formato: <file-prefix><UTC-date-time>_<uuid><file-suffix>.

En la siguiente lista, se incluyen detalles del formato de archivo y los campos que puedes personalizar:

  • <file-prefix> es el prefijo del nombre de archivo personalizado. Este paso es opcional,

  • <UTC-date-time> es una cadena personalizable generada automáticamente en función de la hora en que se crea el objeto.

  • <uuid> es una cadena aleatoria generada automáticamente para el objeto.

  • <file-suffix> es el sufijo del nombre de archivo personalizado. Este paso es opcional, El sufijo del nombre de archivo no puede terminar en “/”.

  • Puedes cambiar el prefijo y el sufijo del nombre de archivo:

    • Por ejemplo, si el valor del prefijo del nombre de archivo es prod_ y el valor del sufijo del nombre de archivo es _archive, el nombre de un objeto de muestra es prod_2023-09-25T04:10:00+00:00_uN1QuE_archive.

    • Si no especificas el prefijo y el sufijo del nombre de archivo, el nombre del objeto almacenado en el bucket de Cloud Storage tendrá el siguiente formato: <UTC-date-time>_<uuid>.

    • Los requisitos para nombrar objetos de Cloud Storage también se aplican al prefijo y sufijo del nombre de archivo. Para obtener más información, consulta Acerca de los objetos de Cloud Storage.

  • Puedes cambiar la forma en que se muestran la fecha y la hora en el nombre del archivo:

    • Comparadores de fecha y hora obligatorios que puedes usar solo una vez: año (YYYY o YY), mes (MM), día (DD), hora (hh), minuto (mm) y segundo (ss). Por ejemplo, YY-YYYY o MMM no son válidos.

    • Comparadores opcionales que puedes usar solo una vez: separador de fecha y hora (T) y desplazamiento de zona horaria (Z o +00:00).

    • Elementos opcionales que puedes usar varias veces: guion (-), guion bajo (_), dos puntos (:) y barra diagonal (/).

    • Por ejemplo, si el valor del formato de fecha y hora del nombre de archivo es YYYY-MM-DD/hh_mm_ssZ, un nombre de objeto de muestra es prod_2023-09-25/04_10_00Z_uNiQuE_archive.

    • Si el formato de fecha y hora del nombre de archivo termina en un carácter que no es un comparador, ese carácter reemplazará el separador entre <UTC-date-time> y <uuid>. Por ejemplo, si el valor del formato de fecha y hora del nombre de archivo es YYYY-MM-DDThh_mm_ss-, un nombre de objeto de muestra es prod_2023-09-25T04_10_00-uNiQuE_archive.

Agrupación en lotes de archivos

Las suscripciones a Cloud Storage te permiten decidir cuándo crear un nuevo archivo de salida que se almacena como un objeto en el bucket de Cloud Storage. Pub/Sub escribe un archivo de salida cuando se cumple una de las condiciones de lotes especificadas. Las siguientes son las condiciones de lotes de Cloud Storage:

  • Duración máxima del lote de almacenamiento. Este es un parámetro de configuración obligatorio. La suscripción a Cloud Storage escribe un nuevo archivo de salida si se excede el valor especificado de duración máxima. Si no especificas el valor, se aplicará un valor predeterminado de 5 minutos. Los siguientes son los valores aplicables para la duración máxima:

    • Valor mínimo: 1 minuto
    • Valor predeterminado = 5 minutos
    • Valor máximo = 10 minutos
  • Cantidad máxima de bytes de almacenamiento. Este es un parámetro de configuración opcional. La suscripción a Cloud Storage escribe un nuevo archivo de salida si se excede el valor especificado de la cantidad máxima de bytes. Los siguientes son los valores aplicables para el máximo de bytes:

    • Valor mínimo = 1 KB
    • Valor máximo = 10 GiB

Por ejemplo, puedes configurar la duración máxima en 6 minutos y los bytes como 2 GB. Si al 4o minuto el archivo de salida alcanza un tamaño de 2 GB, Pub/Sub finaliza el archivo anterior y comienza a escribir en un archivo nuevo.

Una suscripción a Cloud Storage puede escribir en varios archivos de un bucket de Cloud Storage de manera simultánea. Si configuraste tu suscripción para crear un archivo nuevo cada 6 minutos, es posible que observes la creación de varios archivos de Cloud Storage cada 6 minutos.

En algunas situaciones, Pub/Sub podría comenzar a escribir en un archivo nuevo antes de la hora configurada por las condiciones de lotes. Un archivo también puede exceder el valor de bytes máximos si la suscripción recibe mensajes que superen ese valor.

Formato de archivo

Cuando creas una suscripción a Cloud Storage, puedes especificar el formato de los archivos de salida que se almacenarán en un bucket de Cloud Storage como Text o Avro.

  • Texto: Los mensajes se almacenan como texto sin formato. Un carácter de salto de línea separa un mensaje del mensaje anterior en el archivo. Solo se almacenan las cargas útiles de mensajes, no los atributos ni otros metadatos.

  • Avro: Los mensajes se almacenan en formato binario de Apache Avro. Cuando seleccionas Avro, puedes habilitar las siguientes propiedades adicionales:

    • Escribir metadatos: Esta opción te permite almacenar los metadatos del mensaje junto con el mensaje. Los metadatos como los campos subscription_name, message_id, publish_time y attributes se escriben en campos de nivel superior en el objeto Avro de salida, mientras que todas las demás propiedades de mensaje que no son datos (por ejemplo, order_key, si está presente) se agregan como entradas en el mapa attributes.

      Si la escritura de metadatos está inhabilitada, solo la carga útil del mensaje se escribe en el objeto Avro de salida. Este es el esquema de Avro para los mensajes de salida con la opción write metadata inhabilitada:

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

      Este es el esquema de Avro para los mensajes de salida con los metadatos de escritura habilitados:

      {
        "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" }
        ]
      }
      
    • Usar el esquema de tema: Esta opción permite que Pub/Sub use el esquema del tema de Pub/Sub al que se adjunta la suscripción cuando escribe archivos Avro.

      Cuando uses esta opción, recuerda verificar los siguientes requisitos adicionales:

      • El esquema del tema debe estar en formato Apache Avro.

      • Si usar esquema de tema y escribir metadatos están habilitados, el esquema de tema debe tener un objeto Record en la raíz. Pub/Sub expandirá la lista de campos del registro para incluir los campos de metadatos. Como resultado, el registro no puede contener ningún campo con el mismo nombre que los campos de metadatos (subscription_name, message_id, publish_time o attributes).

Crea una suscripción a Cloud Storage

Console

  1. En la consola de Google Cloud, ve a la página Suscripciones.

    Ir a Suscripciones

  2. Haz clic en Crear suscripción.

  3. En el campo ID de la suscripción, ingresa un nombre.

    Si quieres obtener información para asignar un nombre a una suscripción, consulta Lineamientos para asignar un nombre a un tema o una suscripción.

  4. Elige o crea un tema desde el menú desplegable.

    La suscripción recibe mensajes del tema.

    Para obtener información sobre cómo crear un tema, consulta Cómo crear y administrar temas.

  5. Selecciona Tipo de entrega como Escribir en Cloud Storage.

  6. En el bucket de Cloud Storage, haz clic en Explorar.

    • Puedes seleccionar un bucket existente de cualquier proyecto que corresponda.

    • También puedes hacer clic en el ícono de crear y seguir las instrucciones que aparecen en la pantalla para crear un bucket nuevo.

      Después de crear el bucket, selecciónalo para la suscripción a Cloud Storage.

      Para obtener más información sobre cómo crear un bucket, consulta Crea buckets.

    Cuando especificas el bucket, Pub/Sub verifica los permisos adecuados en el bucket para la cuenta de servicio de Pub/Sub. Si hay problemas de permisos, verás un mensaje similar al siguiente: 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 tienes problemas con los permisos, haz clic en Set Permission y sigue las instrucciones en pantalla.

    Como alternativa, sigue las instrucciones en Asigna roles de Cloud Storage a la cuenta de servicio de Pub/Sub.

  8. En File format (Formato de archivo), selecciona Text o Avro.

    Si seleccionas Avro, también puedes especificar de manera opcional si quieres almacenar los metadatos del mensaje en el resultado.

    Si deseas obtener más información sobre las dos opciones, incluida la opción de metadatos del mensaje para el formato Avro, consulta Formato de archivo.

  9. Opcional: Puedes especificar el prefijo y sufijo del nombre de archivo para todos los archivos que se escribirán en el bucket de Cloud Storage. Un archivo se almacena como un objeto en el bucket.

    Para obtener más información sobre cómo configurar el prefijo y el sufijo del archivo, consulta Prefijo y sufijo del archivo.

  10. En Agrupación en lotes de archivos, especifica un tiempo máximo que transcurra antes de crear un archivo nuevo.

    De manera opcional, también puedes establecer el tamaño máximo de los archivos.

    Para obtener más información sobre ambas opciones de agrupación de archivos en lotes, consulta Agrupación en lotes de archivos.

  11. Te recomendamos que habilites los mensajes no entregados para manejar las fallas de los mensajes.

    Para obtener más información, consulta el Tema de mensajes no entregados.

  12. Puedes mantener el resto de la configuración con sus valores predeterminados y hacer clic en Crear.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Para crear una suscripción a Cloud Storage, ejecuta el comando 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-max-bytes=CLOUD_STORAGE_MAX_BYTES \
        --cloud-storage-max-duration=CLOUD_STORAGE_MAX_DURATION \
        --cloud-storage-output-format=CLOUD_STORAGE_OUTPUT_FORMAT \
        --cloud-storage-write-metadata

    En el comando, solo se requieren SUBSCRIPTION_ID, las marcas --topic y --cloud-storage-bucket. Las marcas restantes son opcionales y se pueden omitir.

    Reemplaza lo siguiente:

    • SUBSCRIPTION_ID: Es el nombre o el ID de tu nueva suscripción a Cloud Storage.
    • TOPIC_ID: Es el nombre o el ID de tu tema.
    • BUCKET_NAME: Especifica el nombre de un bucket existente. Por ejemplo, prod_bucket El nombre del bucket no debe incluir el ID del proyecto. Para crear un bucket, consulta Crea buckets.
    • CLOUD_STORAGE_FILE_PREFIX: Especifica el prefijo para el nombre de archivo de Cloud Storage. Por ejemplo: log_events_.
    • CLOUD_STORAGE_FILE_SUFFIX: Especifica el sufijo para el nombre de archivo de Cloud Storage. Por ejemplo: .txt.
    • CLOUD_STORAGE_MAX_BYTES: La cantidad máxima de bytes que se pueden escribir en un archivo de Cloud Storage antes de crear un archivo nuevo. El valor debe ser de entre 1 KB y 10 GB. Por ejemplo: 20MB.
    • CLOUD_STORAGE_MAX_DURATION: Es la duración máxima que puede transcurrir antes de que se cree un archivo nuevo de Cloud Storage. El valor debe estar entre 1 m y 10 m. Por ejemplo: 5m.
    • CLOUD_STORAGE_OUTPUT_FORMAT: Es el formato de salida de los datos escritos en Cloud Storage. Los valores son los siguientes:
      • text: Los mensajes se escriben como texto sin procesar, separados por una línea nueva.
      • avro: Los mensajes se escriben como un objeto binario de Avro. --cloud-storage-write-metadata solo tiene efecto en suscripciones con formato de salida avro.

C++

Antes de probar esta muestra, sigue las instrucciones de configuración de C++ en la guía de inicio rápido de Pub/Sub sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C++.

Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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";
}

Go

Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido de Pub/Sub sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.

Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/pubsub"
)

// createCloudStorageSubscription creates a Pub/Sub subscription that exports messages to Cloud Storage.
func createCloudStorageSubscription(w io.Writer, projectID, subID string, topic *pubsub.Topic, bucket string) error {
	// projectID := "my-project-id"
	// subID := "my-sub"
	// topic of type https://godoc.org/cloud.google.com/go/pubsub#Topic
	// note bucket should not have the gs:// prefix
	// bucket := "my-bucket"
	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.CreateSubscription(ctx, subID, pubsub.SubscriptionConfig{
		Topic: topic,
		CloudStorageConfig: pubsub.CloudStorageConfig{
			Bucket:         bucket,
			FilenamePrefix: "log_events_",
			FilenameSuffix: ".avro",
			OutputFormat:   &pubsub.CloudStorageOutputFormatAvroConfig{WriteMetadata: true},
			MaxDuration:    1 * time.Minute,
			MaxBytes:       1e8,
		},
	})
	if err != nil {
		return fmt.Errorf("client.CreateSubscription: %w", err)
	}
	fmt.Fprintf(w, "Created Cloud Storage subscription: %v\n", sub)

	return nil
}

Java

Antes de probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido de Pub/Sub sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java.

Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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

Supervisa las suscripciones

Cloud Monitoring proporciona una serie de métricas para supervisar las suscripciones.

También puedes supervisar las suscripciones desde Pub/Sub.

¿Qué sigue?