猿问

获取从 PubSub 事件触发的 Google Cloud Functions 的执行 ID

对于从 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和存在。EventTypeResource


如何检索由 PubSub 事件触发的 GCF 函数的执行 ID?


潇潇雨雨
浏览 134回答 2
2回答

Cats萌萌

不,目前无法从 pubsub 触发的事件中获取执行 ID。正如劳伦所说,您可以从上下文中获取事件 ID,但这与执行 ID 不匹配。此外,pubsub 触发的事件确实有执行 ID。您可以通过使用默认记录器记录事件 ID 来查看这一点。在 stackdriver 中会有一个附加的执行 ID 标签,它不会与事件 ID 匹配。我们观察到事件 ID 是数字,而执行 ID 是字母数字。此外,如果重试该函数,它将保留相同的事件 ID,但会获得不同的执行 ID。这是最近的(未记录的)更改,但可以很容易地观察到。

开心每一天1111

这似乎不再准确。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}
随时随地看视频慕课网APP

相关分类

Go
我要回答