cdk-lambda-fleet icon indicating copy to clipboard operation
cdk-lambda-fleet copied to clipboard

Deploy AWS Lambda functions using docker images to ECR with AWS CDK

AWS CDK: Lambda Fleet

MIT License cdk-lambda-fleet on NPM

Deploy multiple AWS Lambda functions as container images to Amazon ECR with CDK.

Examples

  • src/lambda-node-example
  • src/lambda-python-example
  • src/lambda-typescript-example

CDK Construct

When using the AWS CDK in TypeScript, you can use the published LambdaFleet construct:

$ > yarn install cdk-lambda-fleet
import * as path from "path";
import * as cdk from "@aws-cdk/core";

import { LambdaFleet } from "cdk-lambda-fleet";

export class FleetStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new LambdaFleet(this, "Fleet", {
      path: path.resolve(__dirname, "../src"),
    });
  }
}

Configuration

You can fork this repository and create a folder like src/lambda-python-example and store a Dockerfile there:

FROM amazon/aws-lambda-python:3.8

COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY handler.py ./

CMD [ "handler.run" ]

Using the AWS CDK, a docker image will be created and deployed to Amazon ECR for every folder in src/. After uploading the image, an AWS Lambda will be created or updated to use the latest image.

Deployment

# Deploy all functions

$ > yarn deploy

[…]

Fleet.FleetLambdaNodeExampleArnXYZ = "arn:aws:lambda:eu-central-1:123:function:Fleet-FleetLambdaNodeExampleXYZ-XYZ"
Fleet.FleetLambdaPythonExampleArnXYZ = "arn:aws:lambda:eu-central-1:123:function:Fleet-FleetLambdaPythonExampleXYZ-XYZ"
Fleet.FleetLambdaTypescriptExampleArnXYZ = "arn:aws:lambda:eu-central-1:123:function:Fleet-FleetLambdaTypescriptExampleXYZ-XYZ"