From 9127544b35b48e1b10a8f636129ff36ba252971b Mon Sep 17 00:00:00 2001 From: Riyan Imam Date: Sat, 6 Apr 2024 17:16:36 -0400 Subject: [PATCH 1/9] ci(pipeline): Adding In Base Jobs To Pipeline --- .github/workflows/ci.yml | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c6d9063..62cebb1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,6 @@ # This is a basic workflow to help you get started with Actions -name: CI +name: quick-actions-aws-lambda-template-ci # Controls when the workflow will run on: @@ -16,21 +16,34 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on + python_lint: runs-on: ubuntu-latest - # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 - # Runs a single command using the runners shell - - name: Run a one-line script - run: echo Hello, world! - - # Runs a set of commands using the runners shell - - name: Run a multi-line script + - name: Python Lint run: | - echo Add other actions to build, - echo test, and deploy your project. + pip install -r python/test/requirements.txt + ruff check python/ + + # # This workflow contains a single job called "build" + # build: + # # The type of runner that the job will run on + # runs-on: ubuntu-latest + + # # Steps represent a sequence of tasks that will be executed as part of the job + # steps: + # # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + # - uses: actions/checkout@v3 + + # # Runs a single command using the runners shell + # - name: Run a one-line script + # run: echo Hello, world! + + # # Runs a set of commands using the runners shell + # - name: Run a multi-line script + # run: | + # echo Add other actions to build, + # echo test, and deploy your project. From 3d7b24609f0ad7fce0686bf20a5071b23a545382 Mon Sep 17 00:00:00 2001 From: Riyan Imam Date: Sat, 6 Apr 2024 17:23:09 -0400 Subject: [PATCH 2/9] ci(pipeline): Adding In Base Jobs To Pipeline --- .github/workflows/ci.yml | 40 +++++++++------------------------------- 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 62cebb1..7831146 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,49 +1,27 @@ -# This is a basic workflow to help you get started with Actions - name: quick-actions-aws-lambda-template-ci -# Controls when the workflow will run on: - # Triggers the workflow on push or pull request events but only for the "main" branch push: branches: [main] pull_request: branches: [main] - - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: -# A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - # This workflow contains a single job called "build" python_lint: runs-on: ubuntu-latest - # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 - - name: Python Lint run: | pip install -r python/test/requirements.txt ruff check python/ - - # # This workflow contains a single job called "build" - # build: - # # The type of runner that the job will run on - # runs-on: ubuntu-latest - - # # Steps represent a sequence of tasks that will be executed as part of the job - # steps: - # # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - # - uses: actions/checkout@v3 - - # # Runs a single command using the runners shell - # - name: Run a one-line script - # run: echo Hello, world! - - # # Runs a set of commands using the runners shell - # - name: Run a multi-line script - # run: | - # echo Add other actions to build, - # echo test, and deploy your project. + python_format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Python Format + run: | + pip install -r python/test/requirements.txt + ruff format python/ --check + From 4396b5054f25e8daffd9777c0a22249b35654a3a Mon Sep 17 00:00:00 2001 From: Riyan Imam Date: Sat, 6 Apr 2024 17:56:06 -0400 Subject: [PATCH 3/9] ci(pipeline): Adding In Base Jobs To Pipeline --- .github/workflows/ci.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7831146..f56658b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,7 @@ on: workflow_dispatch: jobs: + python_lint: runs-on: ubuntu-latest steps: @@ -16,6 +17,7 @@ jobs: run: | pip install -r python/test/requirements.txt ruff check python/ + python_format: runs-on: ubuntu-latest steps: @@ -24,4 +26,36 @@ jobs: run: | pip install -r python/test/requirements.txt ruff format python/ --check + + terraform_format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Terraform Format + run: | + terraform fmt terraform/ -check + + yaml_lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: YAML Lint + run: | + pip install -r python/test/requirements.txt + + yaml_format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: YAML Format + run: | + pip install -r python/test/requirements.txt + + markdown_format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Markdown Format + run: | + pip install -r python/test/requirements.txt From d0d7b15295173147f982a5dc7619825f885891ec Mon Sep 17 00:00:00 2001 From: Riyan Imam Date: Sat, 6 Apr 2024 17:56:24 -0400 Subject: [PATCH 4/9] ci(pipeline): Adding In Base Jobs To Pipeline --- .github/workflows/ci.yml | 2 +- config/.yamllint.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f56658b..9bffc73 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,4 +58,4 @@ jobs: - name: Markdown Format run: | pip install -r python/test/requirements.txt - + diff --git a/config/.yamllint.yaml b/config/.yamllint.yaml index 7712f7a..16addfa 100644 --- a/config/.yamllint.yaml +++ b/config/.yamllint.yaml @@ -4,4 +4,4 @@ rules: line-length: max: 500 level: warning - new-lines: disable \ No newline at end of file + new-lines: disable From 96d646548acc9d809b753ca875c6331088369d3e Mon Sep 17 00:00:00 2001 From: Riyan Imam Date: Fri, 20 Sep 2024 16:51:51 -0400 Subject: [PATCH 5/9] ci(pipeline): Adding In Base Jobs To Pipeline --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9bffc73..9090025 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,6 @@ on: workflow_dispatch: jobs: - python_lint: runs-on: ubuntu-latest steps: From e5f183370496e4f5c4190f208366fe04060238da Mon Sep 17 00:00:00 2001 From: Riyan Imam Date: Fri, 20 Sep 2024 16:57:15 -0400 Subject: [PATCH 6/9] ci(pipeline): Adding In Base Jobs To Pipeline --- .github/workflows/ci.yml | 6 +----- python/test/test_base_lambda.py | 0 2 files changed, 1 insertion(+), 5 deletions(-) create mode 100644 python/test/test_base_lambda.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9090025..a3ce575 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ on: workflow_dispatch: jobs: - python_lint: + scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -16,10 +16,6 @@ jobs: run: | pip install -r python/test/requirements.txt ruff check python/ - - python_format: - runs-on: ubuntu-latest - steps: - uses: actions/checkout@v3 - name: Python Format run: | diff --git a/python/test/test_base_lambda.py b/python/test/test_base_lambda.py new file mode 100644 index 0000000..e69de29 From 53ed4412e9434772ef7871b71dbb988df79c908d Mon Sep 17 00:00:00 2001 From: Riyan Imam Date: Fri, 20 Sep 2024 16:57:51 -0400 Subject: [PATCH 7/9] ci(pipeline): Adding In Base Jobs To Pipeline --- .github/workflows/ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a3ce575..9090025 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ on: workflow_dispatch: jobs: - scan: + python_lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -16,6 +16,10 @@ jobs: run: | pip install -r python/test/requirements.txt ruff check python/ + + python_format: + runs-on: ubuntu-latest + steps: - uses: actions/checkout@v3 - name: Python Format run: | From 049c85327855b7a164521e11a8dc15a67629b1da Mon Sep 17 00:00:00 2001 From: Riyan Imam Date: Fri, 6 Jun 2025 19:33:11 -0400 Subject: [PATCH 8/9] feat(base-project): Adding In Base Project Structure --- .github/workflows/ci.yml | 87 ++++++---- .gitignore | 10 ++ .vscode/settings.json | 7 + README.md | 157 ++++++++++++++++++ python/src/base_lambda.py | 45 ++++- python/src/requirements.txt | 2 + ...t_base_lambda.cpython-311-pytest-8.1.1.pyc | Bin 0 -> 11902 bytes python/test/requirements.txt | 1 + python/test/test_base_lambda.py | 121 ++++++++++++++ terraform/iam_lambda.tf | 25 +++ terraform/lambda.tf | 48 ++++++ 11 files changed, 466 insertions(+), 37 deletions(-) create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 python/test/__pycache__/test_base_lambda.cpython-311-pytest-8.1.1.pyc diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9090025..be654be 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,53 +8,68 @@ on: workflow_dispatch: jobs: - python_lint: + code-quality: + name: Code Quality runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Python Lint - run: | - pip install -r python/test/requirements.txt - ruff check python/ - python_format: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Python Format - run: | - pip install -r python/test/requirements.txt - ruff format python/ --check + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' - terraform_format: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Terraform Format - run: | - terraform fmt terraform/ -check + - name: Install Python dependencies + run: pip install ruff ruff-lsp - yaml_lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: YAML Lint + - name: Lint Python with Ruff + run: ruff check python/ + + - name: Check Python formatting with Ruff Format + run: ruff format python/ --check + + - name: Set up Terraform + uses: hashicorp/setup-terraform@v3 + + - name: Check Terraform formatting + run: terraform fmt terraform/ -check + + - name: Install yamllint and toml + run: pip install yamllint toml + + - name: Lint TOML files run: | - pip install -r python/test/requirements.txt + for file in $(find . -name "*.toml"); do + python -c "import toml; toml.load(open('$file'))" || exit 1 + done - yaml_format: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: YAML Format + - name: Lint YAML files + run: yamllint . + + - name: Format YAML files (check only) + run: echo "No standard YAML formatter in check mode; skipping." + + - name: Format Markdown files (check only) run: | - pip install -r python/test/requirements.txt + pip install mdformat + mdformat --check . - markdown_format: + terraform: + name: Terraform runs-on: ubuntu-latest + needs: code-quality steps: - uses: actions/checkout@v3 - - name: Markdown Format - run: | - pip install -r python/test/requirements.txt + - name: Set up Terraform + uses: hashicorp/setup-terraform@v3 + + - name: Terraform Init + run: terraform -chdir=terraform/ init + + - name: Terraform Plan + run: terraform -chdir=terraform/ plan + + - name: Terraform Apply + if: github.ref == 'refs/heads/main' + run: terraform -chdir=terraform/ apply -auto-approve diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0a7d93d --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +node_modules +/.nova +.DS_Store +package-lock.json +.venv +.pytest_cache +.ruff_cache +.vscode +# Ignore Python bytecode files +__pycache__/ \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ca73e53 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "python.testing.pytestArgs": [ + "python" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true +} \ No newline at end of file diff --git a/README.md b/README.md index f27a261..a40404a 100644 --- a/README.md +++ b/README.md @@ -1 +1,158 @@ # quick-actions-aws-lambda-template + +A template project for deploying AWS Lambda functions with best practices, infrastructure-as-code (Terraform), and automated code quality checks using GitHub Actions. + +______________________________________________________________________ + +## Features + +- **AWS Lambda Function**: Python 3.12 Lambda with event source mapping (SQS trigger). +- **Infrastructure as Code**: All AWS resources (Lambda, IAM, SQS, CloudWatch Logs) managed via Terraform. +- **CI/CD**: GitHub Actions pipeline for linting, formatting, and Terraform plan/apply. +- **Code Quality**: Python linting and formatting (ruff), TOML and YAML linting, Markdown formatting. +- **Best Practices**: Environment variables, tagging, log retention, and least-privilege IAM. + +______________________________________________________________________ + +## Project Structure + +``` +. +├── python/ +│ └── src/ +│ └── base_lambda.py # Lambda function source code +├── terraform/ +│ └── lambda.tf # Terraform for Lambda, IAM, SQS, etc. +├── .github/ +│ └── workflows/ +│ └── ci.yml # GitHub Actions pipeline +├── README.md +``` + +______________________________________________________________________ + +## Lambda Function + +The Lambda function (`base_lambda.py`) provides utility actions via AWS APIs: + +- Delete another Lambda function +- Redrive messages from an SQS DLQ +- Get ECR login and repository URI + +The handler expects an event with a key indicating the action to perform. + +______________________________________________________________________ + +## Infrastructure + +Terraform provisions: + +- **Lambda Function** (`example_lambda`) +- **IAM Role** for Lambda execution +- **CloudWatch Log Group** for Lambda logs +- **SQS Queue** as event source +- **Event Source Mapping** between SQS and Lambda + +All resources are tagged for project and environment tracking. + +______________________________________________________________________ + +## CI/CD Pipeline + +GitHub Actions workflow (`ci.yml`) includes: + +### Code Quality Stage + +- Lint Python with Ruff +- Check Python formatting with Ruff Format +- Check Terraform formatting +- Lint TOML files +- Lint YAML files +- Check Markdown formatting + +### Terraform Stage + +- Terraform init, plan, and apply (on main branch) + +______________________________________________________________________ + +## Getting Started + +### Prerequisites + +- [Python 3.12+](https://www.python.org/) +- [Terraform](https://www.terraform.io/) +- [AWS CLI](https://aws.amazon.com/cli/) +- Docker (for packaging Lambda, if needed) + +### Setup + +1. **Clone the repository** + + ```sh + git clone https://github.com/your-org/quick-actions-aws-lambda-template.git + cd quick-actions-aws-lambda-template + ``` + +1. **Install Python dependencies** + + ```sh + pip install -r requirements.txt + ``` + +1. **Build Lambda deployment package** + + ```sh + mkdir -p build + cd python/src + zip -r ../../build/example_lambda.zip . + cd ../../ + ``` + +1. **Initialize and apply Terraform** + + ```sh + cd terraform + terraform init + terraform apply + ``` + +______________________________________________________________________ + +## Usage + +The Lambda function expects an event with a key indicating the action, for example: + +```json +{ + "body": "{\"event\": \"delete_lambda_function\", \"function_name\": \"target_lambda\"}" +} +``` + +Supported events: + +- `delete_lambda_function` +- `redrive_sqs_dlq` +- `get_ecr_login_and_repo_uri` + +Update the Lambda code to handle your specific use cases. + +______________________________________________________________________ + +## Customization + +- **Add more Lambda actions** in `base_lambda.py` +- **Adjust Terraform** for additional AWS resources or permissions +- **Modify CI pipeline** in `.github/workflows/ci.yml` for your team's standards + +______________________________________________________________________ + +## License + +MIT License + +______________________________________________________________________ + +## Authors + +- [Riyan Imam](https://github.com/riyanimam) diff --git a/python/src/base_lambda.py b/python/src/base_lambda.py index d34c941..ef33bfd 100644 --- a/python/src/base_lambda.py +++ b/python/src/base_lambda.py @@ -1,5 +1,7 @@ from aws_lambda_powertools.shared.types import JSONType from aws_lambda_powertools.utilities.typing import LambdaContext +import json +import boto3 from botocore.config import Config @@ -10,5 +12,46 @@ ) +def delete_lambda_function(function_name: str): + client = boto3.client("lambda", config=aws_client_config) + response = client.delete_function(FunctionName=function_name) + return response + + +def redrive_sqs_dlq(source_queue_url: str, dlq_url: str, max_messages: int = 10): + sqs = boto3.client("sqs", config=aws_client_config) + messages = sqs.receive_message( + QueueUrl=dlq_url, MaxNumberOfMessages=max_messages, WaitTimeSeconds=2 + ).get("Messages", []) + + for msg in messages: + sqs.send_message(QueueUrl=source_queue_url, MessageBody=msg["Body"]) + sqs.delete_message(QueueUrl=dlq_url, ReceiptHandle=msg["ReceiptHandle"]) + return {"redriven": len(messages)} + + +def get_ecr_login_and_repo_uri(repository_name: str): + ecr = boto3.client("ecr", config=aws_client_config) + auth = ecr.get_authorization_token() + repo = ecr.describe_repositories(repositoryNames=[repository_name]) + repo_uri = repo["repositories"][0]["repositoryUri"] + token = auth["authorizationData"][0]["authorizationToken"] + proxy_endpoint = auth["authorizationData"][0]["proxyEndpoint"] + return { + "repository_uri": repo_uri, + "auth_token": token, + "proxy_endpoint": proxy_endpoint, + } + + def lambda_handler(payload: JSONType, context: LambdaContext): - return + event = json.loads(payload["body"]) + + if event == "delete_lambda_function": + delete_lambda_function("function_name_here") + elif event == "redrive_sqs_dlq": + redrive_sqs_dlq("source_queue_url_here", "dlq_url_here") + elif event == "get_ecr_login_and_repo_uri": + get_ecr_login_and_repo_uri("repository_name_here") + else: + return "Invalid or no event received" diff --git a/python/src/requirements.txt b/python/src/requirements.txt index e69de29..abc7d7b 100644 --- a/python/src/requirements.txt +++ b/python/src/requirements.txt @@ -0,0 +1,2 @@ +boto3 +json \ No newline at end of file diff --git a/python/test/__pycache__/test_base_lambda.cpython-311-pytest-8.1.1.pyc b/python/test/__pycache__/test_base_lambda.cpython-311-pytest-8.1.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc6212ba7e7f8859d379190bb79e17d4621954d6 GIT binary patch literal 11902 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 z Date: Fri, 6 Jun 2025 19:37:12 -0400 Subject: [PATCH 9/9] feat(base-project): Adding In Base Project Structure --- .github/workflows/ci.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index be654be..f71973d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: done - name: Lint YAML files - run: yamllint . + run: yamllint . -c=./config/.yamllint.yaml - name: Format YAML files (check only) run: echo "No standard YAML formatter in check mode; skipping." @@ -54,22 +54,22 @@ jobs: pip install mdformat mdformat --check . - terraform: - name: Terraform - runs-on: ubuntu-latest - needs: code-quality - steps: - - uses: actions/checkout@v3 + # terraform: + # name: Terraform + # runs-on: ubuntu-latest + # needs: code-quality + # steps: + # - uses: actions/checkout@v3 - - name: Set up Terraform - uses: hashicorp/setup-terraform@v3 + # - name: Set up Terraform + # uses: hashicorp/setup-terraform@v3 - - name: Terraform Init - run: terraform -chdir=terraform/ init + # - name: Terraform Init + # run: terraform -chdir=terraform/ init - - name: Terraform Plan - run: terraform -chdir=terraform/ plan + # - name: Terraform Plan + # run: terraform -chdir=terraform/ plan - - name: Terraform Apply - if: github.ref == 'refs/heads/main' - run: terraform -chdir=terraform/ apply -auto-approve + # - name: Terraform Apply + # if: github.ref == 'refs/heads/main' + # run: terraform -chdir=terraform/ apply -auto-approve