Decorators and Class to inject failures into AWS Lambda functions
Project description
chaos_lambda is a small library injecting chaos into AWS Lambda. It offers simple python decorators to do delay, exception and statusCode injection and a Class to add delay to any 3rd party dependencies called from your function. This allows to conduct small chaos engineering experiments for your serverless application in the AWS Cloud.
- Support for Latency injection using delay
- Support for Exception injection using exception_msg
- Support for HTTP Error status code injection using error_code
- Using for SSM Parameter Store to control the experiment using isEnabled
- Support for adding rate of failure using rate. (Default rate = 1)
- Per Lambda function injection control using Environment variable (CHAOS_PARAM)
Install
pip install chaos-lambda
Example
# function.py import os from chaos_lambda import inject_fault # this should be set as a Lambda environment variable os.environ['CHAOS_PARAM'] = 'chaoslambda.config' @inject_fault def handler(event, context): return { 'statusCode': 200, 'body': 'Hello from Lambda!' }
Considering a configuration as follows:
{ "fault_type": "exception", "delay": 400, "is_enabled": true, "error_code": 404, "exception_msg": "This is chaos", "rate": 1 }
When excecuted, the Lambda function, e.g handler('foo', 'bar'), will produce the following result:
exception_msg from config chaos with a rate of 1 corrupting now Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/.../chaos_lambda.py", line 199, in wrapper raise Exception(exception_msg) Exception: This is chaos
Configuration
The configuration for the failure injection is stored in the AWS SSM Parameter Store and accessed at runtime by the get_config() function:
{ "fault_type": "exception", "delay": 400, "is_enabled": true, "error_code": 404, "exception_msg": "This is chaos", "rate": 1 }
To store the above configuration into SSM using the AWS CLI do the following:
aws ssm put-parameter --name chaoslambda.config --type String --overwrite --value "{ "delay": 400, "is_enabled": true, "error_code": 404, "exception_msg": "This is chaos", "rate": 1, "fault_type": "exception"}" --region eu-west-1
AWS Lambda will need to have IAM access to SSM.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:DescribeParameters" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:GetParameters", "ssm:GetParameter" ], "Resource": "arn:aws:ssm:eu-north-1:12345678910:parameter/chaoslambda.config" } ] }
Supported Decorators:
chaos_lambda currently supports the following faults:
- latency - Add latency in the AWS Lambda execution
- exception - Raise an exception during the AWS Lambda execution
- status_code - force AWS Lambda to return a specific HTTP error code
More information:
Project details
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
Hashes for chaos_lambda-0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27f88bbb2c8e1017033eac3659b916a5f96c24133f684d4085a65407c1ad7fc1 |
|
MD5 | a523ec22b8af2b717b0ba7f85f2883b1 |
|
BLAKE2-256 | 0a5d2839f70b809b2114422cbc5fa36861c411fd221f2ee5a63c0271a67c437c |