Create a PubSub topic.

View on GitHub

Last Updated: Feb. 25, 2023

Access Instructions

Install the Google provider package into your Airflow environment.

Import the module into your DAG file and instantiate it with your desired params.


project_idOptional, the Google Cloud project ID where the topic will be created. If set to None or missing, the default project_id from the Google Cloud connection is used.
topicRequiredthe topic to create. Do not include the full topic path. In other words, instead of projects/{project}/topics/{topic}, provide only {topic}. (templated)
gcp_conn_idThe connection ID to use connecting to Google Cloud.
delegate_toThe account to impersonate using domain-wide delegation of authority, if any. For this to work, the service account making the request must have domain-wide delegation enabled.
labelsClient-assigned labels; see
message_storage_policyPolicy constraining the set of Google Cloud regions where messages published to the topic may be stored. If not present, then no constraints are in effect. Union[dict,]
kms_key_nameThe resource name of the Cloud KMS CryptoKey to be used to protect access to messages published on this topic. The expected format is projects/*/locations/*/keyRings/*/cryptoKeys/*.
retry(Optional) A retry object used to retry requests. If None is specified, requests will not be retried.
timeout(Optional) The amount of time, in seconds, to wait for the request to complete. Note that if retry is specified, the timeout applies to each individual attempt.
metadata(Optional) Additional metadata that is provided to the method.
impersonation_chainOptional service account to impersonate using short-term credentials, or chained list of accounts required to get the access_token of the last account in the list, which will be impersonated in the request. If set as a string, the account must grant the originating account the Service Account Token Creator IAM role. If set as a sequence, the identities from the list must grant Service Account Token Creator IAM role to the directly preceding identity, with first account from the list granting this role to the originating account (templated).


Create a PubSub topic.

See also

For more information on how to use this operator, take a look at the guide: Creating a PubSub topic

By default, if the topic already exists, this operator will not cause the DAG to fail.

with DAG('successful DAG') as dag:
PubSubCreateTopicOperator(project_id='my-project', topic='my_new_topic')
>> PubSubCreateTopicOperator(project_id='my-project', topic='my_new_topic')

The operator can be configured to fail if the topic already exists.

with DAG('failing DAG') as dag:
PubSubCreateTopicOperator(project_id='my-project', topic='my_new_topic')
>> PubSubCreateTopicOperator(

Both project_id and topic are templated so you can use Jinja templating in their values.

Was this page helpful?