Schedule AWS Lambda Function with CDK
In this tutorial, i'm gonna show you how to schedule a lambda using CloudWatch Events with CDK
Make a new project
Let's create the main folder of the project
mkdir triggerLambda
cd triggerLambda
npm init -y
Then install CDK and aws-lambda package
npm install -g aws-cdk
npm i @aws-cdk/aws-lambda
npm i @aws-cdk/aws-events-targets
mkdir cdk-folder
cdk init app --language typescript
CDK part
Open the file lib/cdk-folder-stack.ts
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda';
import * as path from 'path';
import * as events from "@aws-cdk/aws-events";
import * as targets from "@aws-cdk/aws-events-targets";
export class CdkFolderStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines the lambda
const myLambdaFunction = new lambda.Function(this, 'my-lambda', {
runtime: lambda.Runtime.NODEJS_14_X,
memorySize: 256,
timeout: cdk.Duration.seconds(60),
handler: 'index.main',
code: lambda.Code.fromAsset(path.join(__dirname, '/../app')),
});
// The code that defines the cron
const myCronJob = new events.Rule(this, "myCronJob", {
ruleName: "myCronJob",
description: "Trigger the lambda",
schedule: events.Schedule.expression("cron(0 12 * * ? *)"),
});
myCronJob.addTarget(
new targets.LambdaFunction(myLambdaFunction)
);
}
}
Create the lambda
We are going to create a folder for the lambda at the root (next to lib) :
Let's create our lambda
mkdir app/my-lambda
cd app/my-lambda
npm init -y
npm i axios
touch index.js
Here is the code for the lambda using axios to fetch an url on internet.
const axios = require('axios');
export async function main(event) {
try {
const res = await axios.get('http://worldclockapi.com/api/jsonp/cet/now?callback=data')
console.log("Lambda has been triggered at : ", res.data)
} catch (error) {
console.log(error)
}
}
Let's try it
Let's bootstrap first
cdk bootstrap
⏳ Bootstrapping environment aws://XXXXXXXXXXXXX/us-east-1...
✅ Environment aws://XXXXXXXXXXXXXX/us-east-1 bootstrapped (no changes).
Second command, to create the Cloudformation template for our app :
cdk synth
And now, let's deploy !
cdk deploy
Go to the console
On the console, go to Lambda > your lambda
You can see that the trigger is a Cloudwatch Event
Go to the monitoring then
Click on "View Logs in Cloudwatch"
At the time that you decided to trigger it, you should see your logs !
Congrats !
Now you know how to trigger a lambda with a Cloudwatch Event
Cleaning
Don't forget to clean after this tutorial, i don't want you to have a huge bill on AWS!
cdk destroy
To go further and understand Schedule Expressions : AWS documentation about Schedule Expressions for Rules