Configure Pub/Sub notifications for Cloud Storage

Overview

This page describes how to configure your bucket to send notifications about object changes to a Pub/Sub topic. For information on subscribing to a Pub/Sub topic that receives notifications, see Choose a subscription type.

Before you begin

Before using this feature, complete the following instructions.

Enable the Pub/Sub API

Enable the Pub/Sub API for the project that will receive notifications.

Enable the API

Make sure you have an existing Pub/Sub topic

If you haven't already, create a Pub/Sub topic to which you want to send notifications. This step is not necessary if you plan on using the Google Cloud CLI or Terraform to perform the instructions on this page.

Get required roles

IAM role requirements differ depending on whether you're configuring the notification or delivering the event data:

Get roles for viewing bucket metadata and the Pub/Sub topic

To get the permissions that you need to configure and view Pub/Sub notifications for a bucket, ask your administrator to grant you the following roles. These predefined roles contain the permissions required to configure and view Pub/Sub notifications.

You might be able to get these permissions with other predefined roles or custom roles.

See Set and manage IAM policies on buckets for instructions on granting roles on buckets. See Controlling access for instructions on granting roles on projects and setting access controls for topics and subscriptions.

Grant required role to your project's service agent

This section shows you how to grant the permissions required for your service agent to deliver notifications.

  1. Get the email address of the service agent associated with the project that contains your Cloud Storage bucket. The service agent email address follows the format:

    service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
    
  2. Grant the service agent the Pub/Sub Publisher (roles/pubsub.publisher) role for the relevant Pub/Sub topic. See Controlling access for instructions on granting roles for topics.

Apply a notification configuration

The following steps add a notification configuration to your bucket that sends notifications for all supported events.

Console

You cannot manage Pub/Sub notifications with the Google Cloud console. Use the gcloud CLI or one of the available client libraries instead.

Command line

Use the gcloud storage buckets notifications create command:

gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME

Where:

To send notifications for a subset of events, include the --event-types flag.

Client libraries

C++

For more information, see the Cloud Storage C++ API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

namespace gcs = ::google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& topic_name) {
  StatusOr<gcs::NotificationMetadata> notification =
      client.CreateNotification(bucket_name, topic_name,
                                gcs::NotificationMetadata());
  if (!notification) throw std::move(notification).status();

  std::cout << "Successfully created notification " << notification->id()
            << " for bucket " << bucket_name << "\n";
  std::cout << "Full details for the notification:\n"
            << *notification << "\n";
}

C#

For more information, see the Cloud Storage C# API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.


using Google.Apis.Storage.v1.Data;
using Google.Cloud.Storage.V1;
using System;

public class CreatePubSubNotificationSample
{
    public Notification CreatePubSubNotification(
        string bucketName = "your-unique-bucket-name",
        string topic = "my-topic")
    {
        StorageClient storage = StorageClient.Create();
        Notification notification = new Notification
        {
            Topic = topic,
            PayloadFormat = "JSON_API_V1"
        };

        Notification createdNotification = storage.CreateNotification(bucketName, notification);
        Console.WriteLine("Notification subscription created with ID: " + createdNotification.Id + " for bucket name " + bucketName);
        return createdNotification;
    }
}

Go

For more information, see the Cloud Storage Go API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

