Получить идентификатор выполнения для облачных функций Google, запущенных из события PubSub - PullRequest
0 голосов
/ 15 мая 2019

Для облачных функций Google, запускаемых из HTTP, можно получить идентификатор выполнения, проверив заголовки HTTP-запроса ("Function-Execution-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)
}

Однако для GCF, вызванного событиями PubSubЯ не могу найти, как получить этот идентификатор выполнения:

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 + пустой attributesmap.

Я также проверил, находится ли идентификатор выполнения в metadata, обработанном контекстом. Однако из моих тестов и документов (только https://godoc.org/cloud.google.com/go/functions/metadata#FromContext), EventID, Timestamp, EventType и Resource присутствуют.

Как получить идентификатор выполнения функции GCF, вызванной событием PubSub?

1 Ответ

1 голос
/ 15 мая 2019

Событие Pub / Sub-Triggered не имеет идентификатора выполнения; вместо этого он содержит EventID, содержащийся в метаданных контекста, который является уникальным идентификатором события.

Вы можете получить доступ к 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...