0

这是一个非常简单的云函数:

库文件

import os
TOKEN = os.environ['TOKEN']

some_func(token=TOKEN):
    return token

main.py - 在调用函数并且 main() 是入口点时运行。

import os
from lib import some_func

# This is a simplification of KMS secret injection
def inject_secrets():
    os.environ['TOKEN'] = 'SOMETOKEN'

inject_secrets()

def main():
   ...

在部署时,这会导致错误: ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function failed on loading user code. Error message: 'TOKEN'

发生故障是因为在从 导入TOKEN = os.environ['TOKEN']时调用。some_funclib

一种解决方案是在导入发生时移动,如下所示:

import os

def inject_secrets():
    os.environ['TOKEN'] = 'SOMETOKEN'

inject_secrets()
# Import moved after secret injection
from lib import some_func

这部署和工作,但不遵循 PEP8,因为所有导入都应该在文件的顶部。

这个问题有什么更好的解决方案?

4

1 回答 1

0

您可以在命令中使用环境变量gcloud functions deploy,例如:

gcloud functions deploy FUNCTION_NAME --set-env-vars TOKEN=SOMETOKEN FLAGS...
于 2020-06-23T06:36:40.973 回答