这是一个非常简单的云函数:
库文件
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_func
lib
一种解决方案是在导入发生时移动,如下所示:
import os
def inject_secrets():
os.environ['TOKEN'] = 'SOMETOKEN'
inject_secrets()
# Import moved after secret injection
from lib import some_func
这部署和工作,但不遵循 PEP8,因为所有导入都应该在文件的顶部。
这个问题有什么更好的解决方案?