Change subscription types

After you create a subscription, you can change the delivery method to push, pull, or export.

Before you begin

Required roles and permissions

To get the permissions that you need to change subscription types and manage them, 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 to projects, folders, and organizations .

This predefined role contains the permissions required to change subscription types and manage them. To see the exact permissions that are required, expand the Required permissionssection:

Required permissions

The following permissions are required to change subscription types and manage them:

  • Pull from a subscription: pubsub.subscriptions.consume
  • Create a subscription: pubsub.subscriptions.create
  • Delete a subscription: pubsub.subscriptions.delete
  • Get a subscription: pubsub.subscriptions.get
  • List a subscription: pubsub.subscriptions.list
  • Update a subscription: pubsub.subscriptions.update
  • Attach a subscription to a topic: pubsub.topics.attachSubscription
  • Get the IAM policy for a subscription: pubsub.subscriptions.getIamPolicy
  • Configure the IAM policy for a subscription: pubsub.subscriptions.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.

Modify delivery methods

You can switch between different subscription types.

Console

To modify a subscription, complete the following steps.

  1. In the Google Cloud console, go to the Subscriptionspage.

    Go to Subscriptions

  2. Click next to the subscription to update.
  3. In the Delivery type, choose a delivery option.
  4. Fill in other subscription properties as required.
  5. Click Update.

gcloud

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

    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.

  2. To modify the push endpoint URL, run the gcloud pubsub subscriptions modify-push-config command:

    gcloud  
    pubsub  
    subscriptions  
    modify-push-config  
     SUBSCRIPTION_ID 
      
     \ 
      
    --push-endpoint = 
     PUSH_ENDPOINT 
    

    If the subscription is already using pull delivery, setting the push endpoint switches the delivery method to push delivery.

    You can switch from push to pull delivery by changing the push endpoint to an empty string.

REST

To modify the push configurations of a subscription, use the projects.subscriptions.modifyPushConfig method:

Request:

The request must be authenticated with an access token in the Authorization header. To obtain an access token for the current Application Default Credentials: gcloud auth application-default print-access-token .

POST https://pubsub.googleapis.com/v1/projects/ PROJECT_ID 
/subscriptions/ SUBSCRIPTION_ID 
:modifyPushConfig
Authorization: Bearer ACCESS_TOKEN 

Request body:

{
"pushConfig": {
  "pushEndpoint": " PUSH_ENDPOINT 
"
}
}

