-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscheduled-function.ts
30 lines (27 loc) · 1.35 KB
/
scheduled-function.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import { Duration, RemovalPolicy, StackProps, aws_logs as logs } from 'aws-cdk-lib';
import { Rule, Schedule } from 'aws-cdk-lib/aws-events';
import { LambdaFunction } from 'aws-cdk-lib/aws-events-targets';
import { Architecture, Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda';
import { AwsStack } from './aws-cdk-js-dev-guide-stack';
export class ScheduledFunction {
constructor(stack: AwsStack, id: string, props?: StackProps, customOptions?: any) {
const scheduledFunction = new Function(stack, 'scheduled-function', {
runtime: Runtime.NODEJS_20_X,
architecture: Architecture.ARM_64,
handler: 'index.handler',
code: Code.fromAsset('./handlers/scheduled'),
logGroup: new logs.LogGroup(stack, `scheduled-function-logs`, {
logGroupName: `${id}-scheduled-function`,
removalPolicy: RemovalPolicy.DESTROY,
retention: logs.RetentionDays.THREE_MONTHS,
}),
timeout: Duration.seconds(2),
});
// configure rule for a scheduled function
// recommended period for keeping functions warmed up is 15 minutes
const rule = new Rule(stack, `scheduled-function-rule`, {
schedule: Schedule.rate(Duration.minutes(15))
});
rule.addTarget(new LambdaFunction(scheduledFunction));
}
};