Session Lambda
A simple way to manage sessions for AWS Lambdas
This package simplfy the way one can use DynamoDB as a key/value presistance layer for AWS Lambda - using a single python decorator.
Install
pip install session-lambda
Prerequisites
DynamoDB Table
- A table in DynamoDB with a primary key named
key
of type string - [optional] Enable TTL in your DynamoDB table with attribute named
ttl
Usage
Set SESSION_LAMBDA_DYNAMODB_TABLE_NAME
env var:
export SESSION_LAMBDA_DYNAMODB_TABLE_NAME=<table-name>
Run the following python code:
from session_lambda import session, set_session_data, get_session_data
@session
def lambda_handler(event, context):
print(get_session_data())
set_session_data((get_session_data() or 0)+1)
return {"headers":{}}
response = lambda_handler({'headers':{}}, {})
session_id = response.get('headers').get('session-id')
lambda_handler({'headers':{'session-id':session_id}}, {})
lambda_handler({'headers':{'session-id':session_id}}, {})
lambda_handler({'headers':{'session-id':session_id}}, {})
lambda_handler({'headers':{}}, {})
You should get the following prints:
None
1
1
1
None
This time using the update=True
mode:
from session_lambda import session, set_session_data, get_session_data
@session(update=True)
def lambda_handler(event, context):
print(get_session_data())
set_session_data((get_session_data() or 0)+1)
return {"headers":{}}
response = lambda_handler({'headers':{}}, {})
session_id = response.get('headers').get('session-id')
lambda_handler({'headers':{'session-id':session_id}}, {})
lambda_handler({'headers':{'session-id':session_id}}, {})
lambda_handler({'headers':{'session-id':session_id}}, {})
lambda_handler({'headers':{}}, {})
Now you should see:
None
1
2
3
None
Features
@session(id_key_name='session-id', update=False, ttl=0)
def lambda_handler(event, context):
...
id_key_name
is the expected key name in the event[headers]
. It is default to session-id
. It is case-sensitive.update
flag control weather set_sessions_data
updates the data. It is default to False
.ttl
is seconds interval for the session to live (since the last update time). By default it is disabled. Any value larger then 0 will enable this feature. Make sure to set the TTL key name in your dynamodb to ttl
.
Future Features
- Support Schema validation for session data
Additional Inforamtion