import (
	"context"
	"fmt"
	"io"

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

// createBucketNotification creates a notification configuration for a bucket.
func createBucketNotification(w io.Writer, projectID, bucketName, topic string) error {
	// projectID := "my-project-id"
	// bucketName := "bucket-name"
	// topic := "topic-name"

	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	notification := storage.Notification{
		TopicID:        topic,
		TopicProjectID: projectID,
		PayloadFormat:  storage.JSONPayload,
	}

	createdNotification, err := client.Bucket(bucketName).AddNotification(ctx, &notification)
	if err != nil {
		return fmt.Errorf("Bucket.AddNotification: %w", err)
	}
	fmt.Fprintf(w, "Successfully created notification with ID %s for bucket %s.\n", createdNotification.ID, bucketName)
	return nil
}

Java

For more information, see the Cloud Storage Java API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

import com.google.cloud.storage.Notification;
import com.google.cloud.storage.NotificationInfo;
import com.google.cloud.storage.NotificationInfo.EventType;
import com.google.cloud.storage.NotificationInfo.PayloadFormat;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.util.Map;

public class CreateBucketPubSubNotification {

  public static void createBucketPubSubNotification(
      String bucketName,
      String topicName,
      Map<String, String> customAttributes,
      EventType[] eventTypes,
      String objectNamePrefix,
      PayloadFormat payloadFormat) {
    // The ID to give your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The name of the topic you would like to create a notification for
    // String topicName = "projects/{your-project}/topics/{your-topic}";

    // Any custom attributes
    // Map<String, String> customAttributes = Map.of("label", "value");

    // The object name prefix for which this notification configuration applies
    // String objectNamePrefix = "blob-";

    // Desired content of the Payload
    // PayloadFormat payloadFormat = PayloadFormat.JSON_API_V1.JSON_API_V1;

    Storage storage = StorageOptions.newBuilder().build().getService();
    NotificationInfo notificationInfo =
        NotificationInfo.newBuilder(topicName)
            .setCustomAttributes(customAttributes)
            .setEventTypes(eventTypes)
            .setObjectNamePrefix(objectNamePrefix)
            .setPayloadFormat(payloadFormat)
            .build();
    Notification notification = storage.createNotification(bucketName, notificationInfo);
    String topic = notification.getTopic();
    System.out.println("Successfully created notification for topic " + topic);
  }
}

Node.js

For more information, see the Cloud Storage Node.js API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The name of a topic
// const topic = 'my-topic';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function createNotification() {
  // Creates a notification
  await storage.bucket(bucketName).createNotification(topic);

  console.log('Notification subscription created.');
}

createNotification().catch(console.error);

PHP

For more information, see the Cloud Storage PHP API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

To create a notification configuration for a bucket using PHP, see the Google Cloud Client Library reference documentation.

Python

For more information, see the Cloud Storage Python API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

from google.cloud import storage


def create_bucket_notifications(bucket_name, topic_name):
    """Creates a notification configuration for a bucket."""
    # The ID of your GCS bucket
    # bucket_name = "your-bucket-name"
    # The name of a topic
    # topic_name = "your-topic-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    notification = bucket.notification(topic_name=topic_name)
    notification.create()

    print(f"Successfully created notification with ID {notification.notification_id} for bucket {bucket_name}")

Ruby

For more information, see the Cloud Storage Ruby API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

require "google/cloud/storage"

def create_bucket_notifications bucket_name:, topic_name:
  # The ID of your GCS bucket
  # bucket_name = "your-unique-bucket-name"

  # The ID of the pubsub topic
  # topic_name = "your-unique-topic-name"

  storage = Google::Cloud::Storage.new
  bucket  = storage.bucket bucket_name
  notification = bucket.create_notification topic_name

  puts "Successfully created notification with ID #{notification.id} for bucket #{bucket_name}"
end

Terraform

You can use a Terraform resource to add a notification configuration to a bucket.

// Create a Pub/Sub notification.
resource "google_storage_notification" "notification" {
  provider       = google-beta
  bucket         = google_storage_bucket.bucket.name
  payload_format = "JSON_API_V1"
  topic          = google_pubsub_topic.topic.id
  depends_on     = [google_pubsub_topic_iam_binding.binding]
}

// Enable notifications by giving the correct IAM permission to the unique service account.
data "google_storage_project_service_account" "gcs_account" {
  provider = google-beta
}

// Create a Pub/Sub topic.
resource "google_pubsub_topic_iam_binding" "binding" {
  provider = google-beta
  topic    = google_pubsub_topic.topic.id
  role     = "roles/pubsub.publisher"
  members  = ["serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"]
}

resource "random_id" "bucket_prefix" {
  byte_length = 8
}

