"""AWS connector.""" import json import boto3 from botocore.exceptions import ClientError from abacus_event.config import Config from abacus_event.utils.ows_error import OwsError def invoke_lambda( function_name: str, payload: dict, qualifier: str = 'provisioned' ) -> None: """Invoke lambda function asynchronously. Args: function_name (str): name of the lambda function payload (dict): input of lambda function qualifier (str): version or alias of lambda function; defaults to 'provisioned' """ try: lambda_client = _get_lambda_client() lambda_name = f'{Config.ENVIRONMENT.lower()}-{function_name}' lambda_client.invoke( FunctionName=lambda_name, InvocationType='Event', LogType='None', Payload=json.dumps(payload), Qualifier=qualifier, ) except ClientError as error: error_response = error.response error_code = error_response.get('Error', {}).get('Code') error_msg = error_response.get('Error', {}).get('Message') status_code = error_response.get('ResponseMetadata', {}).get('HTTPStatusCode') raise OwsError(message=f'{error_code}: {error_msg}', status=status_code) def _get_lambda_client() -> boto3.client: """Get lambda client.""" return boto3.client('lambda', region_name=Config.AWS_REGION)