Pub/Sub triggers

Google Cloud's Pub/Sub is a globally distributed message bus that automatically scales as you need it. You can trigger a function whenever a new Pub/Sub message is sent to a specific topic.

Import the required modules

To get started, import the modules required for handling Pub/Sub events:

Node.js

const{onMessagePublished}=require("firebase-functions/pubsub");
constlogger=require("firebase-functions/logger");

Python

fromfirebase_functionsimport pubsub_fn

Trigger the function

You must specify the Pub/Sub topic name that you want to trigger your function, and set the event within the event handler:

Node.js

exports.hellopubsub=onMessagePublished("topic-name",(event)=>{

Python

@pubsub_fn.on_message_published(topic="topic-name")
defhellopubsub(event: pubsub_fn.CloudEvent[pubsub_fn.MessagePublishedData]) -> None:
"""Log a message using data published to a Pub/Sub topic."""

Access the pub/sub message payload

The payload for the Pub/Sub message is accessible from the message object returned to your function. For messages with JSON in the Pub/Sub message body, the Firebase SDK for Cloud Functions has a helper property to decode the message. For example, here is a message published with a simple JSON payload:

gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'

You can access a JSON data payload like this via the json property:

Node.js

// Get the `name` attribute of the PubSub message JSON body.
letname=null;
try{
name=event.data.message.json.name;
}catch(e){
logger.error("PubSub message was not JSON",e);
}

Python

# Get the `name` attribute of the PubSub message JSON body.
try:
 data = event.data.message.json
except ValueError:
 print("PubSub message was not JSON")
 return
if data is None:
 return
if "name" not in data:
 print("No 'name' key")
 return
name = data["name"]

Other, non-JSON payloads are contained in the Pub/Sub message as base64 encoded strings in the message object. To read a message like the following, you must decode the base64 encoded string as shown:

gcloud pubsub topics publish topic-name --message 'MyMessage'

Node.js

// Decode the PubSub Message body.
constmessage=event.data.message;
constmessageBody=message.data?
Buffer.from(message.data,"base64").toString():
null;

Python

# Decode the PubSub message body.
message_body = base64.b64decode(event.data.message.data)

Access message attributes

Pub/Sub message can be sent with data attributes set in the publish command. For example, you could publish a message with a name attribute:

gcloud pubsub topics publish topic-name --attribute name=Xenia

You can read such attributes from the corresponding property of the message object:

Node.js

// Get the `name` attribute of the message.
constname=event.data.message.attributes.name;

Python

# Get the `name` attribute of the message.
if "name" not in event.data.message.attributes:
 print("No 'name' attribute")
 return
name = event.data.message.attributes["name"]

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025年11月06日 UTC.