Collection of helpers for working with AWS
Project description
okdata-aws
Collection of helpers for working with AWS.
Logging for Lambda
Based on Structlog.
Structured and enriched logging for AWS Lambda functions.
TL;DR:
- Decorate handler with
logging_wrapper
- Encrich logs with key/value pairs using
log_add
- Time functions with
log_duration
- Log exceptions with
log_exception
Usage
Regular Lambda functions
Wrap your Lambda handler with logging_wrapper
. Badabing badabom, you're good
to go!
You can set the service name using the logging.init
method, or configure it
using the SERVICE_NAME
environment variable.
from okdata.aws import logging
from okdata.aws.logging import logging_wrapper
logging.init("my_fantastic_lambda")
@logging_wrapper
def handler(event, context):
if error:
return {
"statusCode": 500,
"body": "Automatically logs bodies from error responses even!",
}
FastAPI applications
Call add_fastapi_logging
with the FastAPI application as a parameter
to add the logging middleware.
from okdata.aws.logging import add_fastapi_logging
app = FastAPI()
add_fastapi_logging(app)
Encriching logs
By automagic logs will be enriched with git revisions, cold start y/n call
duration and much more, but to add even more magic you can use log_add
and
log_duration
.
from okdata.aws.logging import logging_wrapper, log_add, log_duration
@logging_wrapper
def handler(event, context):
log_add(dataset=event["dataset"], foo=context["foo"])
log_duration(
lambda: slow_thinger(event["dataset"]),
"my_slow_thinger"
)
... and so on
def slow_thinger():
sleep(9999999999999999)
Exceptions
Struct log can extract exception info if we log the exception to the special
exc_info
key.
For convenience we catch and log uncaught exceptions using this already.
If you need to process an exception you can use log_exception
to log it to the
exc_info
key.
from okdata.aws.logging import logging_wrapper, log_exception
@logging_wrapper
def handler(event, context):
try:
thing()
except MyException as e:
log_exception(e)
return { ... }
Status wrapper
The status wrapper logs details about a Lambda function execution and sends it to the status API.
The first component that touches the data (typically on upload) sets a "trace ID", which is then inherited by the following processing steps. This allows the status API to track what has happened to the data, from upload through the various processing steps until the data is ready for consumption.
For pipeline components, the status wrapper picks up the trace ID from the Lambda event automatically.
The status wrapper expects the SERVICE_NAME
of the Lambda component to be set
in an environment variable, along with GIT_REV
and GIT_BRANCH
.
Usage
Tag the Lambda handler function with @status_wrapper
.
The handler function should set the domain
and domain_id
values using the
status_add
method:
from okdata.aws.status import status_wrapper, status_add
@status_wrapper
def my_lambda_handler(event, context):
status_add(domain="dataset", domain_id=f"{dataset_id}/{version}")
# Regular handler logic here ...
# The handler can also add a body object containing component-specific information
status_body = {
"input": "/tmp/file.txt",
"output": "/tmp/file.csv",
"transformation": "text-to-csv",
}
status_add(status_body=status_body)
By default, this will send a status event with event status OK
and trace
status CONTINUE
, meaning that the data pipeline is still running. If the
handler function fails, e.g. throws an exception, it will send event status
FAILED
and trace status FINISHED
, in addition to the failure details
(exception).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file okdata-aws-2.2.0.tar.gz
.
File metadata
- Download URL: okdata-aws-2.2.0.tar.gz
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf5f99b872867ae2a5d848598f7a5d2714241bad3eb4ccbc3c1f2d11a2d56d63 |
|
MD5 | 4f39c2d102fb5e115b525a72e6a02b9d |
|
BLAKE2b-256 | 20dd5092d9f95f5c5bc7ca9194771d579238e8015c76c928c3749fe6c4ffc0e9 |
File details
Details for the file okdata_aws-2.2.0-py3-none-any.whl
.
File metadata
- Download URL: okdata_aws-2.2.0-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7e5bc8fca9b879164da34b8a9adca866dd0b380012b7c5218e7a1b22bb2d50f |
|
MD5 | 388e6f463895cee307d55b1b3d44b6ab |
|
BLAKE2b-256 | b1e3ce2af1201ab11feb84f650c898e7a30cc2fc7d8261f5cabc31038ca621fe |