Within Pub/Sub, a topic is a named resource that represents a feed of messages.
This document explains how to create, update, view, and delete a Pub/Sub topic. This document also explains how to name topics and subscriptions.
Data replication in a topic
A Pub/Sub topic uses three zones to store data. The service guarantees synchronous replication to at least two zones, and best-effort replication to an additional third zone. Pub/Sub replication is within just one region.
Properties of a topic
When you create or update a topic, you must specify its properties.
Add a default subscription. Adds a default subscription to the Pub/Sub topic. You can create another subscription for the topic after the topic is created. The default subscription has the following properties:
- Subscription ID of
-sub
- Pull delivery type
- Message retention duration of seven days
- Expiration after 31 days of inactivity
- Acknowledgment deadline of 10 seconds
- Immediate retry policy
- Subscription ID of
Schema. A schema is a format that the message data field must follow. A schema is a contract between the publisher and subscriber that Pub/Sub enforces. Topic schemas help standardize message types and permissions to allow them to be consumed by different teams in your organization. Pub/Sub creates a central authority for message types and permissions. To create a topic with schema, see Create and manage schemas.
Message retention duration. Specifies how long the Pub/Sub topic retains messages after publication. After the message retention duration is over, Pub/Sub might discard the message regardless of its acknowledgment state. Message storage fees are charged for storing all messages published to the topic.
- Default = Not enabled
- Minimum value = 10 minutes
- Maximum value = 31 days
Use a customer-managed encryption key (CMEK). Specifies if the topic is encrypted with a CMEK. Pub/Sub encrypts messages with Google-managed keys by default. If you specify this option, Pub/Sub uses the envelope encryption pattern with CMEK. In this approach, Cloud KMS does not encrypt the messages. Instead, Cloud KMS encrypts the Data Encryption Keys (DEKs) that Pub/Sub creates for each topic. Pub/Sub encrypts the messages using the newest DEK that was generated for the topic. Pub/Sub decrypts the messages shortly before they are delivered to subscribers. For more information about creating a key, see Configure message encryption.
Guidelines to name a topic, subscription, schema, or snapshot
A Pub/Sub resource name uniquely identifies a Pub/Sub resource, such as a topic, subscription, schema or snapshot. The resource name must fit the following format:
projects/project-identifier/collection/ID
project-identifier
: Must be the project ID or project number, available from the Google Cloud console. For example,my-cool-project
is a project ID.123456789123
is a project number.collection
: Must be one oftopics
,subscriptions
,schemas
, orsnapshots
.ID
: Must conform to the following guidelines:- Not begin with the string
goog
- Start with a letter
- Contain between 3 and 255 characters
- Contain only the following characters: Letters
[A-Za-z]
, numbers[0-9]
, dashes-
, underscores_
, periods.
, tildes~
, plus signs+
, and percent signs%
You can use the special characters in the preceding list in resource names without URL-encoding. However, you must ensure that any other special characters are properly encoded or decoded when you use them in URLs. For example,
mi-tópico
is an invalid ID. However,mi-t%C3%B3pico
is valid. This format is important when you make REST calls.- Not begin with the string
Required roles and permissions to manage topics
To get the permissions that you need to create and manage topics,
ask your administrator to grant you the
Pub/Sub Editor(roles/pubsub.editor
)
IAM role on your topic or project.
For more information about granting roles, see
Manage access.
This predefined role contains the permissions required to create and manage topics. To see the exact permissions that are required, expand the Required permissions section:
Required permissions
The following permissions are required to create and manage topics:
-
Create a topic:
pubsub.topics.create
-
Delete a topic:
pubsub.topics.delete
-
Detach a subscription from a topic:
pubsub.topics.detachSubscription
-
Get a topic:
pubsub.topics.get
-
List a topic:
pubsub.topics.list
-
Publish to a topic:
pubsub.topics.publish
-
Update a topic:
pubsub.topics.update
-
Get the IAM policy for a topic:
pubsub.topics.getIamPolicy
-
Configure the IAM policy for a topic:
pubsub.topics.setIamPolicy
You might also be able to get these permissions with custom roles or other predefined roles.
You can configure access control at the project level and at the individual resource level. You can create a subscription in one project and attach it to a topic located in a different project. Ensure that you have the required permissions for each project.
Create a topic
Create a topic before you can publish or subscribe to it.
Console
To create a topic, follow these steps:
In the Google Cloud console, go to the Pub/Sub Topics page.
Click Create topic.
In the Topic ID field, enter an ID for your topic.
Retain the option Add a default subscription.
Do not select the other options.
Click Create topic.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
-
To create a topic, run the
gcloud pubsub topics create
command:gcloud pubsub topics create TOPIC_ID
To create a topic, use the
The request must be authenticated with an access token in the
Where: Response:REST
projects.topics.create
method:Authorization
header. To obtain an access token for the current
Application Default Credentials: gcloud auth application-default print-access-token
.
PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer ACCESS_TOKEN
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID"
}
Before trying this sample, follow the C++ setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub C++ API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the C# setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub C# API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Go setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Go API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Java setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Java API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Node.js setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Node.js API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the PHP setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub PHP API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Python setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Python API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Ruby setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Ruby API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Organization policy constraints
Organizational policies can restrict topic creation, for example, a policy can restrict message storage in a Compute Engine region. To avoid topic creation errors, examine and update organizational policies, as needed, before creating a topic.
If your project is newly created, wait a few minutes for the organization policy to initialize before creating a topic.
Delete a topic
When you delete a topic, its subscriptions are not deleted. The
message backlog from the subscription is available for subscribers. After a topic is
deleted, its subscriptions have the topic name _deleted-topic_
. If you try
to create a Pub/Sub resource with the same name and type of resource you had just deleted, expect
an error for a brief period.
In the Google Cloud console, go to the Pub/Sub Topics page. Select a topic and click Click Delete. The Delete topic window appears. Enter Console
delete
and then click Delete.
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a
Cloud Shell
session starts and displays a command-line prompt. Cloud Shell is a shell environment
with the Google Cloud CLI
already installed and with values already set for
your current project. It can take a few seconds for the session to initialize.
To delete a topic, use the
gcloud
gcloud pubsub topics delete
command:gcloud pubsub topics delete TOPIC_ID
To delete a topic, use the
Request: The request must be authenticated with an access token in the
Where: Response: If the request is successful, the response is an empty JSON object.REST
projects.topics.delete
method:Authorization
header. To obtain an access token for the current
Application Default Credentials: gcloud auth application-default print-access-token
.
DELETE https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer ACCESS_TOKEN
Before trying this sample, follow the C++ setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub C++ API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the C# setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub C# API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Go setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Go API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Java setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Java API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Node.js setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Node.js API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the PHP setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub PHP API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Python setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Python API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Ruby setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Ruby API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
List a topic
Console
In the Google Cloud console, go to the Pub/Sub Topics page.
The Topics page lists all the available topics.
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a
Cloud Shell
session starts and displays a command-line prompt. Cloud Shell is a shell environment
with the Google Cloud CLI
already installed and with values already set for
your current project. It can take a few seconds for the session to initialize.
To list topics, use the
gcloud pubsub topics list
command:gcloud
gcloud pubsub topics list
To list topics, use the
Request: The request must be authenticated with an access token in the
Where: Response:
Before trying this sample, follow the C++ setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub C++ API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the C# setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub C# API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Go setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Go API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Java setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Java API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Node.js setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Node.js API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the PHP setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub PHP API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Python setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Python API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
Before trying this sample, follow the Ruby setup instructions in the
Pub/Sub quickstart using
client libraries.
For more information, see the
Pub/Sub Ruby API
reference documentation.
To authenticate to Pub/Sub, set up Application Default Credentials.
For more information, see
Set up authentication for a local development environment.
REST
projects.topics.list
method:Authorization
header. To obtain an access token for the current
Application Default Credentials: gcloud auth application-default print-access-token
.
GET https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics
Authorization: Bearer ACCESS_TOKEN
{
"topics": [
{
"name": "projects/PROJECT_ID/topics/mytopic1",
...
},
{
"name": "projects/PROJECT_ID/topics/mytopic2",
...
}
]
}
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
By default, a maximum of 100 results are returned per query. You can specify an alternative value up to 1,000 using the page size parameter.
Monitor topics
You can monitor topics from within Pub/Sub.
What's next
Choose the type of subscription for your topic.
Create a subscription for your topic.
Create or modify a topic with gcloud CLI.
Create or modify a topic with REST APIs.