For Google Cloud Functions triggered from HTTP, it is possible to retrieve the execution id by inspecting the headers of the HTTP request ("Function-Execution-Id") :
package p
import (
"fmt"
"net/http"
)
func F(w http.ResponseWriter, r *http.Request) {
executionID := r.Header.Get("Function-Execution-Id")
fmt.Println(executionID)
}
However, for GCF triggered by PubSub events, I can't find how to retrieve this execution ID :
package p
import (
"context"
)
type PubSubMessage struct {
Data []byte `json:"data"`
}
func F(ctx context.Context, m PubSubMessage) error {
executionID := "" // ???
fmt.Println(executionID)
return nil
}
I have looked into the PubSubMessage (https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage), but it only contains data + an empty attributes map.
I have also checked if execution ID is in the metadata handled by the context. However, from my tests, and the docs (https://godoc.org/cloud.google.com/go/functions/metadata#FromContext), only EventID, Timestamp, EventType and Resource are present.
How can I retrieve the execution id of a GCF function triggered by a PubSub event?
No, it is currently not possible to get execution id from pubsub triggered events.
You can get the event id from context as Lauren stated but that does not match execution id.
Also, pubsub triggered events do have execution ids. You can see this by using a default logger to log the event id. In stackdriver there will be an attached execution id label and it will not match the event id. We have observed that event id is numeric while execution id is alphanumeric.
Further, if the function is retried, it will keep the same event id but get a different execution id.
This is a recent (undocumented) change but can be easily observed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With