Skip to main content

Decorators and Class to inject failures into AWS Lambda functions

Project description

Documentation Status Issues Maintenance Pypi Travis Coveralls Twitter

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:

Full Documentation

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

chaos-lambda-0.3.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

chaos_lambda-0.3-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file chaos-lambda-0.3.tar.gz.

File metadata

  • Download URL: chaos-lambda-0.3.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/3.10.0 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.7.8

File hashes

Hashes for chaos-lambda-0.3.tar.gz
Algorithm Hash digest
SHA256 fb9196f59604711aa55f23878200963cbb5881e940729bf39e03e0d23eeb1782
MD5 b156824383c89def8ba01583abe909a6
BLAKE2b-256 3f873eac6aa9ca15a854288eb3c62b641220318da883b15eb70b08c49990354f

See more details on using hashes here.

File details

Details for the file chaos_lambda-0.3-py3-none-any.whl.

File metadata

  • Download URL: chaos_lambda-0.3-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/3.10.0 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.7.8

File hashes

Hashes for chaos_lambda-0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 27f88bbb2c8e1017033eac3659b916a5f96c24133f684d4085a65407c1ad7fc1
MD5 a523ec22b8af2b717b0ba7f85f2883b1
BLAKE2b-256 0a5d2839f70b809b2114422cbc5fa36861c411fd221f2ee5a63c0271a67c437c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page