Вот очень простая облачная функция:
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'
Ошибка возникает из-за того, что 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, потому что весь импорт должен быть в верхней части файла.
Какое лучшее решение для эта проблема?