Расширения AWS lambda не предоставляют общий доступ к переменным среды

#amazon-web-services #aws-lambda

Вопрос:

Ниже приведено secrets-wrapper.py лямбда-расширение:

 #!/usr/bin/env python3  import boto3 import json import os  LAMBDA_WRAPPER_NAME = "secrets-wrapper"   def debug_print(message):  print(message, flush=True)   def error_print(message):  print(message, flush=True)   def load_secrets():   if not 'APP_PARAMS_PATH' in os.environ:  error_print(  f"{LAMBDA_WRAPPER_NAME} unable to load secrets APP_PARAMS_PATH not found")  return   app_config_path = os.environ['APP_PARAMS_PATH']  if 'APP_ENV' in os.environ:  env = os.environ['APP_ENV']  full_config_path = '/'   env   '/'   app_config_path  else:  full_config_path = '/'   app_config_path   debug_print(  f"{LAMBDA_WRAPPER_NAME} Loading secrets for path {full_config_path}")   try:  client = boto3.client('ssm')  # Get all parameters for this app  param_details = client.get_parameters_by_path(  Path=full_config_path,  Recursive=False,  WithDecryption=True  )   # Loop through the returned parameters and populate the ConfigParser  if 'Parameters' in param_details:  for param in param_details.get('Parameters'):  debug_print(f"Found param: {param}")  param_name = param.get('Name').split("/")[-1]  debug_print(f"Name: {param_name}")  param_value = param.get('Value')  debug_print(f"Value: {param_value}")  os.environ[param_name] = param_value  except:  debug_print(f"{LAMBDA_WRAPPER_NAME} could not load from SSM")  raise Exception(f"{LAMBDA_WRAPPER_NAME} could not load from SSM")   def main():  load_secrets()   # Start the function  args = os.sys.argv[1:]  os.system(" ".join(args))   if __name__ == "__main__":  main()  

и это функция:

 import json import os  def lambda_handler(event, context):  # TODO implement  print(f"ENV foo check: {`os.environ.get('foo')`}", flush=True)  return {  'statusCode': 200,  'body': json.dumps('Hello from Lambda!')  }  

при установке APP_ENV в лямбда-функцию:

 aws lambda update-function-configuration --function-name my-function-example   --environment "Variables={APP_NAME=myApp}"  

в пределах лямбда-расширения это не вызывает проблем:

 env = os.environ['APP_ENV'] #dev  

Однако при настройке переменных среды в расширении os.environ[param_name] = param_value

при извлечении его обратно в вызванной функции os.environ.get('foo') он возвращается так None , как если бы он не был установлен. Если я выведу переменную среды set в любом месте расширения, она действительно будет установлена.

Вопрос в том,:

  1. является ли переменная среды строго одним направлением?
  2. если нет, то как я могу совместно использовать переменные ENV из расширения в функцию времени выполнения?

Комментарии:

1. Вы должны показать полный код, так как две предоставленные вами строки вырваны из контекста и являются правильными.

2. @Marcin дан полный код