Size. Much more size. With Docker images you can package and deploy Lambda functions as container images of up to 10 GB in size. In this way, you can also easily build and deploy larger workloads that rely on sizable dependencies, such as machine learning or data intensive workloads.
In this post we will show you how to deploy your AWS Lambda so that it uses a Docker image with AWS CDK.
Table of Contents
🎓At the end of this post
You will have deployed an AWS Lambda function that runs your Python code. This allows you to bypass the size limitations of Lambda while you trade in some invocation/initialization time.
📝 Requirements — Level 100
This post requires very limited knowledge of AWS CDK. You should generate an sample project using the CLI or you can check out the source code of any of the other CDK posts.
- You have an functionable AWS account
- You have installed and a a starter understanding of AWS CDK
💼 Use cases
Serverless Machine Learning? That used to be a dream with the size limitations AWS Lambda had to offer. Data Scientists want to use libraries that are often big in size: Panda’s, Matplotlib, etc. With this Docker image implementation you won’t have to think about that anymore.
📚Tutorial
- Generate a new CDK project
You will first need to create a new folder and initialize your CDK project in it.
mkdir cdk-docker-lambda
cd cdk-docker-lambda
cdk init app --language typescript
2. Install the aws-lambda library
In order to use and deploy the Docker image you will need to use the DockerImage construct from the aws-lambda library. In order to do so:
npm i @aws-cdk/aws-lambda --save
3. Create your CDK construct
Constructs are the basic building blocks of AWS CDK apps. A construct represents a “cloud component” and encapsulates everything AWS CloudFormation needs to know.
First, import the newly installed library in your app.js:
import * as lambda from "@aws-cdk/aws-lambda";
And then use the DockerImage class of the aws-lambda library to create your new AWS Lambda:
const DockerImageFunction = new lambda.DockerImageFunction(scope, 'DockerImageFunctionHandler', {
code: lambda.DockerImageCode.fromImageAsset(path.join(__dirname, '../../lambda/lambdaname'), {
cmd: ["entryfile.handler"],
entrypoint: ["/lambda-entrypoint.sh"],
}),
memorySize: 10240,
timeout: Duration.seconds(40)
});
In this definition we are pointing the class towards a folder two levels up (lambda), called containing a subfolder (lambda name) where the dockerfile and actual code live.
4. Deploy the stack
That’s all you needed! The final step is to deploy the CDK stack to your account. To do so:
cdk deploy
🧽 Cleanup and Conclusion
If you are not continuing your project make sure to run the destroy command to remove all resources from your AWS account:
cdk destroy
NBTL
If you are interested in learning more about AWS CDK and how you can build applications on AWS with it, we recommend checking out similar posts on our blog: