Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/satyamsoni2211/lambdawarmerpy
Python Utility package to warm up Lambda instances to overcome cold start issue. https://pypi.org/project/py-lambda-warmer/
https://github.com/satyamsoni2211/lambdawarmerpy
aws aws-lambda aws-sam lambda-function lambda-functions lambda-warmer lambdas py-lambda-warmer python3 sam serverless serverless-application-model serverless-architectures warming
Last synced: 2 days ago
JSON representation
Python Utility package to warm up Lambda instances to overcome cold start issue. https://pypi.org/project/py-lambda-warmer/
- Host: GitHub
- URL: https://github.com/satyamsoni2211/lambdawarmerpy
- Owner: satyamsoni2211
- License: mit
- Created: 2022-05-17T12:05:17.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2022-12-09T06:43:32.000Z (about 2 years ago)
- Last Synced: 2024-11-20T10:52:45.319Z (about 1 month ago)
- Topics: aws, aws-lambda, aws-sam, lambda-function, lambda-functions, lambda-warmer, lambdas, py-lambda-warmer, python3, sam, serverless, serverless-application-model, serverless-architectures, warming
- Language: Python
- Homepage:
- Size: 56.6 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
This is a utility project designed to cater neccessities for warming up `Lambda` functions to prevent cold starts.
## Table Of Contents
- [Table Of Contents](#table-of-contents)
- [Installing Warmer](#installing-warmer)
- [Using Warmer](#using-warmer)
- [Setting up Event Bridge Notifications](#setting-up-event-bridge-notifications)
- [Working on enhancements](#working-on-enhancements)#
[![upload-artifacts-and-release-new-version](https://github.com/satyamsoni2211/LambdaWarmerPy/actions/workflows/release.yaml/badge.svg)](https://github.com/satyamsoni2211/LambdaWarmerPy/actions/workflows/release.yaml) [![PyPI version](https://badge.fury.io/py/py-lambda-warmer.svg)](https://badge.fury.io/py/py-lambda-warmer)
## Installing Warmer
To install module, run the below command:
```bash
python3 -m pip install py_lambda_warmer# or
python3 -m pip install py_lambda_warmer==
```> This does not specify `boto3` library as hard core requirements while installing as it expects
> lambda environment to already have it in order *to reduce the layer size* created. This would not be the case with development. You will have to explicitely install dependencies using `dev_requirements.txt` file.
> ( Changes made since release 0.1.5 )`## Using Warmer
This is very easy to incorporate in your existing Python Lambda Handlers. Follow the below code.
```python
from warmer import warmer
@warmer(flag="custom_event_key", _concurrency=1)
def handler(event, context):
pass
```> Parameters:
> *flag* (type: str)- name of the event flag to look for
> *_concurrency* (type: int)- (optional) Number of concurrent handlers to warm up, default: 1If your handler is a Flask/FastApi application, you may follow below steps:
```python
from warmer import warmer
from flask import Flask
app = Flask()
@warmer(flag="custom_event_key",_concurrency=1)
def application(event, context):
return app(event, context)# or
application = warmer(flag="custom_event_key",_concurrency=1)(app)
# you may now use application as your handler
```> `warmer` will help you cater the custom events that are coming for warming _Lambda_ function.
> Though `_concurrency` is optional and by default it only warms up current execution. In case you want to warm up multiple instances of lambda handler, you may need to adjust `_concurrency` to *number of handlers running*.> `Warmer` uses threading mechnism to ensure that the warming calls are actually happening concurrently and not serially.
## Setting up Event Bridge Notifications
You can also setup you custom event bridge schedule for Lambda function using the `Terraform Resource` code mentioned in
the repository.Simply download the `Terraform` code attached in the release and unzip it.
> Note: Make sure your function execution role has required permission to invoke your `Lambda` function else concurrent call executions might fail.
```bash
wget https://github.com/satyamsoni2211/LambdaWarmerPy/releases/download/${release}/terraform_code.zip
unzip terraform_code.zip -d terraform_code/
cd terraform_code/
# creating variable file required by terraform
cat << EOF > .auto.tfvars
arn =
profile =
region =
EOF
# initiating and applying
terraform init
terraform plan -out tfplan
terraform apply tfplan
```You may also modify resource names as per your requirements in the code.
You may also use `AWS SAM` template to create `Event Bridge Notifications` to warm up `Lambda` function.
```yaml
TransactionCompsAPI:
Type: "AWS::Serverless::Function"
Properties:
FunctionName: fake-function
Policies:
- LambdaInvokePolicy:
FunctionName: "fake-function"
Events:
WarmerSchedule: # add this event to the same template
Type: Schedule
Properties:
Schedule: cron(*/5 * ? * 2-6 *)
Name: fake-function-warmer-event
Description: Warmer Event for Lambda Function
Enabled: true
Input: '{"warmer": true}' # this refers to the warmer flag
```In case you want to include concurrent executions, you may add below to include concurrent invocations.
> Note: Using concurrency would also require you to add sufficient permissions to the role to call `lambda:invokeFunction` action on the `Lambda` function. Below code snippet includes policy to grant action to the role.
```yaml
TransactionCompsAPI:
Type: "AWS::Serverless::Function"
Properties:
FunctionName: fake-function
Policies:
- LambdaInvokePolicy:
FunctionName: "fake-function"
Events:
WarmerSchedule: # add this event to the same template
Type: Schedule
Properties:
Schedule: cron(*/5 * ? * 2-6 *)
Name: fake-function-warmer-event
Description: Warmer Event for Lambda Function
Enabled: true
Input: '{"warmer": true, "concurrency": 5}' # this refers to the warmer flag and concurrency
```If you want to work on enhancements or development, you may clone the project and run the below commands to setup environment:
```bash
python -m pip install pipenv
pipenv shell# or
python -m pip install virtualenv
virtualenv venv
source venv/bin/activate
python -m pip install -r dev_requirements.txt
```You may also raise a `PR` to get merged into existing project.
Happy Warming.