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

时间:2019-05-15 15:21:36

标签: go google-cloud-functions google-cloud-pubsub

对于通过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
}

我已经查看了PubSubMessagehttps://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage),但其中仅包含data +空的attributes地图。

我还检查了执行ID是否在上下文处理的metadata中。但是,根据我的测试和文档(https://godoc.org/cloud.google.com/go/functions/metadata#FromContext),仅存在EventIDTimestampEventTypeResource

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

2 个答案:

答案 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。

这是最近(未记录)的更改,但很容易观察到。