An Interest In:
Web News this Week
- April 25, 2024
- April 24, 2024
- April 23, 2024
- April 22, 2024
- April 21, 2024
- April 20, 2024
- April 19, 2024
Deploy a Docker built Lambda function with AWS CDK
This project is a minimum working example of deploying an AWS Lambda function using Docker and AWS CDK.
Deploying Lambda functions using Docker has a number of benefits
- Package all necessary libraries into a single Docker image
- Bypass AWS Lambda's size constraint of 512 mb. Docker images stored on AWS ECR have a maximum size of 10 gb.
- Its easy!
CDK init & deploy
I wont cover setting up CDK and bootstrapping the environment. You can find that information here.
Once you have set up CDK, we need to set up the project:
mkdir cdk_docker_lambda && cd cdk_docker_lambda
cdk init --language python
source .venv/bin/activate
pip install -r requirements.txt && pip install -r requirements-dev.txt
Now deploy empty stack to AWS:
cdk deploy
Stack design
Our stack will deploy only a lambda function. The lambda function will be built using Docker
, so be sure to have Docker
installed and the Docker
daemon running.
# cdk_docker_lambda/cdk_docker_lambda_stack.pyfrom aws_cdk import Stackfrom aws_cdk import aws_lambda as _lambdafrom constructs import Constructclass CdkDockerLambdaStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) self.build_lambda_func() def build_lambda_func(self): self.prediction_lambda = _lambda.DockerImageFunction( scope=self, id="ExampleDockerLambda", # Function name on AWS function_name="ExampleDockerLambda", # Use aws_cdk.aws_lambda.DockerImageCode.from_image_asset to build # a docker image on deployment code=_lambda.DockerImageCode.from_image_asset( # Directory relative to where you execute cdk deploy # contains a Dockerfile with build instructions directory="cdk_docker_lambda/ExampleDockerLambda" ), )
Lambda function
Create a new directory in cdk_docker_lambda
called ExampleDockerLambda
. Here we are going to put a Dockerfile
, requirements.txt
which holds our functions dependencies, and the lambda function itself, example_docker_lambda.py
cdk_docker_lambda/ExampleDockerLambda/Dockerfile
FROM amazon/aws-lambda-python:latestLABEL maintainer="Wesley Cheek"# Installs python, removes cache file to make things smallerRUN yum update -y && \ yum install -y python3 python3-dev python3-pip gcc && \ rm -Rf /var/cache/yum# Be sure to copy over the function itself!COPY example_docker_lambda.py ./# Copies requirements.txt file into the containerCOPY requirements.txt ./# Installs dependencies found in your requirements.txt fileRUN pip install -r requirements.txt# Points to the handler function of your lambda functionCMD ["example_docker_lambda.handler"]
cdk_docker_lambda/ExampleDockerLambda/requirements.txt
requests
cdk_docker_lambda/ExampleDockerLambda/example_docker_lambda.py
# Very simpleimport requestsdef handler(event, context): return "Hello Lambda!"
Now cdk deploy
. AWS CDK
will build your new Lambda function using Docker
and then push it for you to the ECR
repository that was originally created for you by running cdk bootstrap
during the CDK setup. How convenient.
After the image is built and pushed, CDK will deploy the necessary infrastructure. You can navigate to the AWS CloudFormation
console to view the deployment. It should only take a couple minutes.
Once finished, you will find your beautiful Docker
deployed Lambda function on the Lambda console
Test your Lambda function
We can use any kind of event since the function always just returns a string.
Have fun easily deploying any sized Lambda youd like using AWS CDK
and Docker
!
Original Link: https://dev.to/wesleycheek/deploy-a-docker-built-lambda-function-with-aws-cdk-fio
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To