对于通过HTTP触发的Google Cloud Functions,可以通过检查HTTP请求("Function-Execution- Id")的标头来检索执行ID :
"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) }
但是,对于由PubSub事件触发的GCF,我找不到如何检索此执行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 }
我已经研究了PubSubMessage(https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage),但其中只包含data+一个空的attributes地图。
PubSubMessage
data
attributes
我还检查metadata了上下文中是否包含执行ID 。然而,从我的测试,以及文档(https://godoc.org/cloud.google.com/go/functions/metadata#FromContext),只是EventID,Timestamp,EventType和Resource是存在的。
metadata
EventID
Timestamp
EventType
Resource
如何获取由PubSub事件触发的GCF函数的执行ID?
Pub / Sub触发的事件没有执行ID。相反,它EventID包含在上下文元数据中,它是事件的唯一ID。
您可以访问EventID以下内容:
import ( "context" "log" "cloud.google.com/go/functions/metadata" ) func F(ctx context.Context, m PubSubMessage) error { ctxMetadata, err := metadata.FromContext(ctx) if err != nil { log.Fatal(err); } log.Println("EventID: " + ctxMetadata.EventID) return nil }