在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]+)\].*
。幸运的是,我不必在函数中进行网络调用即可发送日志。
令人失望的是这些环境变量不可用。
答案 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逃生消息。