"""Config file for lambda function.""" import logging import os from abacus_common_logic.utils.ssh import get_private_key from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization import dotenv from lambdacommon import util from secrets_manager.lambda_ext import LambdaSecretsManager SENSITIVE_FIELDS = [ 'address_1', 'address_2', 'city', 'province', 'zip', 'country_code', 'tin', 'first_name', 'last_name', 'date_of_birth', 'email', 'vat_number', 'local_tax_id', ] util.init_sentry_for_lambda(sensitive_fields=SENSITIVE_FIELDS) dotenv.load_dotenv() APPLICATION_NAME = 'lambda-documents-load-from-s3' # AWS region configuration DEFAULT_AWS_REGION = 'us-east-1' AWS_REGION = os.environ.get('AWS_REGION', DEFAULT_AWS_REGION) # Environment setup DEV_ENVIRONMENT = 'dev' QA_ENVIRONMENT = 'qa' UAT_ENVIRONMENT = 'uat' PROD_ENVIRONMENT = 'prod' ENVIRONMENT = os.environ.get('ENVIRONMENT', QA_ENVIRONMENT) # Sentry SENTRY_DSN = os.getenv('SENTRY_DSN') # Lambda LAMBDA_NAME = f'{ENVIRONMENT}-{APPLICATION_NAME}' # Logging settings LOGGING_LEVEL = os.environ.get('LOGGING_LEVEL', logging.getLevelName(logging.INFO)) DEFAULT_REQUEST_TIMEOUT = int(os.environ.get('DEFAULT_REQUEST_TIMEOUT', 60)) SNOWFLAKE_CONFIG = { 'role': os.environ.get('SNOWFLAKE_ROLE'), 'warehouse': os.environ.get('SNOWFLAKE_WAREHOUSE'), 'db': os.environ.get('SNOWFLAKE_DATABASE'), 'schema': os.environ.get('SNOWFLAKE_SCHEMA', ENVIRONMENT), 'user': os.environ.get('SNOWFLAKE_USER'), 'account': os.environ.get('SNOWFLAKE_ACCOUNT'), 'private_key': None, } # Snowflake SSH-Keypair access SNOWFLAKE_PRIVATE_KEY_PASSPHRASE: str = os.environ.get( 'SNOWFLAKE_PRIVATE_KEY_PASSPHRASE', '' ) SNOWFLAKE_PRIVATE_KEY_PATH: str = os.environ.get('SNOWFLAKE_PRIVATE_KEY_PATH', '') SNOWFLAKE_PRIVATE_KEY: str = os.environ.get('SNOWFLAKE_PRIVATE_KEY', '') if ENVIRONMENT in [QA_ENVIRONMENT, UAT_ENVIRONMENT, PROD_ENVIRONMENT]: client = LambdaSecretsManager( environment=ENVIRONMENT, service_name=APPLICATION_NAME ) SENTRY_DSN = client.get_cred('SENTRY_DSN') SNOWFLAKE_PRIVATE_KEY_PASSPHRASE = client.get_cred( 'SNOWFLAKE_PRIVATE_KEY_PASSPHRASE' ) SNOWFLAKE_PRIVATE_KEY = client.get_cred('SNOWFLAKE_PRIVATE_KEY') private_key = serialization.load_pem_private_key( bytes(SNOWFLAKE_PRIVATE_KEY, 'utf8'), password=bytes(SNOWFLAKE_PRIVATE_KEY_PASSPHRASE, 'utf8'), backend=default_backend(), ) SNOWFLAKE_CONFIG['private_key'] = private_key.private_bytes( # type: ignore encoding=serialization.Encoding.DER, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption(), ) if ENVIRONMENT == DEV_ENVIRONMENT: SNOWFLAKE_CONFIG['private_key'] = get_private_key( SNOWFLAKE_PRIVATE_KEY_PATH.replace('~', os.environ['HOME']), SNOWFLAKE_PRIVATE_KEY_PASSPHRASE, ) app_logger = util.setup_ows_logger( environment=ENVIRONMENT, logger_name=LAMBDA_NAME, logger_level=LOGGING_LEVEL, service_name=APPLICATION_NAME, service_version='1.0.0', )