{ "info": { "author": "Adrian Hornsby", "author_email": "hornsby.adrian@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries" ], "description": "\nChaos Injection for AWS Lambda - chaos_lambda\n======================================================\n\n|docs| |issues| |Maintenance| |Pypi| |Travis| |Coveralls| |twitter|\n\n.. |docs| image:: https://readthedocs.org/projects/aws-lambda-chaos-injection/badge/?version=latest\n :target: https://aws-lambda-chaos-injection.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. |twitter| image:: https://img.shields.io/twitter/url/https/github.com/adhorn/aws-lambda-chaos-injection?style=social\n :alt: Twitter\n :target: https://twitter.com/intent/tweet?text=Wow:&url=https%3A%2F%2Fgithub.com%2Fadhorn%2Faws-lambda-chaos-injection\n\n.. |issues| image:: https://img.shields.io/github/issues/adhorn/aws-lambda-chaos-injection\n :alt: Issues\n\n.. |Maintenance| image:: https://img.shields.io/badge/Maintained%3F-yes-green.svg\n :alt: Maintenance\n :target: https://GitHub.com/adhorn/aws-lambda-chaos-injection/graphs/commit-activity\n\n.. |Pypi| image:: https://badge.fury.io/py/chaos-lambda.svg\n :target: https://badge.fury.io/py/chaos-lambda\n\n.. |Travis| image:: https://api.travis-ci.org/adhorn/aws-lambda-chaos-injection.svg?branch=master\n :target: https://travis-ci.org/adhorn/aws-lambda-chaos-injection\n\n.. |Coveralls| image:: https://coveralls.io/repos/github/adhorn/aws-lambda-chaos-injection/badge.svg?branch=master\n :target: https://coveralls.io/github/adhorn/aws-lambda-chaos-injection?branch=master\n\n``chaos_lambda`` is a small library injecting chaos into `AWS Lambda\n`_.\nIt offers simple python decorators to do `delay`, `exception` and `statusCode` injection\nand a Class to add `delay` to any 3rd party dependencies called from your function.\nThis allows to conduct small chaos engineering experiments for your serverless application\nin the `AWS Cloud `_.\n\n* Support for Latency injection using ``delay``\n* Support for Exception injection using ``exception_msg``\n* Support for HTTP Error status code injection using ``error_code``\n* Using for SSM Parameter Store to control the experiment using ``isEnabled``\n* Support for adding rate of failure using ``rate``. (Default rate = 1)\n* Per Lambda function injection control using Environment variable (``CHAOS_PARAM``)\n\nInstall\n--------\n.. code:: shell\n\n pip install chaos-lambda\n\n\nExample\n--------\n.. code:: python\n\n # function.py\n\n import os\n from chaos_lambda import inject_delay, inject_exception, inject_statuscode\n\n # this should be set as a Lambda environment variable\n os.environ['CHAOS_PARAM'] = 'chaoslambda.config'\n\n @inject_exception\n def handler_with_exception(event, context):\n return {\n 'statusCode': 200,\n 'body': 'Hello from Lambda!'\n }\n\n\n @inject_exception(exception_type=TypeError, exception_msg='foobar')\n def handler_with_exception_arg(event, context):\n return {\n 'statusCode': 200,\n 'body': 'Hello from Lambda!'\n }\n\n @inject_exception(exception_type=ValueError)\n def handler_with_exception_arg_2(event, context):\n return {\n 'statusCode': 200,\n 'body': 'Hello from Lambda!'\n }\n\n\n @inject_statuscode\n def handler_with_statuscode(event, context):\n return {\n 'statusCode': 200,\n 'body': 'Hello from Lambda!'\n }\n\n @inject_statuscode(error_code=400)\n def handler_with_statuscode_arg(event, context):\n return {\n 'statusCode': 200,\n 'body': 'Hello from Lambda!'\n }\n\n @inject_delay\n def handler_with_delay(event, context):\n return {\n 'statusCode': 200,\n 'body': 'Hello from Lambda!'\n }\n\n @inject_delay(delay=1000)\n def handler_with_delay_arg(event, context):\n return {\n 'statusCode': 200,\n 'body': 'Hello from Lambda!'\n }\n\n\n @inject_delay(delay=0)\n def handler_with_delay_zero(event, context):\n return {\n 'statusCode': 200,\n 'body': 'Hello from Lambda!'\n }\n\n\nWhen excecuted, the Lambda function, e.g ``handler_with_exception('foo', 'bar')``, will produce the following result:\n\n.. code:: shell\n\n exception_msg from config I really failed seriously with a rate of 1\n corrupting now\n Traceback (most recent call last):\n File \"\", line 1, in \n File \"/.../chaos_lambda.py\", line 199, in wrapper\n raise Exception(exception_msg)\n Exception: I really failed seriously\n\nConfiguration\n-------------\nThe configuration for the failure injection is stored in the `AWS SSM Parameter Store\n`_ and accessed at runtime by the ``get_config()``\nfunction:\n\n.. code:: json\n\n {\n \"isEnabled\": true,\n \"delay\": 400,\n \"error_code\": 404,\n \"exception_msg\": \"I really failed seriously\",\n \"rate\": 1\n }\n\nTo store the above configuration into SSM using the `AWS CLI `_ do the following:\n\n.. code:: shell\n\n aws ssm put-parameter --region eu-north-1 --name chaoslambda.config --type String --overwrite --value \"{ \"delay\": 400, \"isEnabled\": true, \"error_code\": 404, \"exception_msg\": \"I really failed seriously\", \"rate\": 1 }\"\n\nAWS Lambda will need to have `IAM access to SSM `_.\n\n.. code:: json\n\n {\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"ssm:DescribeParameters\"\n ],\n \"Resource\": \"*\"\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"ssm:GetParameters\",\n \"ssm:GetParameter\"\n ],\n \"Resource\": \"arn:aws:ssm:eu-north-1:12345678910:parameter/chaoslambda.config\"\n }\n ]\n }\n\n\nSupported Decorators:\n---------------------\n``chaos_lambda`` currently supports the following decorators:\n\n* `@inject_delay` - add delay in the AWS Lambda execution\n* `@inject_exception` - Raise an exception during the AWS Lambda execution\n* `@inject_statuscode` - force AWS Lambda to return a specific HTTP error code\n\nand the following class:\n\n* `SessionWithDelay` - enabled to sub-classing requests library and call dependencies with delay\n\nMore information:\n-----------------\n\n\n\n`Full Documentation `_\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/adhorn/aws-lambda-chaos-injection", "keywords": "chaos engineering lambda decorator aws lambda", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "chaos-lambda", "package_url": "https://pypi.org/project/chaos-lambda/", "platform": "", "project_url": "https://pypi.org/project/chaos-lambda/", "project_urls": { "Homepage": "https://github.com/adhorn/aws-lambda-chaos-injection" }, "release_url": "https://pypi.org/project/chaos-lambda/0.2.4/", "requires_dist": [ "boto3", "future", "ssm-cache", "requests" ], "requires_python": "", "summary": "Decorators and Class to inject failures into AWS Lambda functions", "version": "0.2.4" }, "last_serial": 5943483, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "006d5c57643c80270621b400bc866b5a", "sha256": "a3d0c9dffdedea7ac82d200b85beb40fc90edc803958c6e4e2d05e12b3b14a6d" }, "downloads": -1, "filename": "chaos_lambda-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "006d5c57643c80270621b400bc866b5a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6915, "upload_time": "2019-07-17T11:59:23", "url": "https://files.pythonhosted.org/packages/91/a0/3f40aeb498e62196d91cff0c6942933face4fbd89bae29814a2e153eb54a/chaos_lambda-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef55bb16ca9e9913c5a07764f0921fbc", "sha256": "0c617e837d8a3fb5b75787a7e6415f4f55392a27daad00453eccb0985ad01df8" }, "downloads": -1, "filename": "chaos-lambda-0.1.2.tar.gz", "has_sig": false, "md5_digest": "ef55bb16ca9e9913c5a07764f0921fbc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4872, "upload_time": "2019-07-17T11:59:26", "url": "https://files.pythonhosted.org/packages/09/8f/d2cdd61730a385188d733f83cd0fc39b69cbd5bda6c057fc5d1f21ad42c4/chaos-lambda-0.1.2.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "b94f581ab52a383d4509a5763eba09ab", "sha256": "30c4ae594161eb5e82fd049231d1499de5000601c419c4c76f35a8a998f0d1ca" }, "downloads": -1, "filename": "chaos_lambda-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b94f581ab52a383d4509a5763eba09ab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7354, "upload_time": "2019-08-01T12:50:07", "url": "https://files.pythonhosted.org/packages/be/22/64edd3eae26b72900dcf3555cc4953c6c11fe9116f88b5c250bea158ff09/chaos_lambda-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "946720327be68a4cb6849fb6bd7698f6", "sha256": "277777364b3719aa9a49b43555035d9168f8304b1db39eecfbc246dda72f5170" }, "downloads": -1, "filename": "chaos-lambda-0.2.tar.gz", "has_sig": false, "md5_digest": "946720327be68a4cb6849fb6bd7698f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5225, "upload_time": "2019-08-01T12:50:09", "url": "https://files.pythonhosted.org/packages/a0/a1/bf60516c8047ffb0f191935f35fa8541e5db3ccb2720066899d1bea9a453/chaos-lambda-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "5e57e59a8d4987593731f9170d4e4cff", "sha256": "237952cc96c2e36dbd8b7b65f6adffff572c1bc3f4872c65b9836ef068d73e14" }, "downloads": -1, "filename": "chaos_lambda-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5e57e59a8d4987593731f9170d4e4cff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7396, "upload_time": "2019-08-05T07:36:41", "url": "https://files.pythonhosted.org/packages/ec/25/2e5ff0e56d353047e106433aa8b5139b94cf44aa05d9571095b21a48869a/chaos_lambda-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c064912eb776ebfae82086ca6e8d02c7", "sha256": "9060160d91ebae8a34560dc37374fc6298fa1f5724ce9c5f727778fe93d7b793" }, "downloads": -1, "filename": "chaos-lambda-0.2.1.tar.gz", "has_sig": false, "md5_digest": "c064912eb776ebfae82086ca6e8d02c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5247, "upload_time": "2019-08-05T07:36:43", "url": "https://files.pythonhosted.org/packages/9f/8b/440c3e98eff3c1c839fcbc82fe3809aa113ea5b2ac77fa3ce707c81fc64f/chaos-lambda-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "9a3072243de689313ff71afcda896c6d", "sha256": "1c5a5ba96ffe4027fcec20b2acc727500d23edefea26c5ce3fb6b1d604f7e7b8" }, "downloads": -1, "filename": "chaos_lambda-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9a3072243de689313ff71afcda896c6d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8074, "upload_time": "2019-09-15T14:56:35", "url": "https://files.pythonhosted.org/packages/e9/e3/a1234f67c533994543182032aea4071165fd5fb5eaf437aee94bc532370a/chaos_lambda-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0338194b4af137f775e8304f4cf9d734", "sha256": "3601b4b426318b82637b903494ea0a86bf3a40f7b6f97977d403653bf72529dc" }, "downloads": -1, "filename": "chaos-lambda-0.2.2.tar.gz", "has_sig": false, "md5_digest": "0338194b4af137f775e8304f4cf9d734", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5716, "upload_time": "2019-09-15T14:56:37", "url": "https://files.pythonhosted.org/packages/fe/76/18aca44d3641f9940616642d6ec74d9944dbc2c30f7db09fcd12322f83a6/chaos-lambda-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "a88cf6f57ccd3ab0f4fa76b38f5cf329", "sha256": "0c86f1f263be24151698c028d075eaa6c41bcc048ed0320828e905b0ff8929c0" }, "downloads": -1, "filename": "chaos_lambda-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a88cf6f57ccd3ab0f4fa76b38f5cf329", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8090, "upload_time": "2019-09-16T08:36:26", "url": "https://files.pythonhosted.org/packages/06/a9/9af50e7183b8a4f7825159fed7974b447b12130bca06f1933c12130f9f10/chaos_lambda-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6aa725e09f0966d3ba458de0f9d26ddc", "sha256": "0eb102159c6beaee001eb3b6ff2f7adc7db41580afde06d905c6de59eb9f9367" }, "downloads": -1, "filename": "chaos-lambda-0.2.3.tar.gz", "has_sig": false, "md5_digest": "6aa725e09f0966d3ba458de0f9d26ddc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5758, "upload_time": "2019-09-16T08:36:28", "url": "https://files.pythonhosted.org/packages/22/b9/26cc878f2a5220d2b3625508fab5fedf92cc26a1ccaaecd22476a8e4dad5/chaos-lambda-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "a8d3db7c6302e7ec769c03e9c3316317", "sha256": "6cf4d37ae93b94c93c31365564bae942f6734e7035c9d9cff490e633b571bcee" }, "downloads": -1, "filename": "chaos_lambda-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a8d3db7c6302e7ec769c03e9c3316317", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8085, "upload_time": "2019-10-08T08:03:05", "url": "https://files.pythonhosted.org/packages/1c/b4/73407cdc408a3e6f471014cc4a9833dc5de697ea727b27c213a32f48f16d/chaos_lambda-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5cc8782e205e5ff412902915e6b1ecb3", "sha256": "2a247449cdfe5b34cb76499494ba72cf5feadf05d9af111abb1a65616e801a30" }, "downloads": -1, "filename": "chaos-lambda-0.2.4.tar.gz", "has_sig": false, "md5_digest": "5cc8782e205e5ff412902915e6b1ecb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5768, "upload_time": "2019-10-08T08:03:07", "url": "https://files.pythonhosted.org/packages/64/4f/c13aa186250c4294eb758f4f0a0e440b9bb51ae17a049d0c8e6c87021b1c/chaos-lambda-0.2.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a8d3db7c6302e7ec769c03e9c3316317", "sha256": "6cf4d37ae93b94c93c31365564bae942f6734e7035c9d9cff490e633b571bcee" }, "downloads": -1, "filename": "chaos_lambda-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a8d3db7c6302e7ec769c03e9c3316317", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8085, "upload_time": "2019-10-08T08:03:05", "url": "https://files.pythonhosted.org/packages/1c/b4/73407cdc408a3e6f471014cc4a9833dc5de697ea727b27c213a32f48f16d/chaos_lambda-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5cc8782e205e5ff412902915e6b1ecb3", "sha256": "2a247449cdfe5b34cb76499494ba72cf5feadf05d9af111abb1a65616e801a30" }, "downloads": -1, "filename": "chaos-lambda-0.2.4.tar.gz", "has_sig": false, "md5_digest": "5cc8782e205e5ff412902915e6b1ecb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5768, "upload_time": "2019-10-08T08:03:07", "url": "https://files.pythonhosted.org/packages/64/4f/c13aa186250c4294eb758f4f0a0e440b9bb51ae17a049d0c8e6c87021b1c/chaos-lambda-0.2.4.tar.gz" } ] }