获取从 PubSub 事件触发的 Google Cloud Functions 的执行 ID
Get execution ID for Google Cloud Functions triggered from PubSub event
对于从 HTTP 触发的 Google Cloud Functions,可以通过检查 HTTP 请求的 headers ("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?
编辑:这似乎不再准确。参见ProGirlXOXO的另一个回答。
一个Pub/Sub-triggered事件没有执行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
}
不,目前无法从 pubsub 触发的事件中获取执行 ID。
您可以按照 Lauren 所述从上下文中获取事件 ID,但这 不 匹配执行 ID。
此外,pubsub 触发的事件 do 具有执行 ID。您可以通过使用默认记录器记录事件 ID 来查看这一点。在 stackdriver 中会有一个附加的执行 ID 标签,它不会与事件 ID 匹配。我们观察到事件 ID 是数字,而执行 ID 是字母数字。
此外,如果重试该函数,它将保留相同的事件 ID,但会获得不同的执行 ID。
这是最近的(未记录的)更改,但很容易观察到。
对于从 HTTP 触发的 Google Cloud Functions,可以通过检查 HTTP 请求的 headers ("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?
编辑:这似乎不再准确。参见ProGirlXOXO的另一个回答。
一个Pub/Sub-triggered事件没有执行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
}
不,目前无法从 pubsub 触发的事件中获取执行 ID。
您可以按照 Lauren 所述从上下文中获取事件 ID,但这 不 匹配执行 ID。
此外,pubsub 触发的事件 do 具有执行 ID。您可以通过使用默认记录器记录事件 ID 来查看这一点。在 stackdriver 中会有一个附加的执行 ID 标签,它不会与事件 ID 匹配。我们观察到事件 ID 是数字,而执行 ID 是字母数字。
此外,如果重试该函数,它将保留相同的事件 ID,但会获得不同的执行 ID。
这是最近的(未记录的)更改,但很容易观察到。