在导入的库中加载env-var时,如何将导入保持在文件的顶部



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

lib.py

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'

发生故障是因为从lib导入some_func时调用了TOKEN = os.environ['TOKEN']

一种解决方案是在导入发生时移动:

import os
def inject_secrets():
os.environ['TOKEN'] = 'SOMETOKEN'
inject_secrets()
# Import moved after secret injection
from lib import some_func

这将部署并工作,但不遵循PEP8,因为所有导入都应位于文件的顶部。

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

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

gcloud functions deploy FUNCTION_NAME --set-env-vars TOKEN=SOMETOKEN FLAGS...

相关内容

  • 没有找到相关文章

最新更新