Where:

  • PROJECT_ID is your project ID.
  • SUBSCRIPTION_ID is your subscription ID.
  • PUSH_ENDPOINT is a modified URL to you want to apply as your new push endpoint. For example, https://myproject.appspot.com/myhandler .
  • Response:

    If the request is successful, the response is an empty JSON object.

    C++

    Before trying this sample, follow the C++ setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub C++ API reference documentation .

      namespace 
      
     pubsub_admin 
      
     = 
      
     :: 
     google 
     :: 
     cloud 
     :: 
     pubsub_admin 
     ; 
     namespace 
      
     pubsub 
      
     = 
      
     :: 
     google 
     :: 
     cloud 
     :: 
     pubsub 
     ; 
     []( 
     pubsub_admin 
     :: 
     SubscriptionAdminClient 
      
     client 
     , 
      
     std 
     :: 
     string 
      
     const 
    &  
     project_id 
     , 
      
     std 
     :: 
     string 
      
     const 
    &  
     subscription_id 
     , 
      
     std 
     :: 
     string 
      
     const 
    &  
     endpoint 
     ) 
      
     { 
      
     google 
     :: 
     pubsub 
     :: 
     v1 
     :: 
     ModifyPushConfigRequest 
      
     request 
     ; 
      
     request 
     . 
     set_subscription 
     ( 
      
     pubsub 
     :: 
     Subscription 
     ( 
     project_id 
     , 
      
     subscription_id 
     ). 
     FullName 
     ()); 
      
     request 
     . 
     mutable_push_config 
     () 
     - 
    > set_push_endpoint 
     ( 
     endpoint 
     ); 
      
     auto 
      
     status 
      
     = 
      
     client 
     . 
     ModifyPushConfig 
     ( 
     request 
     ); 
      
     if 
      
     ( 
     ! 
     status 
     . 
     ok 
     ()) 
      
     throw 
      
     std 
     :: 
     runtime_error 
     ( 
     status 
     . 
     message 
     ()); 
      
     std 
     :: 
     cout 
     << 
     "The subscription push configuration was successfully" 
     << 
     " modified 
     \n 
     " 
     ; 
     } 
     
    

    C#

    Before trying this sample, follow the C# setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub C# API reference documentation .

      using 
      
      Google.Cloud.PubSub.V1 
     
     ; 
     public 
      
     class 
      
     UpdatePushConfigurationSample 
     { 
      
     public 
      
     void 
      
     UpdatePushConfiguration 
     ( 
     string 
      
     projectId 
     , 
      
     string 
      
     subscriptionId 
     , 
      
     string 
      
     pushEndpoint 
     ) 
      
     { 
      
      SubscriberServiceApiClient 
     
      
     subscriber 
      
     = 
      
      SubscriberServiceApiClient 
     
     . 
      Create 
     
     (); 
      
      SubscriptionName 
     
      
     subscriptionName 
      
     = 
      
      SubscriptionName 
     
     . 
      FromProjectSubscription 
     
     ( 
     projectId 
     , 
      
     subscriptionId 
     ); 
      
      PushConfig 
     
      
     pushConfig 
      
     = 
      
     new 
      
      PushConfig 
     
      
     { 
      
     PushEndpoint 
      
     = 
      
     pushEndpoint 
      
     }; 
      
     subscriber 
     . 
      ModifyPushConfig 
     
     ( 
     subscriptionName 
     , 
      
     pushConfig 
     ); 
      
     } 
     } 
     
    

    Go

    The following sample uses the major version of the Go Pub/Sub client library (v2). If you are still using the v1 library, see the migration guide to v2 . To see a list of v1 code samples, see the deprecated code samples .

    Before trying this sample, follow the Go setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Go API reference documentation .

      import 
      
     ( 
      
     "context" 
      
     "fmt" 
      
     "io" 
      
     "cloud.google.com/go/pubsub/v2" 
      
     "cloud.google.com/go/pubsub/v2/apiv1/pubsubpb" 
      
     "google.golang.org/protobuf/types/known/fieldmaskpb" 
     ) 
     func 
      
     updateEndpoint 
     ( 
     w 
      
     io 
     . 
     Writer 
     , 
      
     projectID 
     , 
      
     subscriptionName 
     , 
      
     endpoint 
      
     string 
     ) 
      
     error 
      
     { 
      
     // projectID := "my-project-id" 
      
     // subscriptionName := "projects/my-project/subscriptions/my-sub" 
      
     // endpoint := "https://my-test-project.appspot.com/push" 
      
     ctx 
      
     := 
      
     context 
     . 
     Background 
     () 
      
     client 
     , 
      
     err 
      
     := 
      
     pubsub 
     . 
     NewClient 
     ( 
     ctx 
     , 
      
     projectID 
     ) 
      
     if 
      
     err 
      
     != 
      
     nil 
      
     { 
      
     return 
      
     fmt 
     . 
     Errorf 
     ( 
     "pubsub.NewClient: %w" 
     , 
      
     err 
     ) 
      
     } 
      
     defer 
      
     client 
     . 
     Close 
     () 
      
     req 
      
     := 
      
    & pubsubpb 
     . 
     UpdateSubscriptionRequest 
     { 
      
     Subscription 
     : 
      
    & pubsubpb 
     . 
     Subscription 
     { 
      
     Name 
     : 
      
     subscriptionName 
     , 
      
     PushConfig 
     : 
      
    & pubsubpb 
     . 
     PushConfig 
     { 
      
     PushEndpoint 
     : 
      
     endpoint 
     , 
      
     }, 
      
     }, 
      
     UpdateMask 
     : 
      
    & fieldmaskpb 
     . 
     FieldMask 
     { 
      
     Paths 
     : 
      
     [] 
     string 
     { 
     "push_config" 
     }, 
      
     }, 
      
     } 
      
     subConfig 
     , 
      
     err 
      
     := 
      
     client 
     . 
     SubscriptionAdminClient 
     . 
     UpdateSubscription 
     ( 
     ctx 
     , 
      
     req 
     ) 
      
     if 
      
     err 
      
     != 
      
     nil 
      
     { 
      
     return 
      
     fmt 
     . 
     Errorf 
     ( 
     "Update: %w" 
     , 
      
     err 
     ) 
      
     } 
      
     fmt 
     . 
     Fprintf 
     ( 
     w 
     , 
      
     "Updated subscription config: %v\n" 
     , 
      
     subConfig 
     ) 
      
     return 
      
     nil 
     } 
     
    

    Java

    Before trying this sample, follow the Java setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Java API reference documentation .

      import 
      
     com.google.cloud.pubsub.v1. SubscriptionAdminClient 
     
     ; 
     import 
      
     com.google.pubsub.v1. PushConfig 
     
     ; 
     import 
      
     com.google.pubsub.v1. Subscription 
     
     ; 
     import 
      
     com.google.pubsub.v1. SubscriptionName 
     
     ; 
     import 
      
     java.io.IOException 
     ; 
     public 
      
     class 
     UpdatePushConfigurationExample 
      
     { 
      
     public 
      
     static 
      
     void 
      
     main 
     ( 
     String 
     ... 
      
     args 
     ) 
      
     throws 
      
     Exception 
      
     { 
      
     // TODO(developer): Replace these variables before running the sample. 
      
     String 
      
     projectId 
      
     = 
      
     "your-project-id" 
     ; 
      
     String 
      
     subscriptionId 
      
     = 
      
     "your-subscription-id" 
     ; 
      
     String 
      
     pushEndpoint 
      
     = 
      
     "https://my-test-project.appspot.com/push" 
     ; 
      
     updatePushConfigurationExample 
     ( 
     projectId 
     , 
      
     subscriptionId 
     , 
      
     pushEndpoint 
     ); 
      
     } 
      
     public 
      
     static 
      
     void 
      
     updatePushConfigurationExample 
     ( 
      
     String 
      
     projectId 
     , 
      
     String 
      
     subscriptionId 
     , 
      
     String 
      
     pushEndpoint 
     ) 
      
     throws 
      
     IOException 
      
     { 
      
     try 
      
     ( 
      SubscriptionAdminClient 
     
      
     subscriptionAdminClient 
      
     = 
      
      SubscriptionAdminClient 
     
     . 
     create 
     ()) 
      
     { 
      
      SubscriptionName 
     
      
     subscriptionName 
      
     = 
      
      SubscriptionName 
     
     . 
     of 
     ( 
     projectId 
     , 
      
     subscriptionId 
     ); 
      
      PushConfig 
     
      
     pushConfig 
      
     = 
      
      PushConfig 
     
     . 
     newBuilder 
     (). 
      setPushEndpoint 
     
     ( 
     pushEndpoint 
     ). 
     build 
     (); 
      
     subscriptionAdminClient 
     . 
     modifyPushConfig 
     ( 
     subscriptionName 
     , 
      
     pushConfig 
     ); 
      
      Subscription 
     
      
     subscription 
      
     = 
      
     subscriptionAdminClient 
     . 
     getSubscription 
     ( 
     subscriptionName 
     ); 
      
     System 
     . 
     out 
     . 
     println 
     ( 
      
     "Updated push endpoint to: " 
      
     + 
      
     subscription 
     . 
      getPushConfig 
     
     (). 
     getPushEndpoint 
     ()); 
      
     } 
      
     } 
     } 
     
    

    Node.js

    Before trying this sample, follow the Node.js setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Node.js API reference documentation .

      /** 
     * TODO(developer): Uncomment these variables before running the sample. 
     */ 
     // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID'; 
     // const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID'; 
     // 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 
      
     modifyPushConfig 
     ( 
     topicNameOrId 
     , 
      
     subscriptionNameOrId 
     ) 
      
     { 
      
     const 
      
     options 
      
     = 
      
     { 
      
     // Set to an HTTPS endpoint of your choice. If necessary, register 
      
     // (authorize) the domain on which the server is hosted. 
      
     pushEndpoint 
     : 
      
     ` 
     https 
     : 
     //${pubSubClient.projectId}.appspot.com/push`, 
      
     }; 
      
     await 
      
     pubSubClient 
      
     . 
     topic 
     ( 
     topicNameOrId 
     ) 
      
     . 
     subscription 
     ( 
     subscriptionNameOrId 
     ) 
      
     . 
     modifyPushConfig 
     ( 
     options 
     ); 
      
     console 
     . 
     log 
     ( 
     ` 
     Modified 
      
     push 
      
     config 
      
     for 
      
     subscription 
      
     $ 
     { 
     subscriptionNameOrId 
     }. 
     ` 
     ); 
     } 
     
    

    Node.ts

    Before trying this sample, follow the Node.js setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Node.js API reference documentation .

      /** 
     * 
     TODO 
     ( 
     developer 
     ): 
     Uncomment 
     these 
     variables 
     before 
     running 
     the 
     sample 
     . 
     */ 
     // 
     const 
     topicNameOrId 
     = 
     'YOUR_TOPIC_NAME_OR_ID' 
     ; 
     // 
     const 
     subscriptionNameOrId 
     = 
     'YOUR_SUBSCRIPTION_NAME_OR_ID' 
     ; 
     // 
     Imports 
     the 
     Google 
     Cloud 
     client 
     library 
     import 
      
     { 
     PubSub 
     , 
     CreateSubscriptionOptions 
     } 
     from 
      
     '@google-cloud/pubsub' 
     ; 
     // 
     Creates 
     a 
     client 
     ; 
     cache 
     this 
     for 
     further 
     use 
     const 
     pubSubClient 
     = 
     new 
     PubSub 
     (); 
     async 
     function 
     modifyPushConfig 
     ( 
     topicNameOrId 
     : 
     string 
     , 
     subscriptionNameOrId 
     : 
     string 
     , 
     ) 
     { 
     const 
     options 
     : 
     CreateSubscriptionOptions 
     = 
     { 
     // 
     Set 
     to 
     an 
     HTTPS 
     endpoint 
     of 
     your 
     choice 
     . 
     If 
     necessary 
     , 
     register 
     // 
     ( 
     authorize 
     ) 
     the 
     domain 
     on 
     which 
     the 
     server 
     is 
     hosted 
     . 
     pushEndpoint 
     : 
     ` 
     https 
     : 
     // 
     $ 
     { 
     pubSubClient 
     . 
     projectId 
     } 
     . 
     appspot 
     . 
     com 
     / 
     push 
     ` 
     , 
     }; 
     await 
     pubSubClient 
     . 
     topic 
     ( 
     topicNameOrId 
     ) 
     . 
     subscription 
     ( 
     subscriptionNameOrId 
     ) 
     . 
     modifyPushConfig 
     ( 
     options 
     ); 
     console 
     . 
     log 
     ( 
     ` 
     Modified 
     push 
     config 
     for 
     subscription 
     $ 
     { 
     subscriptionNameOrId 
     } 
     . 
     ` 
     ); 
     } 
     
    

    Python

    Before trying this sample, follow the Python setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Python API reference documentation .

      from 
      
     google.cloud 
      
     import 
     pubsub_v1 
     # TODO(developer) 
     # project_id = "your-project-id" 
     # topic_id = "your-topic-id" 
     # subscription_id = "your-subscription-id" 
     # endpoint = "https://my-test-project.appspot.com/push" 
     subscriber 
     = 
     pubsub_v1 
     . 
      SubscriberClient 
     
     () 
     subscription_path 
     = 
     subscriber 
     . 
     subscription_path 
     ( 
     project_id 
     , 
     subscription_id 
     ) 
     push_config 
     = 
     pubsub_v1 
     . 
     types 
     . 
      PushConfig 
     
     ( 
     push_endpoint 
     = 
     endpoint 
     ) 
     subscription 
     = 
     pubsub_v1 
     . 
     types 
     . 
      Subscription 
     
     ( 
     name 
     = 
     subscription_path 
     , 
     topic 
     = 
     topic_id 
     , 
     push_config 
     = 
     push_config 
     ) 
     update_mask 
     = 
     { 
     "paths" 
     : 
     { 
     "push_config" 
     }} 
     # Wrap the subscriber in a 'with' block to automatically call close() to 
     # close the underlying gRPC channel when done. 
     with 
     subscriber 
     : 
     result 
     = 
     subscriber 
     . 
     update_subscription 
     ( 
     request 
     = 
     { 
     "subscription" 
     : 
     subscription 
     , 
     "update_mask" 
     : 
     update_mask 
     } 
     ) 
     print 
     ( 
     f 
     "Subscription updated: 
     { 
     subscription_path 
     } 
     " 
     ) 
     print 
     ( 
     f 
     "New endpoint for subscription is: 
     { 
     result 
     . 
     push_config 
     } 
     ." 
     ) 
     
    

    Ruby

    The following sample uses Ruby Pub/Sub client library v3. If you are still using the v2 library, see the migration guide to v3 . To see a list of Ruby v2 code samples, see the deprecated code samples .

    Before trying this sample, follow the Ruby setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Ruby API reference documentation .

      # subscription_id   = "your-subscription-id" 
     # new_endpoint      = "Endpoint where your app receives messages"" 
     pubsub 
      
     = 
      
     Google 
     :: 
     Cloud 
     :: 
      PubSub 
     
     . 
      new 
     
     subscription_admin 
      
     = 
      
     pubsub 
     . 
      subscription_admin 
     
     subscription 
      
     = 
      
     subscription_admin 
     . 
     get_subscription 
      
     \ 
      
     subscription 
     : 
      
     pubsub 
     . 
     subscription_path 
     ( 
     subscription_id 
     ) 
     subscription 
     . 
     push_config 
      
     = 
      
     Google 
     :: 
     Cloud 
     :: 
      PubSub 
     
     :: 
      V1 
     
     :: 
     PushConfig 
     . 
      new 
     
      
     \ 
      
     push_endpoint 
     : 
      
     new_endpoint 
     subscription_admin 
     . 
     update_subscription 
      
     subscription 
     : 
      
     subscription 
     , 
      
     update_mask 
     : 
      
     { 
      
     paths 
     : 
      
     [ 
     "push_config" 
     ] 
      
     } 
     puts 
      
     "Push endpoint updated." 
     
    

    What's next

    Create a Mobile Website
    View Site in Mobile | Classic
    Share by: