Пример #1
0
def lambda_result_to_destination(func_details, event, result, is_async, error):
    if not func_details.destination_enabled():
        return

    payload = {
        "version": "1.0",
        "timestamp": timestamp_millis(),
        "requestContext": {
            "requestId": long_uid(),
            "functionArn": func_details.arn(),
            "condition": "RetriesExhausted",
            "approximateInvokeCount": 1,
        },
        "requestPayload": event,
        "responseContext": {"statusCode": 200, "executedVersion": "$LATEST"},
        "responsePayload": {},
    }

    if result and result.result:
        try:
            payload["requestContext"]["condition"] = "Success"
            payload["responsePayload"] = json.loads(result.result)
        except Exception:
            payload["responsePayload"] = result.result

    if error:
        payload["responseContext"]["functionError"] = "Unhandled"
        # add the result in the response payload
        if error.result is not None:
            payload["responsePayload"] = json.loads(error.result)
        send_event_to_target(func_details.on_failed_invocation, payload)
        return

    if func_details.on_successful_invocation is not None:
        send_event_to_target(func_details.on_successful_invocation, payload)
Пример #2
0
 def func(*args):
     rule_name = data.get('Name')
     client = aws_stack.connect_to_service('events')
     targets = client.list_targets_by_rule(Rule=rule_name)['Targets']
     if targets:
         LOG.debug(
             'Notifying %s targets in response to triggered Events rule %s'
             % (len(targets), rule_name))
     for target in targets:
         arn = target.get('Arn')
         event = json.loads(target.get('Input') or '{}')
         aws_stack.send_event_to_target(arn, event)
Пример #3
0
def process_events(event: Dict, targets: List[Dict]):
    for target in targets:
        arn = target["Arn"]
        changed_event = filter_event_with_target_input_path(target, event)
        try:
            aws_stack.send_event_to_target(
                arn, changed_event,
                aws_stack.get_events_target_attributes(target))
        except Exception as e:
            LOG.info(
                f"Unable to send event notification {truncate(event)} to target {target}: {e}"
            )
Пример #4
0
 def func(*args, **kwargs):
     rule_name = data.get("Name")
     client = aws_stack.connect_to_service("events")
     targets = client.list_targets_by_rule(Rule=rule_name)["Targets"]
     if targets:
         LOG.debug(
             "Notifying %s targets in response to triggered Events rule %s"
             % (len(targets), rule_name))
     for target in targets:
         arn = target.get("Arn")
         event = json.loads(target.get("Input") or "{}")
         attr = aws_stack.get_events_target_attributes(target)
         aws_stack.send_event_to_target(arn, event, target_attributes=attr)
Пример #5
0
 def func(*args, **kwargs):
     rule_name = data.get("Name")
     client = aws_stack.connect_to_service("events")
     targets = client.list_targets_by_rule(Rule=rule_name)["Targets"]
     if targets:
         LOG.debug(
             "Notifying %s targets in response to triggered Events rule %s"
             % (len(targets), rule_name))
     for target in targets:
         arn = target.get("Arn")
         event_str = target.get("Input") or "{}"
         event = json.loads(event_str)
         attr = aws_stack.get_events_target_attributes(target)
         try:
             aws_stack.send_event_to_target(arn,
                                            event,
                                            target_attributes=attr)
         except Exception as e:
             LOG.info(
                 f"Unable to send event notification {truncate(event)} to target {target}: {e}"
             )
Пример #6
0
def lambda_result_to_destination(func_details, event, result, is_async, error):
    if not func_details.destination_enabled():
        return

    payload = {
        'version': '1.0',
        'timestamp': timestamp_millis(),
        'requestContext': {
            'requestId': long_uid(),
            'functionArn': func_details.arn(),
            'condition': 'RetriesExhausted',
            'approximateInvokeCount': 1
        },
        'requestPayload': event,
        'responseContext': {
            'statusCode': 200,
            'executedVersion': '$LATEST'
        },
        'responsePayload': {}
    }

    if is_async:
        payload['responsePayload']['statusCode'] = 200
        payload['responsePayload']['headers'] = None
        payload['responsePayload']['multiValueHeaders'] = None
        payload['responsePayload']['body'] = ''
    else:
        payload['responsePayload'] = result.result

    if error:
        payload['responseContext']['functionError'] = 'Unhandled'
        # add the result in the response payload
        if error.result is not None:
            payload['responsePayload'] = json.loads(error.result)
        send_event_to_target(func_details.on_failed_invocation, payload)
        return

    send_event_to_target(func_details.on_successful_invocation, payload)
Пример #7
0
def process_events(event, targets):
    for target in targets:
        arn = target['Arn']
        changed_event = filter_event_with_target_input_path(target, event)
        aws_stack.send_event_to_target(
            arn, changed_event, aws_stack.get_events_target_attributes(target))