谷歌云函数默认环境变量未设置

时间:2020-05-28 18:01:56

标签: go google-cloud-functions

在Google Cloud函数上设置默认环境变量是否有条件?

我有以下代码:

func init() {
    projectID := os.Getenv("GCP_PROJECT")
    log.Printf("projectID: %s\n", projectID)

    functionName := os.Getenv("FUNCTION_NAME")
    log.Printf("functoinName: %s\n", functionName)

    region := os.Getenv("FUNCTION_REGION")
    log.Printf("region: %s\n", region)
}

,并且这些值为空。

即使我这样做:

func GameUpdate(ctx context.Context, e FirestoreEvent) error {
    functionName := os.Getenv("FUNCTION_NAME")
    log.Printf("functoinName: %s\n", functionName)
}

它们仍然是空的。

根据documentation,我希望它们已经设置并可用。但是它们不是:|

编辑:

我将go 1.13用作运行时,并且如Armatorix所述,这些env变量在该运行时不可用...

我需要它们的原因是为cloud.google.com/go/logging写一个包装器,以便能够标记日志的严重性。

我最终在标准输出日志前添加了[INFO] / [ERROR],并从中创建标签\[([A-Z]+)\].*。幸运的是,我不必在函数中进行网络调用即可发送日志。

令人失望的是这些环境变量不可用。

3 个答案:

答案 0 :(得分:3)

所以我已经阅读了相同的文档。 Here获得了go1.11可以像这样工作的信息(它可以工作,我已经对其进行了测试)。 但是go1.13的这些未设置。您仍然可以手动进行操作。 我还检查了在1.13版本上设置的环境。

来自os.Envrion()

PATH=/layers/google.go.build/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
FUNCTION_SIGNATURE_TYPE=http
DEBIAN_FRONTEND=noninteractive
HOME=/root
K_REVISION=9
FUNCTION_TARGET=HelloWorld
PORT=8080
GOROOT=/usr/local/go/
CGO_ENABLED=1
PWD=/srv
K_SERVICE=function-1

因此,您可能要使用的环境是K_SERVICE

答案 1 :(得分:2)

我已代表您创建了Feature Request,以便Cloud Functions Engineering团队将这些环境变量的自动集合实现为更新的运行时版本,例如Node.js 10和Go1.13。

您可以为问题加注星标,以便其可见,并且可以将自己包括在“抄送”部分中,以便接收此线程上发布的更多更新。

我希望这会有所帮助。

答案 2 :(得分:0)

我为此目的创建了一个库: github.com/ncruces/go-gcf/logging

但是您是对的,在Go 1.13运行时中,这些环境变量丢失了。他们建议在migration guide上进行部署时对其进行设置。

后来我发现推荐的方法是使用structured logging

// Structured logging can be used to set severity levels.
// See https://cloud.google.com/logging/docs/structured-logging.
fmt.Println(`{"message": "This has ERROR severity", "severity": "error"}`)

所以现在,我正在使用一种更简单的方法来“弃用”我的库,并创建一个新的库: github.com/ncruces/go-gcp/glog

这很简单,实际上并不需要库,但是它有助于正确地转义JSON逃生消息。