对于通过HTTP触发的Google Cloud Functions,可以通过检查HTTP请求("Function-Execution-Id"
)的标头来检索执行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
地图。
我还检查了执行ID是否在上下文处理的metadata
中。但是,根据我的测试和文档(https://godoc.org/cloud.google.com/go/functions/metadata#FromContext),仅存在EventID
,Timestamp
,EventType
和Resource
。
如何获取由PubSub事件触发的GCF函数的执行ID?
答案 0 :(得分:1)
发布/订阅触发的事件没有执行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
}
答案 1 :(得分:1)
否,目前无法从pubsub触发的事件中获取执行ID。
您可以按照Lauren的说明从上下文中获取事件ID,但这与执行ID不匹配。
此外,pubsub触发的事件 do 具有执行ID。您可以通过使用默认记录器记录事件ID来查看此信息。在stackdriver中将有一个附加的执行ID标签,它与事件ID不匹配。我们已经观察到事件ID是数字,而执行ID是字母数字。
此外,如果重试该函数,它将保留相同的事件ID,但获得不同的执行ID。
这是最近(未记录)的更改,但很容易观察到。