#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 в любом месте расширения, она действительно будет установлена.
Вопрос в том,:
- является ли переменная среды строго одним направлением?
- если нет, то как я могу совместно использовать переменные ENV из расширения в функцию времени выполнения?
Комментарии:
1. Вы должны показать полный код, так как две предоставленные вами строки вырваны из контекста и являются правильными.
2. @Marcin дан полный код