// Create a new storage bucket.
resource "google_storage_bucket" "bucket" {
  name                        = "${random_id.bucket_prefix.hex}-example-bucket-name"
  provider                    = google-beta
  location                    = "US"
  uniform_bucket_level_access = true
}

resource "google_pubsub_topic" "topic" {
  name     = "your_topic_name"
  provider = google-beta
}

REST APIs

JSON API

Have gcloud CLI installed and initialized, which lets you generate an access token for the Authorization header.

  • Create a JSON file that contains the following information:

    {
      "topic": "projects/PROJECT_ID/topics/TOPIC_NAME",
      "payload_format": "JSON_API_V1"
    }

    Where:

    To send notifications for a subset of events, include the event_types field in the body of your JSON request.

  • Use cURL to call the JSON API with a POST notificationConfigs request:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/notificationConfigs"

    Where:

  • XML API

    You cannot manage Pub/Sub notifications with the XML API.

    Apply a notification configuration across projects

    Your bucket might be in a different project than the Pub/Sub topic you want to send notifications to. For example, your bucket might be in Project A while the Pub/Sub topic is in Project B. In this scenario, ensure the following:

    Get a notification configuration

    To get a specific notification configuration that's associated with your bucket, complete the following steps:

    Console

    You cannot manage Pub/Sub notifications with the Google Cloud console. Use the Google Cloud CLI or one of the available client libraries instead.

    Command line

    Use the gcloud storage buckets notifications describe command:

    gcloud storage buckets notifications describe projects/_/buckets/BUCKET_NAME/notificationConfigs/NOTIFICATION_ID

    Where:

    If successful, the response looks similar to the following example:

    etag: '132'
    id: '132'
    kind: storage#notification
    payload_format: JSON_API_V1
    selfLink: https://www.googleapis.com/storage/v1/b/my-bucket/notificationConfigs/132
    topic: //pubsub.googleapis.com/projects/my-project/topics/my-bucket

    Client libraries

    C++

    For more information, see the Cloud Storage C++ API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    namespace gcs = ::google::cloud::storage;
    using ::google::cloud::StatusOr;
    [](gcs::Client client, std::string const& bucket_name,
       std::string const& notification_id) {
      StatusOr<gcs::NotificationMetadata> notification =
          client.GetNotification(bucket_name, notification_id);
      if (!notification) throw std::move(notification).status();
    
      std::cout << "Notification " << notification->id() << " for bucket "
                << bucket_name << "\n";
      if (notification->object_name_prefix().empty()) {
        std::cout << "This notification is sent for all objects in the bucket\n";
      } else {
        std::cout << "This notification is sent only for objects starting with"
                  << " the prefix " << notification->object_name_prefix() << "\n";
      }
      std::cout << "Full details for the notification:\n"
                << *notification << "\n";
    }

    C#

    For more information, see the Cloud Storage C# API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    
    using Google.Apis.Storage.v1.Data;
    using Google.Cloud.Storage.V1;
    using System;
    
    public class GetPubSubNotificationSample
    {
        public Notification GetPubSubNotification(
            string bucketName = "your-unique-bucket-name",
            string notificationId = "notificationId")
        {
            StorageClient storage = StorageClient.Create();
            Notification notification = storage.GetNotification(bucketName, notificationId);
    
            Console.WriteLine("ID: " + notification.Id);
            Console.WriteLine("Topic: " + notification.Topic);
            Console.WriteLine("EventTypes: " + notification.EventTypes);
            Console.WriteLine("CustomAttributes: " + notification.CustomAttributes);
            Console.WriteLine("PayloadFormat: " + notification.PayloadFormat);
            Console.WriteLine("ObjectNamePrefix: " + notification.ObjectNamePrefix);
            Console.WriteLine("ETag: " + notification.ETag);
            Console.WriteLine("SelfLink: " + notification.SelfLink);
            Console.WriteLine("Kind: " + notification.Kind);
    
            return notification;
        }
    }
    

    Go

    For more information, see the Cloud Storage Go API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/storage"
    )
    
    // printPubsubBucketNotification gets a notification configuration for a bucket.
    func printPubsubBucketNotification(w io.Writer, bucketName, notificationID string) error {
    	// bucketName := "bucket-name"
    	// notificationID := "notification-id"
    
    	ctx := context.Background()
    	client, err := storage.NewClient(ctx)
    	if err != nil {
    		return fmt.Errorf("storage.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	notifications, err := client.Bucket(bucketName).Notifications(ctx)
    	if err != nil {
    		return fmt.Errorf("Bucket.Notifications: %w", err)
    	}
    
    	n := notifications[notificationID]
    	fmt.Fprintf(w, "Notification: %+v", n)
    
    	return nil
    }
    

    Java

    For more information, see the Cloud Storage Java API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    import com.google.cloud.storage.Notification;
    import com.google.cloud.storage.Storage;
    import com.google.cloud.storage.StorageOptions;
    
    public class PrintPubSubNotification {
    
      public static void printPubSubNotification(String bucketName, String notificationId) {
        // The ID to give your GCS bucket
        // String bucketName = "your-unique-bucket-name";
    
        // The Pub/Sub topic you would like to find
        // String notificationId = "your-unique-notification-id"
    
        Storage storage = StorageOptions.newBuilder().build().getService();
        Notification notification = storage.getNotification(bucketName, notificationId);
        System.out.println(
            "Found notification " + notification.getTopic() + " for bucket " + bucketName);
      }
    }

    Node.js

    For more information, see the Cloud Storage Node.js API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // The ID of your GCS bucket
    // const bucketName = 'your-unique-bucket-name';
    
    // The ID of the notification
    // const notificationId = '1';
    
    // Imports the Google Cloud client library
    const {Storage} = require('@google-cloud/storage');
    
    // Creates a client
    const storage = new Storage();
    
    async function getMetadata() {
      // Get the notification metadata
      const [metadata] = await storage
        .bucket(bucketName)
        .notification(notificationId)
        .getMetadata();
    
      console.log(`ID: ${metadata.id}`);
      console.log(`Topic: ${metadata.topic}`);
      console.log(`Event Types: ${metadata.event_types}`);
      console.log(`Custom Attributes: ${metadata.custom_attributes}`);
      console.log(`Payload Format: ${metadata.payload_format}`);
      console.log(`Object Name Prefix: ${metadata.object_name_prefix}`);
      console.log(`Etag: ${metadata.etag}`);
      console.log(`Self Link: ${metadata.selfLink}`);
      console.log(`Kind: ${metadata.kind}`);
    }
    
    getMetadata().catch(console.error);

    PHP

    For more information, see the Cloud Storage PHP API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    To get a notification configuration for a bucket using PHP, see the Google Cloud Client Library reference documentation.

    Python

    For more information, see the Cloud Storage Python API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    from google.cloud import storage
    
    
    def print_pubsub_bucket_notification(bucket_name, notification_id):
        """Gets a notification configuration for a bucket."""
        # The ID of your GCS bucket
        # bucket_name = "your-bucket-name"
        # The ID of the notification
        # notification_id = "your-notification-id"
    
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)
        notification = bucket.get_notification(notification_id)
    
        print(f"Notification ID: {notification.notification_id}")
        print(f"Topic Name: {notification.topic_name}")
        print(f"Event Types: {notification.event_types}")
        print(f"Custom Attributes: {notification.custom_attributes}")
        print(f"Payload Format: {notification.payload_format}")
        print(f"Blob Name Prefix: {notification.blob_name_prefix}")
        print(f"Etag: {notification.etag}")
        print(f"Self Link: {notification.self_link}")
    

    Ruby

    For more information, see the Cloud Storage Ruby API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    require "google/cloud/storage"
    
    def print_pubsub_bucket_notification bucket_name:, notification_id:
      # The ID of your GCS bucket
      # bucket_name = "your-unique-bucket-name"
    
      # The ID of your notification configured for the bucket
      # notification_id = "your-notification-id"
    
    
      storage = Google::Cloud::Storage.new
      bucket  = storage.bucket bucket_name
      notification = bucket.notification notification_id
    
      puts "Notification ID: #{notification.id}"
      puts "Topic Name: #{notification.topic}"
      puts "Event Types: #{notification.event_types}"
      puts "Kind of Notification: #{notification.kind}"
      puts "Custom Attributes: #{notification.custom_attrs}"
      puts "Payload Format: #{notification.payload}"
      puts "Blob Name Prefix: #{notification.prefix}"
      puts "Self Link: #{notification.api_url}"
    end

    REST APIs

    JSON API

    Have gcloud CLI installed and initialized, which lets you generate an access token for the Authorization header.

  • Use cURL to call the JSON API with a GET notificationConfigs request:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/notificationConfigs/NOTIFICATION_ID"

    Where:

  • XML API

    You cannot manage Pub/Sub Notifications with the XML API.

    List notification configurations for a bucket

    To list all the notification configurations associated with a particular bucket:

    Console

    You cannot manage Pub/Sub notifications with the Google Cloud console. Use the gcloud CLI or one of the available client libraries instead.

    Command line

    Use the gcloud storage buckets notifications list command:

    gcloud storage buckets notifications list gs://BUCKET_NAME

    Where BUCKET_NAME is the name of the bucket whose notification configurations you want to list. For example, my-bucket.

    Client libraries

    C++

    For more information, see the Cloud Storage C++ API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    namespace gcs = ::google::cloud::storage;
    using ::google::cloud::StatusOr;
    [](gcs::Client client, std::string const& bucket_name) {
      StatusOr<std::vector<gcs::NotificationMetadata>> items =
          client.ListNotifications(bucket_name);
      if (!items) throw std::move(items).status();
    
      std::cout << "Notifications for bucket=" << bucket_name << "\n";
      for (gcs::NotificationMetadata const& notification : *items) {
        std::cout << notification << "\n";
      }
    }

    C#

    For more information, see the Cloud Storage C# API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    
    using Google.Apis.Storage.v1.Data;
    using Google.Cloud.Storage.V1;
    using System;
    using System.Collections.Generic;
    
    public class ListPubSubNotificationSample
    {
        public IReadOnlyList<Notification> ListPubSubNotification(string bucketName = "your-unique-bucket-name")
        {
            StorageClient storage = StorageClient.Create();
            IReadOnlyList<Notification> notifications = storage.ListNotifications(bucketName);
    
            foreach (Notification notification in notifications)
            {
                Console.WriteLine(notification.Id);
            }
            return notifications;
        }
    }
    

    Go

    For more information, see the Cloud Storage Go API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/storage"
    )
    
    // listBucketNotifications lists notification configurations for a bucket.
    func listBucketNotifications(w io.Writer, bucketName string) error {
    	// bucketName := "bucket-name"
    
    	ctx := context.Background()
    	client, err := storage.NewClient(ctx)
    	if err != nil {
    		return fmt.Errorf("storage.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	notifications, err := client.Bucket(bucketName).Notifications(ctx)
    	if err != nil {
    		return fmt.Errorf("Bucket.Notifications: %w", err)
    	}
    
    	for nID, n := range notifications {
    		fmt.Fprintf(w, "Notification topic %s with ID %s\n", n.TopicID, nID)
    	}
    
    	return nil
    }
    

    Java

    For more information, see the Cloud Storage Java API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    import com.google.cloud.storage.Notification;
    import com.google.cloud.storage.Storage;
    import com.google.cloud.storage.StorageOptions;
    import java.util.List;
    
    public class ListPubSubNotifications {
    
      public static void listPubSubNotifications(String bucketName) {
        // The ID to give your GCS bucket
        // String bucketName = "your-unique-bucket-name";
    
        Storage storage = StorageOptions.newBuilder().build().getService();
        List<Notification> notificationList = storage.listNotifications(bucketName);
        for (Notification notification : notificationList) {
          System.out.println(
              "Found notification " + notification.getTopic() + " for bucket " + bucketName);
        }
      }
    }

    Node.js

    For more information, see the Cloud Storage Node.js API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // The ID of your GCS bucket
    // const bucketName = 'your-unique-bucket-name';
    
    // Imports the Google Cloud client library
    const {Storage} = require('@google-cloud/storage');
    
    // Creates a client
    const storage = new Storage();
    
    async function listNotifications() {
      // Lists notifications in the bucket
      const [notifications] = await storage.bucket(bucketName).getNotifications();
    
      console.log('Notifications:');
      notifications.forEach(notification => {
        console.log(notification.id);
      });
    }
    
    listNotifications().catch(console.error);

    PHP

    For more information, see the Cloud Storage PHP API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    To list notification configurations associated with a bucket using PHP, see the Google Cloud Client Library reference documentation.

    Python

    For more information, see the Cloud Storage Python API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    from google.cloud import storage
    
    
    def list_bucket_notifications(bucket_name):
        """Lists notification configurations for a bucket."""
        # The ID of your GCS bucket
        # bucket_name = "your-bucket-name"
    
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)
        notifications = bucket.list_notifications()
    
        for notification in notifications:
            print(f"Notification ID: {notification.notification_id}")
    

    Ruby

    For more information, see the Cloud Storage Ruby API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    require "google/cloud/storage"
    
    def list_bucket_notifications bucket_name:
      # The ID of your GCS bucket
      # bucket_name = "your-unique-bucket-name"
    
      storage = Google::Cloud::Storage.new
      bucket  = storage.bucket bucket_name
    
      bucket.notifications.each do |notification|
        puts "Notification ID: #{notification.id}"
      end
    end

    REST APIs

    JSON API

    Have gcloud CLI installed and initialized, which lets you generate an access token for the Authorization header.

  • Use cURL to call the JSON API with a GET notificationConfigs request:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/notificationConfigs"

    Where BUCKET_NAME is the name of the bucket whose notification configurations you want to list. For example, my-bucket.

  • XML API

    You cannot manage Pub/Sub notifications with the XML API.

    Remove a notification configuration

    To remove an existing notification configuration from your bucket:

    Console

    You cannot manage Pub/Sub notifications with the Google Cloud console. Use the gcloud CLI or one of the available client libraries instead.

    Command line

    Use the gcloud storage buckets notifications delete command:

    gcloud storage buckets notifications delete projects/_/buckets/BUCKET_NAME/notificationConfigs/NOTIFICATION_ID

    Where:

    If successful, the response looks similar to the following example:

    Completed 1

    Once sent, it might take up to 30 seconds for all notifications triggered by the notification configuration to stop.

    Client libraries

    C++

    For more information, see the Cloud Storage C++ API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    namespace gcs = ::google::cloud::storage;
    [](gcs::Client client, std::string const& bucket_name,
       std::string const& notification_id) {
      google::cloud::Status status =
          client.DeleteNotification(bucket_name, notification_id);
      if (!status.ok()) throw std::runtime_error(status.message());
    
      std::cout << "Successfully deleted notification " << notification_id
                << " on bucket " << bucket_name << "\n";
    }

    C#

    For more information, see the Cloud Storage C# API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    
    using System;
    using Google.Cloud.Storage.V1;
    
    public class DeletePubSubNotificationSample
    {
        public void DeletePubSubNotification(
            string bucketName = "your-unique-bucket-name",
            string notificationId = "notificationId")
        {
            StorageClient storage = StorageClient.Create();
            storage.DeleteNotification(bucketName, notificationId);
    
            Console.WriteLine("Successfully deleted notification with ID " + notificationId + " for bucket " + bucketName);
        }
    }
    

    Go

    For more information, see the Cloud Storage Go API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/storage"
    )
    
    // deleteBucketNotification deletes a notification configuration for a bucket.
    func deleteBucketNotification(w io.Writer, bucketName, notificationID string) error {
    	// bucketName := "bucket-name"
    	// notificationID := "notification-id"
    
    	ctx := context.Background()
    	client, err := storage.NewClient(ctx)
    	if err != nil {
    		return fmt.Errorf("storage.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	bucket := client.Bucket(bucketName)
    
    	if err := bucket.DeleteNotification(ctx, notificationID); err != nil {
    		return fmt.Errorf("Bucket.DeleteNotification: %w", err)
    	}
    	fmt.Fprintf(w, "Successfully deleted notification with ID %s for bucket %s.\n", notificationID, bucketName)
    	return nil
    }
    

    Java

    For more information, see the Cloud Storage Java API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    import com.google.cloud.storage.Storage;
    import com.google.cloud.storage.StorageOptions;
    
    public class DeleteBucketPubSubNotification {
    
      public static void deleteBucketPubSubNotification(String bucketName, String notificationId) {
        // The ID to give your GCS bucket
        // String bucketName = "your-unique-bucket-name";
    
        // The NotificationId for the notification you would like to delete
        // String notificationId = "your-unique-notification-id"
    
        Storage storage = StorageOptions.newBuilder().build().getService();
        boolean success = storage.deleteNotification(bucketName, notificationId);
        if (success) {
          System.out.println("Successfully deleted notification");
        } else {
          System.out.println("Failed to find notification");
        }
      }
    }

    Node.js

    For more information, see the Cloud Storage Node.js API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // The ID of your GCS bucket
    // const bucketName = 'your-unique-bucket-name';
    
    // The ID of the notification
    // const notificationId = '1';
    
    // Imports the Google Cloud client library
    const {Storage} = require('@google-cloud/storage');
    
    // Creates a client
    const storage = new Storage();
    
    async function deleteNotification() {
      // Deletes the notification from the bucket
      await storage.bucket(bucketName).notification(notificationId).delete();
    
      console.log(`Notification ${notificationId} deleted.`);
    }
    
    deleteNotification().catch(console.error);

    PHP

    For more information, see the Cloud Storage PHP API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    To delete a notification configuration for a bucket using PHP, see the Google Cloud Client Library reference documentation.

    Python

    For more information, see the Cloud Storage Python API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    from google.cloud import storage
    
    
    def delete_bucket_notification(bucket_name, notification_id):
        """Deletes a notification configuration for a bucket."""
        # The ID of your GCS bucket
        # bucket_name = "your-bucket-name"
        # The ID of the notification
        # notification_id = "your-notification-id"
    
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)
        notification = bucket.notification(notification_id=notification_id)
        notification.delete()
    
        print(f"Successfully deleted notification with ID {notification_id} for bucket {bucket_name}")
    

    Ruby

    For more information, see the Cloud Storage Ruby API reference documentation.

    To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries.

    require "google/cloud/storage"
    
    def delete_bucket_notification bucket_name:, notification_id:
      # The ID of your GCS bucket
      # bucket_name = "your-unique-bucket-name"
    
      # The ID of your notification configured for the bucket
      # notification_id = "your-notification-id"
    
      storage = Google::Cloud::Storage.new
      bucket  = storage.bucket bucket_name
      notification = bucket.notification notification_id
      notification.delete
    
      puts "Successfully deleted notification with ID #{notification_id} for bucket #{bucket_name}"
    end

    Terraform

    To remove the notification configuration you created, run terraform destroy from the folder containing your Terraform file.

    REST APIs

    JSON API

    Have gcloud CLI installed and initialized, which lets you generate an access token for the Authorization header.

  • Use cURL to call the JSON API with a DELETE notificationConfigs request:

    curl -X DELETE \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/notificationConfigs/NOTIFICATION_ID"

    Where:

  • Once sent, it may take up to 30 seconds for all notifications triggered by the notification configuration to stop.

    XML API

    You cannot manage Pub/Sub notifications with the XML API.

    What's next