AWS CDK Made Simple: Run a Lambda function locally
Tomasz Łakomy
—July 05, 2020
Every single development workflow looks like this and building stuff with AWS Lambda is no exception:
Luckily, there's a way of testing AWS-CDK powered lambda functions on our local machine, without fiddling with the AWS Console.
It's definitely easier and faster than re-deploying a function to THE CLOUD every time we want to test something.
In order to do that, we need to have AWS SAM - AWS Serverless Application Model installed on our machine (if you'd like to get a short introduction to AWS SAM, check out WTF is AWS Serverless Application Model (AWS SAM))
How do I run a Lambda function built with CDK locally?
Imagine that we have a simple CDK stack, with a single Lambda function that we'd like to be able to run on our local machine:
import * as cdk from '@aws-cdk/core';import * as lambda from '@aws-cdk/aws-lambda';export class SampleCdkAppStack extends cdk.Stack {constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {super(scope, id, props);const myLambda = new lambda.Function(this, 'MyFunction', {runtime: lambda.Runtime.NODEJS_12_X,handler: 'index.handler',code: lambda.Code.fromAsset('lambda'),});}}
In order to do that, go through the following steps:
- Run
cdk synth --no-staging > template.yaml
in order to create a CloudFormation template and store it in a template.yaml
file
- Find the logical ID for your Lambda function in template.yaml. It will look like
MyFunction12345678
, where12345678
represents an 8-character unique ID that the AWS CDK generates for all resources. The line right after it should look likeType: AWS::Lambda::Function
- Run the function by executing:
sam local invoke HelloLambda12345678
- We can also pass custom events to the function, to do that - for instance, given a sample
hello.json
file:
{"path": "/hello/friends","body": "hello"}
- To execute a lambda function locally with a custom event, run
sam local invoke HelloLambda3D9C82D6 -e sample_events/hello.json
I'd like to learn more, how can I do that?
Excellent question!
I've launched an entire AWS CDK course on egghead.io - check out Build an App with the AWS Cloud Development Kit
It's the best piece of content I've ever created and I'm incredibly proud of it 🌟
Apart from that, I also have egghead.io collections about serverless topics, such as:
On top of that those are excellent resources that I'm more than happy to recommend: