Bird
Raised Fist0
GCPcloud~10 mins

Cloud Functions with Pub/Sub triggers in GCP - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Cloud Functions with Pub/Sub triggers
Pub/Sub Topic receives message
↓
Trigger Cloud Function
↓
Cloud Function executes code
↓
Process message data
↓
Function completes and acknowledges message
When a message is published to a Pub/Sub topic, it triggers the Cloud Function to run and process that message.
Execution Sample
GCP
def pubsub_trigger(event, context):
    message = event['data']
    print(f"Received message: {message}")
This Cloud Function runs when a Pub/Sub message arrives and prints the message data.
Process Table
StepEvent ReceivedMessage DataActionOutput
1Message published to topicSGVsbG8gd29ybGQ=Trigger functionFunction starts
2Function triggeredSGVsbG8gd29ybGQ=Decode messageDecoded to 'Hello world'
3Processing messageHello worldPrint messageOutput: Received message: Hello world
4Function completesHello worldAcknowledge messageMessage acknowledged
5No new messagesN/AWait for next messageIdle
💡 No new messages, function waits for next trigger
Status Tracker
VariableStartAfter Step 2After Step 3Final
event['data']SGVsbG8gd29ybGQ=SGVsbG8gd29ybGQ=Hello worldHello world
messageundefinedSGVsbG8gd29ybGQ=Hello worldHello world
Key Moments - 3 Insights
Why does the message data look like random letters before decoding?
The message data is base64 encoded when received (see execution_table step 2). It must be decoded to get the original text.
What triggers the Cloud Function to run?
Publishing a message to the Pub/Sub topic triggers the function immediately (execution_table step 1).
What happens if no messages are published?
The function stays idle waiting for the next message (execution_table step 5).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the message data after decoding at step 2?
ASGVsbG8gd29ybGQ=
BHello world
CReceived message
DN/A
💡 Hint
Check the 'Message Data' column at step 2 in the execution_table
At which step does the function acknowledge the message?
AStep 1
BStep 3
CStep 4
DStep 5
💡 Hint
Look at the 'Action' column for message acknowledgement in the execution_table
If no messages are published, what is the function's state according to the execution table?
AFunction starts
BIdle, waiting for next message
CProcessing message
DMessage acknowledged
💡 Hint
Refer to the last row in the execution_table under 'Output'
Concept Snapshot
Cloud Functions with Pub/Sub triggers:
- Pub/Sub topic receives message
- Message triggers Cloud Function
- Function decodes and processes message
- Function acknowledges message
- Waits idle if no messages
Full Transcript
When a message is published to a Pub/Sub topic, it triggers the associated Cloud Function to run. The function receives the event containing the message data, which is base64 encoded. The function decodes this data to get the original message text. It then processes the message, for example by printing it. After processing, the function acknowledges the message to Pub/Sub. If no messages are published, the function remains idle, waiting for the next trigger.

Practice

(1/5)
1. What happens when a Google Cloud Function is triggered by a Pub/Sub message?
easy
A. The function runs automatically when a new message arrives on the Pub/Sub topic.
B. The function must be manually started after the message is published.
C. The function only runs if the message contains a specific keyword.
D. The function runs only once a day regardless of messages.

Solution

  1. Step 1: Understand Pub/Sub trigger behavior

    Cloud Functions connected to Pub/Sub topics run automatically when a new message is published to that topic.
  2. Step 2: Confirm automatic execution

    There is no need for manual start or keyword filtering by default; the function triggers on every message.
  3. Final Answer:

    The function runs automatically when a new message arrives on the Pub/Sub topic. -> Option A
  4. Quick Check:

    Pub/Sub triggers auto-run functions on new messages [OK]
Hint: Pub/Sub triggers run functions automatically on new messages [OK]
Common Mistakes:
  • Thinking the function needs manual start
  • Assuming filtering happens automatically
  • Believing the function runs on a schedule
2. Which of the following is the correct way to declare a Cloud Function triggered by Pub/Sub in Node.js?
easy
A. exports.myFunction = (event, context) => { console.log(event.data); };
B. function myFunction(pubsubMessage) { console.log(pubsubMessage.data); }
C. exports.myFunction = (req, res) => { res.send('Hello'); };
D. function myFunction(event) { return event.data; }

Solution

  1. Step 1: Identify correct Cloud Function signature for Pub/Sub

    In Node.js, a Pub/Sub triggered function uses (event, context) parameters, where event.data contains the message.
  2. Step 2: Check options for correct syntax

    exports.myFunction = (event, context) => { console.log(event.data); }; uses exports with (event, context) and accesses event.data correctly. Others either use wrong parameters or HTTP function style.
  3. Final Answer:

    exports.myFunction = (event, context) => { console.log(event.data); }; -> Option A
  4. Quick Check:

    Pub/Sub functions use (event, context) signature [OK]
Hint: Pub/Sub functions use (event, context) parameters in Node.js [OK]
Common Mistakes:
  • Using HTTP function signature (req, res)
  • Missing exports keyword
  • Using wrong parameter names
3. Given this Python Cloud Function triggered by Pub/Sub:
def hello_pubsub(event, context):
    import base64
    message = base64.b64decode(event['data']).decode('utf-8')
    print(f'Received message: {message}')

What will be printed if the Pub/Sub message data is base64 encoding of 'Hello World'?
medium
A. Received message: event['data']
B. Received message: b'Hello World'
C. Received message: Hello World
D. Error: base64 decoding failed

Solution

  1. Step 1: Decode base64 message data

    The function decodes event['data'] from base64 to bytes, then decodes bytes to UTF-8 string.
  2. Step 2: Print the decoded message

    The decoded string is 'Hello World', so the print statement outputs 'Received message: Hello World'.
  3. Final Answer:

    Received message: Hello World -> Option C
  4. Quick Check:

    Base64 decode then UTF-8 decode gives original message [OK]
Hint: Base64 decode Pub/Sub data to get original message text [OK]
Common Mistakes:
  • Printing raw base64 string instead of decoded
  • Forgetting to decode bytes to string
  • Assuming event['data'] is plain text
4. You deployed a Cloud Function triggered by Pub/Sub, but it never runs when messages are published. What is the most likely cause?
medium
A. Cloud Functions do not support Pub/Sub triggers.
B. The function code has a syntax error.
C. The Pub/Sub topic is empty and cannot trigger functions.
D. The function is not subscribed to the correct Pub/Sub topic.

Solution

  1. Step 1: Check Pub/Sub subscription linkage

    If the function is not linked to the correct Pub/Sub topic, it will not trigger on published messages.
  2. Step 2: Eliminate other causes

    Syntax errors cause deployment failure, empty topics can still trigger if messages arrive, and Cloud Functions do support Pub/Sub triggers.
  3. Final Answer:

    The function is not subscribed to the correct Pub/Sub topic. -> Option D
  4. Quick Check:

    Correct topic subscription is required for triggers [OK]
Hint: Verify function subscribes to the right Pub/Sub topic [OK]
Common Mistakes:
  • Assuming empty topic blocks triggers
  • Ignoring subscription configuration
  • Thinking Cloud Functions lack Pub/Sub support
5. You want to ensure your Cloud Function triggered by Pub/Sub processes messages exactly once, even if Pub/Sub retries delivery. What is the best approach?
hard
A. Disable retries in Pub/Sub settings to avoid duplicate triggers.
B. Implement idempotent processing in the function using unique message IDs.
C. Use a global variable in the function to track processed messages.
D. Rely on Pub/Sub to guarantee exactly-once delivery automatically.

Solution

  1. Step 1: Understand Pub/Sub delivery guarantees

    Pub/Sub guarantees at-least-once delivery, so duplicates can occur if retries happen.
  2. Step 2: Implement idempotency in function

    To handle duplicates, the function should process messages idempotently, often by checking unique message IDs to avoid repeated work.
  3. Step 3: Evaluate other options

    Disabling retries risks message loss, global variables don't persist across executions, and Pub/Sub does not guarantee exactly-once delivery by itself.
  4. Final Answer:

    Implement idempotent processing in the function using unique message IDs. -> Option B
  5. Quick Check:

    Idempotent code handles retries safely [OK]
Hint: Make function idempotent using message IDs to avoid duplicates [OK]
Common Mistakes:
  • Expecting Pub/Sub to do exactly-once delivery
  • Disabling retries risking lost messages
  • Using non-persistent variables for tracking
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard