小编典典

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

go

对于通过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地图。

我还检查metadata了上下文中是否包含执行ID
。然而,从我的测试,以及文档(https://godoc.org/cloud.google.com/go/functions/metadata#FromContext),只是EventIDTimestampEventTypeResource是存在的。

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


阅读 416

收藏
2020-07-02

共1个答案

小编典典

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
}
2020-07-02