{"id":26902074,"url":"https://github.com/jsabo/aws-lambda-failure-flag-app","last_synced_at":"2025-07-08T15:05:25.581Z","repository":{"id":284856866,"uuid":"956282197","full_name":"jsabo/aws-lambda-failure-flag-app","owner":"jsabo","description":"This project demonstrates how to integrate Gremlin Failure Flags into an AWS Lambda function, enabling you to simulate injected latency and exceptions while measuring processing performance. It’s a serverless demo for testing resiliency and fault injection in real-world cloud environments.","archived":false,"fork":false,"pushed_at":"2025-05-10T17:43:21.000Z","size":20,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-08T15:05:24.755Z","etag":null,"topics":["aws","chaos-engineering","gremlin","lambda","performance-testing","reliability-engineering"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsabo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-28T01:57:20.000Z","updated_at":"2025-05-10T17:43:24.000Z","dependencies_parsed_at":"2025-03-28T03:22:50.310Z","dependency_job_id":"f3867c60-0512-4029-9181-eb48237fee60","html_url":"https://github.com/jsabo/aws-lambda-failure-flag-app","commit_stats":null,"previous_names":["jsabo/aws-lambda-failure-flag-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jsabo/aws-lambda-failure-flag-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsabo%2Faws-lambda-failure-flag-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsabo%2Faws-lambda-failure-flag-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsabo%2Faws-lambda-failure-flag-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsabo%2Faws-lambda-failure-flag-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsabo","download_url":"https://codeload.github.com/jsabo/aws-lambda-failure-flag-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsabo%2Faws-lambda-failure-flag-app/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264292934,"owners_count":23586061,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","chaos-engineering","gremlin","lambda","performance-testing","reliability-engineering"],"created_at":"2025-04-01T09:09:20.585Z","updated_at":"2025-07-08T15:05:25.575Z","avatar_url":"https://github.com/jsabo.png","language":"HCL","readme":"# Gremlin Failure Flags AWS Lambda Demo\n\nThis demo illustrates how to integrate **Gremlin Failure Flags** into an **AWS Lambda** function. It demonstrates fault injection scenarios, including latency and exceptions, helping developers, DevOps engineers, and Site Reliability Engineers (SREs) validate and improve resilience in serverless applications.\n\n## Overview\n\n* **AWS Lambda Function**:\n\n  * Python 3.9 function measuring request processing latency.\n  * Demonstrates fault injection via Gremlin Failure Flags (`http-ingress`).\n\n* **Fault Injection Capabilities**:\n\n  * Simulate network latency, exceptions, and errors.\n  * Results are visible in the returned JSON response.\n\n* **Infrastructure Deployment**:\n\n  * Uses Terraform for deployment.\n  * Integrates Lambda function with AWS API Gateway (HTTP API).\n  * Loads sensitive Gremlin credentials securely from local files.\n\n## Prerequisites\n\nEnsure the following prerequisites are met:\n\n| Requirement         | Description                                               |\n| ------------------- | --------------------------------------------------------- |\n| **Docker**          | For packaging the Lambda function                         |\n| **Terraform**       | Version ≥ 1.0 recommended                                 |\n| **AWS CLI**         | Configured with appropriate permissions                   |\n| **Gremlin Account** | Credentials (Team ID, Certificate, Private Key) available |\n\n## Getting Started\n\n### Build Lambda Function\n\nBuild your Lambda function package using Docker:\n\n```sh\nexport DOCKER_SCAN_SUGGEST=false\ndocker build -t lambda-packager . \u0026\u0026 \\\n  docker run --rm lambda-packager cat /LambdaFunction.zip \u003e LambdaFunction.zip\n```\n\n### Prepare Gremlin Credentials\n\nRemove whitespace and newlines from downloaded credentials:\n\n```sh\ntr -d \"\\n\\r\" \u003c ~/Downloads/\u003cYOUR_TEAM_NAME\u003e/\u003cYOUR_TEAM_NAME\u003e.pub_cert.pem \u003e gremlin_team_certificate.pem\ntr -d \"\\n\\r\" \u003c ~/Downloads/\u003cYOUR_TEAM_NAME\u003e/\u003cYOUR_TEAM_NAME\u003e.priv_key.pem \u003e gremlin_team_private_key.pem\n```\n\nCopy and sanitize Gremlin Team ID:\n\n```sh\npbpaste | tr -d \"\\n\\r\" \u003e gremlin_team_id.txt\n```\n\n### Terraform Deployment\n\nYour project directory should contain:\n\n* `LambdaFunction.zip`\n* `gremlin_team_id.txt`\n* `gremlin_team_certificate.pem`\n* `gremlin_team_private_key.pem`\n\n**Deploy using Terraform:**\n\n```sh\nterraform init\nterraform apply --auto-approve\n```\n\n## Terraform Configuration\n\nSample Terraform setup for AWS Lambda and Gremlin integration:\n\n```hcl\ndata \"local_file\" \"gremlin_team_id\" {\n  filename = var.gremlin_team_id_path\n}\n\ndata \"local_sensitive_file\" \"gremlin_team_certificate\" {\n  filename = var.gremlin_team_certificate_path\n}\n\ndata \"local_sensitive_file\" \"gremlin_team_private_key\" {\n  filename = var.gremlin_team_private_key_path\n}\n\nresource \"aws_lambda_function\" \"app\" {\n  function_name    = var.lambda_name\n  description      = \"AWS Lambda with Gremlin Failure Flags\"\n  filename         = \"${path.module}/${var.zipfile}\"\n  source_code_hash = data.local_file.lambda_zip.content_sha256\n  runtime          = \"python3.9\"\n  handler          = \"LambdaFunction.handler\"\n  role             = aws_iam_role.lambda_exec.arn\n\n  layers = [var.gremlin_layer_arn]\n\n  environment {\n    variables = {\n      FAILURE_FLAGS_ENABLED    = \"true\"\n      GREMLIN_LAMBDA_ENABLED   = \"true\"\n      GREMLIN_DEBUG            = \"true\"\n      GREMLIN_TEAM_ID          = data.local_file.gremlin_team_id.content\n      GREMLIN_TEAM_CERTIFICATE = data.local_sensitive_file.gremlin_team_certificate.content\n      GREMLIN_TEAM_PRIVATE_KEY = data.local_sensitive_file.gremlin_team_private_key.content\n    }\n  }\n\n  depends_on = [aws_cloudwatch_log_group.lambda_log]\n}\n```\n\n## How It Works\n\n* **Lambda Function Execution:**\n\n  * Captures start time.\n  * Invokes Gremlin Failure Flags SDK.\n  * Calculates total processing time.\n  * Returns JSON with details of fault injection status and latency.\n\n* **Gremlin Integration:**\n\n  * Invokes `http-ingress` failure flag.\n  * Displays injected faults in the function response.\n\n* **AWS X-Ray:**\n\n  * Enabled automatically for enhanced tracing and monitoring.\n\n## Usage\n\nInvoke your API Gateway endpoint. Response includes:\n\n* **processingTime**: Execution duration (ms).\n* **isActive / isImpacted**: Status of Gremlin fault injection.\n* **timestamp**: Invocation timestamp.\n\n## Fault Injection Examples\n\n| Fault Type              | Effect Example                                                                                                                                        |\n| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Latency Injection**   | `{ \"latency\": { \"ms\": 1000, \"jitter\": 0 } }`                                                                                                          |\n| **Built-in Exception**  | `{ \"exception\": { \"className\": \"ValueError\", \"message\": \"Injected ValueError\", \"module\": \"builtins\" } }`                                              |\n| **S3 Connection Error** | `{ \"exception\": { \"className\": \"S3TransferFailedError\", \"message\": \"Simulated connection error during S3 transfer\", \"module\": \"boto3.exceptions\" } }` |\n| **Socket Timeout**      | `{ \"exception\": { \"className\": \"TimeoutError\", \"message\": \"Socket operation timed out\", \"module\": \"socket\" } }`                                       |\n\n## Cleanup\n\nRemove deployed resources using Terraform:\n\n```sh\nterraform destroy --auto-approve\n```\n\n## Additional Resources\n\n* [Gremlin Failure Flags Docs](https://www.gremlin.com/docs/failure-flags-overview)\n* [Gremlin AWS Lambda Deployment](https://www.gremlin.com/docs/failure-flags-lambda)\n* [AWS Lambda Developer Guide](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)\n* [Terraform AWS Provider Docs](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsabo%2Faws-lambda-failure-flag-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsabo%2Faws-lambda-failure-flag-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsabo%2Faws-lambda-failure-flag-app/lists"}