Skip to content

Firetail Python Lambda Middleware

License

Notifications You must be signed in to change notification settings

FireTail-io/firetail-py-lambda

Repository files navigation

Firetail Python Lambda Middleware

PyPI package version number Actions Status License: LGPL v3 codecov

###Overview

The purpose of this module is to correctly log out the AWS Lambda event and response payload to allow the firetail extension to then send it on to the firetail logging api

The firetail_handler is a decorator that wraps around an event handler function in a AWS Lambda to extract the event and response payloads into a base64 logging message.

###Supported Lambda Runtimes

  • Python 3.7
  • Python 3.8
  • Python 3.9

###Installation Install the module with using pip

pip install -U firetail-lambda

Implementing Middleware in lambda function

from firetail_lambda import firetail_handler, firetail_app

app = firetail_app()

@firetail_handler(app)
def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": "Hello"
        })
    }

Multiple Event handlers

from firetail_lambda import firetail_handler, firetail_app

app = firetail_app()

@firetail_handler(app)
def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": "Hello"
        })
    }

@firetail_handler(app)
def lambda_handler_2(event, context):
    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": "Hello 2"
        })
    }

Custom Sanitization callback

from firetail_lambda import firetail_handler, firetail_app

def sanitize_payloads(event, response):
    new_event = copy.copy(event)
    remove_headers = ['authorization','Authorization', 'x-api-key']
    if 'headers' in event:
        for header in remove_headers:
            if header in event['headers']:
                del new_event['headers'][header]
            if 'multiValueHeaders' in event and header in event['multiValueHeaders']:
                del new_event['multiValueHeaders'][header]
                        
    return new_event, response

app = firetail_app()
app.sanitization_callback = sanitize_payloads

@firetail_handler(app)
def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": "Hello"
        })
    }