@@ -7,7 +7,8 @@ import { RetentionDays } from 'aws-cdk-lib/aws-logs';
7
7
import { BlockPublicAccess , Bucket } from 'aws-cdk-lib/aws-s3' ;
8
8
import { Construct } from 'constructs' ;
9
9
10
- const CODE_PATH = '../lambda-analytics/dist' ;
10
+ const CodePath = '../lambda-analytics/dist' ;
11
+ const CodePathV2 = '../lambda-analytics-cloudfront/dist' ;
11
12
12
13
export interface EdgeAnalyticsProps extends StackProps {
13
14
distributionId : string ;
@@ -36,7 +37,7 @@ export class EdgeAnalytics extends Stack {
36
37
memorySize : 2048 ,
37
38
timeout : Duration . minutes ( 10 ) ,
38
39
handler : 'index.handler' ,
39
- code : lambda . Code . fromAsset ( CODE_PATH ) ,
40
+ code : lambda . Code . fromAsset ( CodePath ) ,
40
41
environment : {
41
42
[ Env . Analytics . CloudFrontId ] : distributionId ,
42
43
[ Env . Analytics . CacheBucket ] : `s3://${ cacheBucket . bucketName } ` ,
@@ -53,5 +54,32 @@ export class EdgeAnalytics extends Stack {
53
54
// Run this lambda function every hour
54
55
const rule = new Rule ( this , 'AnalyticRule' , { schedule : Schedule . rate ( Duration . hours ( 1 ) ) } ) ;
55
56
rule . addTarget ( new LambdaFunction ( this . lambda ) ) ;
57
+
58
+ const v2Lambda = new lambda . Function ( this , 'AnalyticV2Lambda' , {
59
+ runtime : lambda . Runtime . NODEJS_LATEST ,
60
+ memorySize : 2048 ,
61
+ timeout : Duration . minutes ( 10 ) ,
62
+ handler : 'index.handler' ,
63
+ code : lambda . Code . fromAsset ( CodePathV2 ) ,
64
+ environment : {
65
+ [ Env . Analytics . CloudFrontId ] : distributionId ,
66
+ [ Env . Analytics . CacheBucket ] : `s3://${ cacheBucket . bucketName } ` ,
67
+ [ Env . Analytics . CloudFrontSourceBucket ] : `s3://${ logBucket . bucketName } ` ,
68
+ [ Env . Analytics . MaxRecords ] : String ( 24 * 7 * 4 ) ,
69
+ [ Env . Analytics . ElasticId ] : Env . get ( Env . Analytics . ElasticId ) ,
70
+ [ Env . Analytics . ElasticApiKey ] : Env . get ( Env . Analytics . ElasticApiKey ) ,
71
+ AWS_NODEJS_CONNECTION_REUSE_ENABLED : '1' ,
72
+ } ,
73
+ logRetention : RetentionDays . ONE_MONTH ,
74
+ loggingFormat : lambda . LoggingFormat . JSON ,
75
+ } ) ;
76
+
77
+ cacheBucket . grantReadWrite ( v2Lambda ) ;
78
+ logBucket . grantRead ( v2Lambda ) ;
79
+
80
+ // Run this lambda function every hour
81
+ new Rule ( this , 'AnalyticRule' , { schedule : Schedule . rate ( Duration . hours ( 1 ) ) } ) . addTarget (
82
+ new LambdaFunction ( v2Lambda ) ,
83
+ ) ;
56
84
}
57
85
}
0 commit comments