@sylvesterllc/aws-constructs 1.1.18 → 1.1.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constructs/BasicLambda.d.ts +8 -0
- package/dist/constructs/BasicLambda.js +16 -0
- package/dist/constructs/index.d.ts +1 -0
- package/dist/constructs/index.js +4 -2
- package/dist/constructs/timer-job.d.ts +2 -0
- package/dist/constructs/timer-job.js +4 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -1
- package/dist/interfaces/lambda/index.d.ts +1 -0
- package/dist/interfaces/lambda/index.js +3 -0
- package/dist/interfaces/lambda/lambda-props.d.ts +14 -0
- package/dist/interfaces/lambda/lambda-props.js +3 -0
- package/dist/resources/lambda/create-basic-lambda-helper.d.ts +4 -0
- package/dist/resources/lambda/create-basic-lambda-helper.js +62 -0
- package/dist/resources/lambda/create-basic-lambda.d.ts +2 -1
- package/dist/resources/lambda/create-basic-lambda.js +14 -11
- package/package.json +1 -1
- package/src/constructs/BasicLambda.ts +19 -0
- package/src/constructs/index.ts +2 -1
- package/src/constructs/timer-job.ts +13 -11
- package/src/index.ts +3 -1
- package/src/interfaces/lambda/index.ts +1 -0
- package/src/interfaces/lambda/lambda-props.ts +15 -0
- package/src/resources/lambda/create-basic-lambda-helper.ts +98 -0
- package/src/resources/lambda/create-basic-lambda.ts +103 -72
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { LambdaProps } from "../interfaces/lambda";
|
|
3
|
+
import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
|
|
4
|
+
export declare class BasicLambda extends Construct {
|
|
5
|
+
private env;
|
|
6
|
+
readonly lambdaFunction: NodejsFunction;
|
|
7
|
+
constructor(scope: Construct, id: string, props: LambdaProps, env: string);
|
|
8
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BasicLambda = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
const create_basic_lambda_helper_js_1 = require("../resources/lambda/create-basic-lambda-helper.js");
|
|
6
|
+
class BasicLambda extends constructs_1.Construct {
|
|
7
|
+
env;
|
|
8
|
+
lambdaFunction;
|
|
9
|
+
constructor(scope, id, props, env) {
|
|
10
|
+
super(scope, id);
|
|
11
|
+
this.env = env;
|
|
12
|
+
this.lambdaFunction = (0, create_basic_lambda_helper_js_1.createBasicLambda)(scope, props);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.BasicLambda = BasicLambda;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzaWNMYW1iZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9CYXNpY0xhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFFdkMscUdBQXNGO0FBR3RGLE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBTzlCO0lBTk0sY0FBYyxDQUFpQjtJQUUvQyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFrQixFQUNWLEdBQVc7UUFFbkIsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUZULFFBQUcsR0FBSCxHQUFHLENBQVE7UUFJbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFBLGlEQUFpQixFQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBQ0Y7QUFiRCxrQ0FhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XHJcbmltcG9ydCB7IExhbWJkYVByb3BzIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvbGFtYmRhXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUJhc2ljTGFtYmRhIH0gZnJvbSBcIi4uL3Jlc291cmNlcy9sYW1iZGEvY3JlYXRlLWJhc2ljLWxhbWJkYS1oZWxwZXIuanNcIjtcclxuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNpY0xhbWJkYSBleHRlbmRzIENvbnN0cnVjdCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uOiBOb2RlanNGdW5jdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBzY29wZTogQ29uc3RydWN0LFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIHByb3BzOiBMYW1iZGFQcm9wcyxcclxuICAgIHByaXZhdGUgZW52OiBzdHJpbmdcclxuICApIHtcclxuICAgIHN1cGVyKHNjb3BlLCBpZCk7XHJcblxyXG4gICAgdGhpcy5sYW1iZGFGdW5jdGlvbiA9IGNyZWF0ZUJhc2ljTGFtYmRhKHNjb3BlLCBwcm9wcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
package/dist/constructs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TimerJob = exports.DynamoDbSingleTable = exports.TsgAuthorizerType = exports.MicroService = void 0;
|
|
3
|
+
exports.BasicLambda = exports.TimerJob = exports.DynamoDbSingleTable = exports.TsgAuthorizerType = exports.MicroService = void 0;
|
|
4
4
|
var MicroService_1 = require("./MicroService");
|
|
5
5
|
Object.defineProperty(exports, "MicroService", { enumerable: true, get: function () { return MicroService_1.MicroService; } });
|
|
6
6
|
var TsgAuthorizerType_1 = require("../config/types/TsgAuthorizerType");
|
|
@@ -9,4 +9,6 @@ var DynamoDbSingleTable_1 = require("./DynamoDbSingleTable");
|
|
|
9
9
|
Object.defineProperty(exports, "DynamoDbSingleTable", { enumerable: true, get: function () { return DynamoDbSingleTable_1.DynamoDbSingleTable; } });
|
|
10
10
|
var timer_job_1 = require("./timer-job");
|
|
11
11
|
Object.defineProperty(exports, "TimerJob", { enumerable: true, get: function () { return timer_job_1.TimerJob; } });
|
|
12
|
-
|
|
12
|
+
var BasicLambda_1 = require("./BasicLambda");
|
|
13
|
+
Object.defineProperty(exports, "BasicLambda", { enumerable: true, get: function () { return BasicLambda_1.BasicLambda; } });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBOEM7QUFBckMsNEdBQUEsWUFBWSxPQUFBO0FBQ3JCLHVFQUFzRTtBQUE3RCxzSEFBQSxpQkFBaUIsT0FBQTtBQUMxQiw2REFBNEQ7QUFBbkQsMEhBQUEsbUJBQW1CLE9BQUE7QUFDNUIseUNBQXVDO0FBQTlCLHFHQUFBLFFBQVEsT0FBQTtBQUNqQiw2Q0FBNEM7QUFBbkMsMEdBQUEsV0FBVyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTWljcm9TZXJ2aWNlIH0gZnJvbSBcIi4vTWljcm9TZXJ2aWNlXCI7XHJcbmV4cG9ydCB7IFRzZ0F1dGhvcml6ZXJUeXBlIH0gZnJvbSBcIi4uL2NvbmZpZy90eXBlcy9Uc2dBdXRob3JpemVyVHlwZVwiO1xyXG5leHBvcnQgeyBEeW5hbW9EYlNpbmdsZVRhYmxlIH0gZnJvbSBcIi4vRHluYW1vRGJTaW5nbGVUYWJsZVwiO1xyXG5leHBvcnQgeyBUaW1lckpvYiB9IGZyb20gXCIuL3RpbWVyLWpvYlwiO1xyXG5leHBvcnQgeyBCYXNpY0xhbWJkYSB9IGZyb20gXCIuL0Jhc2ljTGFtYmRhXCI7XHJcbiJdfQ==
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
2
|
import { TimerJobProps } from "../interfaces/timer-job";
|
|
3
|
+
import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
|
|
3
4
|
export declare class TimerJob extends Construct {
|
|
4
5
|
private env;
|
|
6
|
+
readonly lambdaFunction: NodejsFunction;
|
|
5
7
|
constructor(scope: Construct, id: string, props: TimerJobProps, env: string);
|
|
6
8
|
}
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TimerJob = void 0;
|
|
4
4
|
const constructs_1 = require("constructs");
|
|
5
|
-
const
|
|
5
|
+
const create_basic_lambda_js_1 = require("../resources/lambda/create-basic-lambda.js");
|
|
6
6
|
class TimerJob extends constructs_1.Construct {
|
|
7
7
|
env;
|
|
8
|
+
lambdaFunction;
|
|
8
9
|
constructor(scope, id, props, env) {
|
|
9
10
|
super(scope, id);
|
|
10
11
|
this.env = env;
|
|
11
|
-
|
|
12
|
+
this.lambdaFunction = (0, create_basic_lambda_js_1.createBasicLambdaTimerJob)(scope, props);
|
|
12
13
|
}
|
|
13
14
|
}
|
|
14
15
|
exports.TimerJob = TimerJob;
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXItam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvdGltZXItam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUV2Qyx1RkFBdUY7QUFHdkYsTUFBYSxRQUFTLFNBQVEsc0JBQVM7SUFPM0I7SUFOTSxjQUFjLENBQWlCO0lBRS9DLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQW9CLEVBQ1osR0FBVztRQUVuQixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRlQsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUluQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUEsa0RBQXlCLEVBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7Q0FDRjtBQWJELDRCQWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcclxuaW1wb3J0IHsgVGltZXJKb2JQcm9wcyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3RpbWVyLWpvYlwiO1xyXG5pbXBvcnQgeyBjcmVhdGVCYXNpY0xhbWJkYVRpbWVySm9iIH0gZnJvbSBcIi4uL3Jlc291cmNlcy9sYW1iZGEvY3JlYXRlLWJhc2ljLWxhbWJkYS5qc1wiO1xyXG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRpbWVySm9iIGV4dGVuZHMgQ29uc3RydWN0IHtcclxuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb246IE5vZGVqc0Z1bmN0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcHJvcHM6IFRpbWVySm9iUHJvcHMsXHJcbiAgICBwcml2YXRlIGVudjogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzY29wZSwgaWQpO1xyXG5cclxuICAgIHRoaXMubGFtYmRhRnVuY3Rpb24gPSBjcmVhdGVCYXNpY0xhbWJkYVRpbWVySm9iKHNjb3BlLCBwcm9wcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -4,3 +4,5 @@ export { IAppConfig } from "./config/customConfigs/IAppConfig";
|
|
|
4
4
|
export { MicroServiceAppConfig } from "./config/MicroserviceAppConfig";
|
|
5
5
|
export { TsgAuthorizerType } from "./config/types/TsgAuthorizerType";
|
|
6
6
|
export * from "./interfaces/timer-job/index";
|
|
7
|
+
export * from "./interfaces/lambda/index";
|
|
8
|
+
export * from "./constructs/index";
|
package/dist/index.js
CHANGED
|
@@ -22,4 +22,6 @@ Object.defineProperty(exports, "MicroServiceAppConfig", { enumerable: true, get:
|
|
|
22
22
|
var TsgAuthorizerType_1 = require("./config/types/TsgAuthorizerType");
|
|
23
23
|
Object.defineProperty(exports, "TsgAuthorizerType", { enumerable: true, get: function () { return TsgAuthorizerType_1.TsgAuthorizerType; } });
|
|
24
24
|
__exportStar(require("./interfaces/timer-job/index"), exports);
|
|
25
|
-
|
|
25
|
+
__exportStar(require("./interfaces/lambda/index"), exports);
|
|
26
|
+
__exportStar(require("./constructs/index"), exports);
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwREFBeUQ7QUFBaEQsNEdBQUEsWUFBWSxPQUFBO0FBR3JCLHdFQUF1RTtBQUE5RCw4SEFBQSxxQkFBcUIsT0FBQTtBQUM5QixzRUFBcUU7QUFBNUQsc0hBQUEsaUJBQWlCLE9BQUE7QUFDMUIsK0RBQTZDO0FBQzdDLDREQUEwQztBQUMxQyxxREFBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBNaWNyb1NlcnZpY2UgfSBmcm9tIFwiLi9jb25zdHJ1Y3RzL01pY3JvU2VydmljZVwiO1xyXG5leHBvcnQgeyBNaWNyb3NlcnZpY2VQcm9wcyB9IGZyb20gXCIuL2ludGVyZmFjZXMvTWljcm9zZXJ2aWNlUHJvcHNcIjtcclxuZXhwb3J0IHsgSUFwcENvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy9jdXN0b21Db25maWdzL0lBcHBDb25maWdcIjtcclxuZXhwb3J0IHsgTWljcm9TZXJ2aWNlQXBwQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnL01pY3Jvc2VydmljZUFwcENvbmZpZ1wiO1xyXG5leHBvcnQgeyBUc2dBdXRob3JpemVyVHlwZSB9IGZyb20gXCIuL2NvbmZpZy90eXBlcy9Uc2dBdXRob3JpemVyVHlwZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VzL3RpbWVyLWpvYi9pbmRleFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VzL2xhbWJkYS9pbmRleFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdHJ1Y3RzL2luZGV4XCI7XHJcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LambdaProps } from "./lambda-props";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50ZXJmYWNlcy9sYW1iZGEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IExhbWJkYVByb3BzIH0gZnJvbSBcIi4vbGFtYmRhLXByb3BzXCI7XHJcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IRole } from "aws-cdk-lib/aws-iam/lib";
|
|
2
|
+
export interface LambdaProps {
|
|
3
|
+
functionName: string;
|
|
4
|
+
appPrefix?: string;
|
|
5
|
+
codePath?: string;
|
|
6
|
+
memory?: number;
|
|
7
|
+
envs?: Record<string, string>;
|
|
8
|
+
role?: IRole;
|
|
9
|
+
dynamoTableNames?: string[];
|
|
10
|
+
lambdaLayerArn?: string[];
|
|
11
|
+
projectRoot?: string;
|
|
12
|
+
depsLockFilePath?: string;
|
|
13
|
+
timeoutInMinutes?: number;
|
|
14
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLXByb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludGVyZmFjZXMvbGFtYmRhL2xhbWJkYS1wcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJvbGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbS9saWJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUHJvcHMge1xyXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xyXG4gIGFwcFByZWZpeD86IHN0cmluZztcclxuICBjb2RlUGF0aD86IHN0cmluZztcclxuICBtZW1vcnk/OiBudW1iZXI7XHJcbiAgZW52cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcm9sZT86IElSb2xlO1xyXG4gIGR5bmFtb1RhYmxlTmFtZXM/OiBzdHJpbmdbXTtcclxuICBsYW1iZGFMYXllckFybj86IHN0cmluZ1tdO1xyXG4gIHByb2plY3RSb290Pzogc3RyaW5nO1xyXG4gIGRlcHNMb2NrRmlsZVBhdGg/OiBzdHJpbmc7XHJcbiAgdGltZW91dEluTWludXRlcz86IG51bWJlcjtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createBasicLambda = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
6
|
+
const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs");
|
|
7
|
+
const aws_logs_1 = require("aws-cdk-lib/aws-logs");
|
|
8
|
+
const path = require("path");
|
|
9
|
+
const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
|
|
10
|
+
const createBasicLambda = (scope, props) => {
|
|
11
|
+
const lambdaProps = createBasicLambdaProps(props);
|
|
12
|
+
let lambdaFunction = new aws_lambda_nodejs_1.NodejsFunction(scope, `${props.appPrefix || ""}${props.functionName}`, lambdaProps);
|
|
13
|
+
grantAccessToDynamoTables(scope, lambdaFunction, props.dynamoTableNames);
|
|
14
|
+
addLambdaLayers(scope, lambdaFunction, props.lambdaLayerArn);
|
|
15
|
+
return lambdaFunction;
|
|
16
|
+
};
|
|
17
|
+
exports.createBasicLambda = createBasicLambda;
|
|
18
|
+
const createBasicLambdaProps = (props) => {
|
|
19
|
+
const lambdaProp = {
|
|
20
|
+
entry: props.codePath
|
|
21
|
+
? path.join(props.codePath)
|
|
22
|
+
: path.join(`./resources/lambdas/${props.functionName}/main.mts`),
|
|
23
|
+
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${props.functionName}`,
|
|
24
|
+
handler: "main.ts",
|
|
25
|
+
logRetention: aws_logs_1.RetentionDays.TWO_WEEKS,
|
|
26
|
+
runtime: aws_lambda_1.Runtime.NODEJS_LATEST,
|
|
27
|
+
timeout: aws_cdk_lib_1.Duration.minutes(props.timeoutInMinutes ? props.timeoutInMinutes : 1),
|
|
28
|
+
memorySize: props.memory,
|
|
29
|
+
environment: {
|
|
30
|
+
...props.envs,
|
|
31
|
+
},
|
|
32
|
+
bundling: {
|
|
33
|
+
minify: true,
|
|
34
|
+
target: `esnext`,
|
|
35
|
+
sourceMap: true,
|
|
36
|
+
sourceMapMode: aws_lambda_nodejs_1.SourceMapMode.EXTERNAL,
|
|
37
|
+
environment: {
|
|
38
|
+
...props.envs,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
role: props.role,
|
|
42
|
+
layers: undefined,
|
|
43
|
+
};
|
|
44
|
+
return lambdaProp;
|
|
45
|
+
};
|
|
46
|
+
const grantAccessToDynamoTables = (scope, lambda, tableNames) => {
|
|
47
|
+
if (tableNames && tableNames.length > 0) {
|
|
48
|
+
tableNames.forEach((tableName) => {
|
|
49
|
+
const table = aws_dynamodb_1.Table.fromTableName(scope, `${tableName}-table`, tableName);
|
|
50
|
+
table.grantReadWriteData(lambda);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const addLambdaLayers = (scope, lambda, layerArns) => {
|
|
55
|
+
if (layerArns && layerArns.length > 0) {
|
|
56
|
+
layerArns.forEach((arn, idx) => {
|
|
57
|
+
const layer = aws_lambda_1.LayerVersion.fromLayerVersionArn(scope, `common-layer-${idx}`, arn);
|
|
58
|
+
lambda.addLayers(layer);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2ljLWxhbWJkYS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzb3VyY2VzL2xhbWJkYS9jcmVhdGUtYmFzaWMtbGFtYmRhLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUM7QUFFdkMsdURBQStEO0FBQy9ELHFFQUl1QztBQUN2QyxtREFBcUQ7QUFDckQsNkJBQThCO0FBRzlCLDJEQUFpRDtBQUUxQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLEtBQWdCLEVBQ2hCLEtBQWtCLEVBQ0YsRUFBRTtJQUNsQixNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVsRCxJQUFJLGNBQWMsR0FBRyxJQUFJLGtDQUFjLENBQ3JDLEtBQUssRUFDTCxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFDL0MsV0FBVyxDQUNaLENBQUM7SUFFRix5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXpFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU3RCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDLENBQUM7QUFqQlcsUUFBQSxpQkFBaUIscUJBaUI1QjtBQUVGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFrQixFQUF1QixFQUFFO0lBQ3pFLE1BQU0sVUFBVSxHQUF3QjtRQUN0QyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxDQUFDLFlBQVksV0FBVyxDQUFDO1FBQ25FLFlBQVksRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQzNELEtBQUssQ0FBQyxZQUNSLEVBQUU7UUFDRixPQUFPLEVBQUUsU0FBUztRQUNsQixZQUFZLEVBQUUsd0JBQWEsQ0FBQyxTQUFTO1FBQ3JDLE9BQU8sRUFBRSxvQkFBTyxDQUFDLGFBQWE7UUFDOUIsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUN2QixLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNwRDtRQUNELFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTTtRQUN4QixXQUFXLEVBQUU7WUFDWCxHQUFHLEtBQUssQ0FBQyxJQUFJO1NBQ2Q7UUFDRCxRQUFRLEVBQUU7WUFDUixNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLGlDQUFhLENBQUMsUUFBUTtZQUNyQyxXQUFXLEVBQUU7Z0JBQ1gsR0FBRyxLQUFLLENBQUMsSUFBSTthQUNkO1NBQ0Y7UUFDRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDaEIsTUFBTSxFQUFFLFNBQVM7S0FDbEIsQ0FBQztJQUVGLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGLE1BQU0seUJBQXlCLEdBQUcsQ0FDaEMsS0FBZ0IsRUFDaEIsTUFBc0IsRUFDdEIsVUFBcUIsRUFDckIsRUFBRTtJQUNGLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQy9CLE1BQU0sS0FBSyxHQUFHLG9CQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLFNBQVMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRTFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUN0QixLQUFnQixFQUNoQixNQUFzQixFQUN0QixTQUFvQixFQUNwQixFQUFFO0lBQ0YsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxFQUFFO1lBQzdDLE1BQU0sS0FBSyxHQUFHLHlCQUFZLENBQUMsbUJBQW1CLENBQzVDLEtBQUssRUFDTCxnQkFBZ0IsR0FBRyxFQUFFLEVBQ3JCLEdBQUcsQ0FDSixDQUFDO1lBRUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcclxuaW1wb3J0IHsgTGF5ZXJWZXJzaW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcclxuaW1wb3J0IHtcclxuICBOb2RlanNGdW5jdGlvbixcclxuICBOb2RlanNGdW5jdGlvblByb3BzLFxyXG4gIFNvdXJjZU1hcE1vZGUsXHJcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCI7XHJcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcclxuaW1wb3J0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuaW1wb3J0IHsgTGFtYmRhUHJvcHMgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9sYW1iZGFcIjtcclxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlQmFzaWNMYW1iZGEgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBwcm9wczogTGFtYmRhUHJvcHNcclxuKTogTm9kZWpzRnVuY3Rpb24gPT4ge1xyXG4gIGNvbnN0IGxhbWJkYVByb3BzID0gY3JlYXRlQmFzaWNMYW1iZGFQcm9wcyhwcm9wcyk7XHJcblxyXG4gIGxldCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBOb2RlanNGdW5jdGlvbihcclxuICAgIHNjb3BlLFxyXG4gICAgYCR7cHJvcHMuYXBwUHJlZml4IHx8IFwiXCJ9JHtwcm9wcy5mdW5jdGlvbk5hbWV9YCxcclxuICAgIGxhbWJkYVByb3BzXHJcbiAgKTtcclxuXHJcbiAgZ3JhbnRBY2Nlc3NUb0R5bmFtb1RhYmxlcyhzY29wZSwgbGFtYmRhRnVuY3Rpb24sIHByb3BzLmR5bmFtb1RhYmxlTmFtZXMpO1xyXG5cclxuICBhZGRMYW1iZGFMYXllcnMoc2NvcGUsIGxhbWJkYUZ1bmN0aW9uLCBwcm9wcy5sYW1iZGFMYXllckFybik7XHJcblxyXG4gIHJldHVybiBsYW1iZGFGdW5jdGlvbjtcclxufTtcclxuXHJcbmNvbnN0IGNyZWF0ZUJhc2ljTGFtYmRhUHJvcHMgPSAocHJvcHM6IExhbWJkYVByb3BzKTogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9PiB7XHJcbiAgY29uc3QgbGFtYmRhUHJvcDogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9IHtcclxuICAgIGVudHJ5OiBwcm9wcy5jb2RlUGF0aFxyXG4gICAgICA/IHBhdGguam9pbihwcm9wcy5jb2RlUGF0aClcclxuICAgICAgOiBwYXRoLmpvaW4oYC4vcmVzb3VyY2VzL2xhbWJkYXMvJHtwcm9wcy5mdW5jdGlvbk5hbWV9L21haW4ubXRzYCksXHJcbiAgICBmdW5jdGlvbk5hbWU6IGAke3Byb3BzLmFwcFByZWZpeCA/IGAke3Byb3BzLmFwcFByZWZpeH0tYCA6IFwiXCJ9JHtcclxuICAgICAgcHJvcHMuZnVuY3Rpb25OYW1lXHJcbiAgICB9YCxcclxuICAgIGhhbmRsZXI6IFwibWFpbi50c1wiLFxyXG4gICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcclxuICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTX0xBVEVTVCxcclxuICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoXHJcbiAgICAgIHByb3BzLnRpbWVvdXRJbk1pbnV0ZXMgPyBwcm9wcy50aW1lb3V0SW5NaW51dGVzIDogMVxyXG4gICAgKSxcclxuICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeSxcclxuICAgIGVudmlyb25tZW50OiB7XHJcbiAgICAgIC4uLnByb3BzLmVudnMsXHJcbiAgICB9LFxyXG4gICAgYnVuZGxpbmc6IHtcclxuICAgICAgbWluaWZ5OiB0cnVlLFxyXG4gICAgICB0YXJnZXQ6IGBlc25leHRgLFxyXG4gICAgICBzb3VyY2VNYXA6IHRydWUsXHJcbiAgICAgIHNvdXJjZU1hcE1vZGU6IFNvdXJjZU1hcE1vZGUuRVhURVJOQUwsXHJcbiAgICAgIGVudmlyb25tZW50OiB7XHJcbiAgICAgICAgLi4ucHJvcHMuZW52cyxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICByb2xlOiBwcm9wcy5yb2xlLFxyXG4gICAgbGF5ZXJzOiB1bmRlZmluZWQsXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIGxhbWJkYVByb3A7XHJcbn07XHJcblxyXG5jb25zdCBncmFudEFjY2Vzc1RvRHluYW1vVGFibGVzID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICB0YWJsZU5hbWVzPzogc3RyaW5nW11cclxuKSA9PiB7XHJcbiAgaWYgKHRhYmxlTmFtZXMgJiYgdGFibGVOYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICB0YWJsZU5hbWVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xyXG4gICAgICBjb25zdCB0YWJsZSA9IFRhYmxlLmZyb21UYWJsZU5hbWUoc2NvcGUsIGAke3RhYmxlTmFtZX0tdGFibGVgLCB0YWJsZU5hbWUpO1xyXG5cclxuICAgICAgdGFibGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGxhbWJkYSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBhZGRMYW1iZGFMYXllcnMgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBsYW1iZGE6IE5vZGVqc0Z1bmN0aW9uLFxyXG4gIGxheWVyQXJucz86IHN0cmluZ1tdXHJcbikgPT4ge1xyXG4gIGlmIChsYXllckFybnMgJiYgbGF5ZXJBcm5zLmxlbmd0aCA+IDApIHtcclxuICAgIGxheWVyQXJucy5mb3JFYWNoKChhcm46IHN0cmluZywgaWR4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgbGF5ZXIgPSBMYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybihcclxuICAgICAgICBzY29wZSxcclxuICAgICAgICBgY29tbW9uLWxheWVyLSR7aWR4fWAsXHJcbiAgICAgICAgYXJuXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBsYW1iZGEuYWRkTGF5ZXJzKGxheWVyKTtcclxuICAgIH0pO1xyXG4gIH1cclxufTtcclxuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
|
|
1
2
|
import { TimerJobProps } from "../../interfaces/timer-job";
|
|
2
3
|
import { Construct } from "constructs";
|
|
3
|
-
export declare const createBasicLambdaTimerJob: (scope: Construct, props: TimerJobProps) =>
|
|
4
|
+
export declare const createBasicLambdaTimerJob: (scope: Construct, props: TimerJobProps) => NodejsFunction;
|
|
@@ -19,19 +19,22 @@ const createBasicLambdaTimerJob = (scope, props) => {
|
|
|
19
19
|
eventRule.addTarget(new aws_events_targets_1.LambdaFunction(lambdaFunction));
|
|
20
20
|
grantAccessToDynamoTables(scope, lambdaFunction, props.dynamoTableNames);
|
|
21
21
|
addLambdaLayers(scope, lambdaFunction, props.lambdaLayerArn);
|
|
22
|
+
return lambdaFunction;
|
|
22
23
|
};
|
|
23
24
|
exports.createBasicLambdaTimerJob = createBasicLambdaTimerJob;
|
|
24
25
|
const createBasicLambdaProps = (props) => {
|
|
25
26
|
const lambdaProp = {
|
|
26
|
-
entry:
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
entry: props.codePath
|
|
28
|
+
? path.join(props.codePath)
|
|
29
|
+
: path.join(`./resources/lambdas/timer-jobs/${props.functionName}/main.mts`),
|
|
30
|
+
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${props.functionName}`,
|
|
31
|
+
handler: "main.ts",
|
|
29
32
|
logRetention: aws_logs_1.RetentionDays.TWO_WEEKS,
|
|
30
33
|
runtime: aws_lambda_1.Runtime.NODEJS_LATEST,
|
|
31
|
-
timeout: aws_cdk_lib_1.Duration.minutes(
|
|
34
|
+
timeout: aws_cdk_lib_1.Duration.minutes(props.timeoutInMinutes ? props.timeoutInMinutes : 1),
|
|
32
35
|
memorySize: props.memory,
|
|
33
36
|
environment: {
|
|
34
|
-
...props.envs
|
|
37
|
+
...props.envs,
|
|
35
38
|
},
|
|
36
39
|
bundling: {
|
|
37
40
|
minify: true,
|
|
@@ -39,11 +42,11 @@ const createBasicLambdaProps = (props) => {
|
|
|
39
42
|
sourceMap: true,
|
|
40
43
|
sourceMapMode: aws_lambda_nodejs_1.SourceMapMode.EXTERNAL,
|
|
41
44
|
environment: {
|
|
42
|
-
...props.envs
|
|
43
|
-
}
|
|
45
|
+
...props.envs,
|
|
46
|
+
},
|
|
44
47
|
},
|
|
45
48
|
role: props.role,
|
|
46
|
-
layers: undefined
|
|
49
|
+
layers: undefined,
|
|
47
50
|
};
|
|
48
51
|
return lambdaProp;
|
|
49
52
|
};
|
|
@@ -53,14 +56,14 @@ const addInvokePermissionToLambdaForEvents = (lambda) => {
|
|
|
53
56
|
});
|
|
54
57
|
};
|
|
55
58
|
const createEventRuleForLambda = (scope, lambda, options) => {
|
|
56
|
-
const eventRule = new aws_events_1.Rule(scope, `scheduleRule-${lambda?.node.id ||
|
|
59
|
+
const eventRule = new aws_events_1.Rule(scope, `scheduleRule-${lambda?.node.id || "010"}`, {
|
|
57
60
|
schedule: aws_events_1.Schedule.cron(options),
|
|
58
61
|
});
|
|
59
62
|
return eventRule;
|
|
60
63
|
};
|
|
61
64
|
const grantAccessToDynamoTables = (scope, lambda, tableNames) => {
|
|
62
65
|
if (tableNames && tableNames.length > 0) {
|
|
63
|
-
tableNames.forEach(tableName => {
|
|
66
|
+
tableNames.forEach((tableName) => {
|
|
64
67
|
const table = aws_dynamodb_1.Table.fromTableName(scope, `${tableName}-table`, tableName);
|
|
65
68
|
table.grantReadWriteData(lambda);
|
|
66
69
|
});
|
|
@@ -74,4 +77,4 @@ const addLambdaLayers = (scope, lambda, layerArns) => {
|
|
|
74
77
|
});
|
|
75
78
|
}
|
|
76
79
|
};
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2ljLWxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXNvdXJjZXMvbGFtYmRhL2NyZWF0ZS1iYXNpYy1sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLGlEQUF1RDtBQUN2RCx1REFBK0Q7QUFDL0QscUVBSXVDO0FBQ3ZDLG1EQUFxRDtBQUNyRCw2QkFBOEI7QUFHOUIscUdBQW9GO0FBQ3BGLHVEQUFxRTtBQUNyRSx1RUFBZ0U7QUFDaEUsMkRBQWlEO0FBRTFDLE1BQU0seUJBQXlCLEdBQUcsQ0FDdkMsS0FBZ0IsRUFDaEIsS0FBb0IsRUFDSixFQUFFO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxELElBQUksY0FBYyxHQUFHLElBQUksa0NBQWMsQ0FDckMsS0FBSyxFQUNMLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQ3pDLFdBQVcsQ0FDWixDQUFDO0lBRUYsb0NBQW9DLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFckQsTUFBTSxTQUFTLEdBQUcsd0JBQXdCLENBQ3hDLEtBQUssRUFDTCxjQUFjLEVBQ2QsS0FBSyxDQUFDLFdBQVcsQ0FDbEIsQ0FBQztJQUVGLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxtQ0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFFeEQseUJBQXlCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUV6RSxlQUFlLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFN0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBM0JXLFFBQUEseUJBQXlCLDZCQTJCcEM7QUFFRixNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBb0IsRUFB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R0FBVyxFQUFFLEVBQUU7WUFDN0MsTUFBTSxLQUFLLEdBQUcseUJBQVksQ0FBQyxtQkFBbUIsQ0FDNUMsS0FBSyxFQUNMLGdCQUFnQixHQUFHLEVBQUUsRUFDckIsR0FBRyxDQUNKLENBQUM7WUFFRixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xyXG5pbXBvcnQgeyBMYXllclZlcnNpb24sIFJ1bnRpbWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xyXG5pbXBvcnQge1xyXG4gIE5vZGVqc0Z1bmN0aW9uLFxyXG4gIE5vZGVqc0Z1bmN0aW9uUHJvcHMsXHJcbiAgU291cmNlTWFwTW9kZSxcclxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIjtcclxuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xyXG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5pbXBvcnQgeyBUaW1lckpvYlByb3BzIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvdGltZXItam9iXCI7XHJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XHJcbmltcG9ydCB7IFNFUlZJQ0VfUFJJTkNJUEFMIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy9hd3Mtc2VydmljZS1wcmluY2lwYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENyb25PcHRpb25zLCBSdWxlLCBTY2hlZHVsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCI7XHJcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVCYXNpY0xhbWJkYVRpbWVySm9iID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgcHJvcHM6IFRpbWVySm9iUHJvcHNcclxuKTogTm9kZWpzRnVuY3Rpb24gPT4ge1xyXG4gIGNvbnN0IGxhbWJkYVByb3BzID0gY3JlYXRlQmFzaWNMYW1iZGFQcm9wcyhwcm9wcyk7XHJcblxyXG4gIGxldCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBOb2RlanNGdW5jdGlvbihcclxuICAgIHNjb3BlLFxyXG4gICAgYCR7cHJvcHMuYXBwUHJlZml4fSR7cHJvcHMuZnVuY3Rpb25OYW1lfWAsXHJcbiAgICBsYW1iZGFQcm9wc1xyXG4gICk7XHJcblxyXG4gIGFkZEludm9rZVBlcm1pc3Npb25Ub0xhbWJkYUZvckV2ZW50cyhsYW1iZGFGdW5jdGlvbik7XHJcblxyXG4gIGNvbnN0IGV2ZW50UnVsZSA9IGNyZWF0ZUV2ZW50UnVsZUZvckxhbWJkYShcclxuICAgIHNjb3BlLFxyXG4gICAgbGFtYmRhRnVuY3Rpb24sXHJcbiAgICBwcm9wcy5jcm9uT3B0aW9uc1xyXG4gICk7XHJcblxyXG4gIGV2ZW50UnVsZS5hZGRUYXJnZXQobmV3IExhbWJkYUZ1bmN0aW9uKGxhbWJkYUZ1bmN0aW9uKSk7XHJcblxyXG4gIGdyYW50QWNjZXNzVG9EeW5hbW9UYWJsZXMoc2NvcGUsIGxhbWJkYUZ1bmN0aW9uLCBwcm9wcy5keW5hbW9UYWJsZU5hbWVzKTtcclxuXHJcbiAgYWRkTGFtYmRhTGF5ZXJzKHNjb3BlLCBsYW1iZGFGdW5jdGlvbiwgcHJvcHMubGFtYmRhTGF5ZXJBcm4pO1xyXG5cclxuICByZXR1cm4gbGFtYmRhRnVuY3Rpb247XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVCYXNpY0xhbWJkYVByb3BzID0gKHByb3BzOiBUaW1lckpvYlByb3BzKTogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9PiB7XHJcbiAgY29uc3QgbGFtYmRhUHJvcDogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9IHtcclxuICAgIGVudHJ5OiBwcm9wcy5jb2RlUGF0aFxyXG4gICAgICA/IHBhdGguam9pbihwcm9wcy5jb2RlUGF0aClcclxuICAgICAgOiBwYXRoLmpvaW4oXHJcbiAgICAgICAgICBgLi9yZXNvdXJjZXMvbGFtYmRhcy90aW1lci1qb2JzLyR7cHJvcHMuZnVuY3Rpb25OYW1lfS9tYWluLm10c2BcclxuICAgICAgICApLFxyXG4gICAgZnVuY3Rpb25OYW1lOiBgJHtwcm9wcy5hcHBQcmVmaXggPyBgJHtwcm9wcy5hcHBQcmVmaXh9LWAgOiBcIlwifSR7XHJcbiAgICAgIHByb3BzLmZ1bmN0aW9uTmFtZVxyXG4gICAgfWAsXHJcbiAgICBoYW5kbGVyOiBcIm1haW4udHNcIixcclxuICAgIGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXHJcbiAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU19MQVRFU1QsXHJcbiAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKFxyXG4gICAgICBwcm9wcy50aW1lb3V0SW5NaW51dGVzID8gcHJvcHMudGltZW91dEluTWludXRlcyA6IDFcclxuICAgICksXHJcbiAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnksXHJcbiAgICBlbnZpcm9ubWVudDoge1xyXG4gICAgICAuLi5wcm9wcy5lbnZzLFxyXG4gICAgfSxcclxuICAgIGJ1bmRsaW5nOiB7XHJcbiAgICAgIG1pbmlmeTogdHJ1ZSxcclxuICAgICAgdGFyZ2V0OiBgZXNuZXh0YCxcclxuICAgICAgc291cmNlTWFwOiB0cnVlLFxyXG4gICAgICBzb3VyY2VNYXBNb2RlOiBTb3VyY2VNYXBNb2RlLkVYVEVSTkFMLFxyXG4gICAgICBlbnZpcm9ubWVudDoge1xyXG4gICAgICAgIC4uLnByb3BzLmVudnMsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgcm9sZTogcHJvcHMucm9sZSxcclxuICAgIGxheWVyczogdW5kZWZpbmVkLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiBsYW1iZGFQcm9wO1xyXG59O1xyXG5cclxuY29uc3QgYWRkSW52b2tlUGVybWlzc2lvblRvTGFtYmRhRm9yRXZlbnRzID0gKGxhbWJkYTogTm9kZWpzRnVuY3Rpb24pID0+IHtcclxuICBsYW1iZGEuYWRkUGVybWlzc2lvbihgSW52b2tlUGVybWlzc2lvbi0ke2xhbWJkYS5mdW5jdGlvbk5hbWV9YCwge1xyXG4gICAgcHJpbmNpcGFsOiBuZXcgU2VydmljZVByaW5jaXBhbChTRVJWSUNFX1BSSU5DSVBBTC5FVkVOVFMpLFxyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlRXZlbnRSdWxlRm9yTGFtYmRhID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICBvcHRpb25zOiBDcm9uT3B0aW9uc1xyXG4pID0+IHtcclxuICBjb25zdCBldmVudFJ1bGUgPSBuZXcgUnVsZShcclxuICAgIHNjb3BlLFxyXG4gICAgYHNjaGVkdWxlUnVsZS0ke2xhbWJkYT8ubm9kZS5pZCB8fCBcIjAxMFwifWAsXHJcbiAgICB7XHJcbiAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5jcm9uKG9wdGlvbnMpLFxyXG4gICAgfVxyXG4gICk7XHJcblxyXG4gIHJldHVybiBldmVudFJ1bGU7XHJcbn07XHJcblxyXG5jb25zdCBncmFudEFjY2Vzc1RvRHluYW1vVGFibGVzID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICB0YWJsZU5hbWVzPzogc3RyaW5nW11cclxuKSA9PiB7XHJcbiAgaWYgKHRhYmxlTmFtZXMgJiYgdGFibGVOYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICB0YWJsZU5hbWVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xyXG4gICAgICBjb25zdCB0YWJsZSA9IFRhYmxlLmZyb21UYWJsZU5hbWUoc2NvcGUsIGAke3RhYmxlTmFtZX0tdGFibGVgLCB0YWJsZU5hbWUpO1xyXG5cclxuICAgICAgdGFibGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGxhbWJkYSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBhZGRMYW1iZGFMYXllcnMgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBsYW1iZGE6IE5vZGVqc0Z1bmN0aW9uLFxyXG4gIGxheWVyQXJucz86IHN0cmluZ1tdXHJcbikgPT4ge1xyXG4gIGlmIChsYXllckFybnMgJiYgbGF5ZXJBcm5zLmxlbmd0aCA+IDApIHtcclxuICAgIGxheWVyQXJucy5mb3JFYWNoKChhcm46IHN0cmluZywgaWR4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgbGF5ZXIgPSBMYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybihcclxuICAgICAgICBzY29wZSxcclxuICAgICAgICBgY29tbW9uLWxheWVyLSR7aWR4fWAsXHJcbiAgICAgICAgYXJuXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBsYW1iZGEuYWRkTGF5ZXJzKGxheWVyKTtcclxuICAgIH0pO1xyXG4gIH1cclxufTtcclxuIl19
|
package/package.json
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { LambdaProps } from "../interfaces/lambda";
|
|
3
|
+
import { createBasicLambda } from "../resources/lambda/create-basic-lambda-helper.js";
|
|
4
|
+
import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
|
|
5
|
+
|
|
6
|
+
export class BasicLambda extends Construct {
|
|
7
|
+
public readonly lambdaFunction: NodejsFunction;
|
|
8
|
+
|
|
9
|
+
constructor(
|
|
10
|
+
scope: Construct,
|
|
11
|
+
id: string,
|
|
12
|
+
props: LambdaProps,
|
|
13
|
+
private env: string
|
|
14
|
+
) {
|
|
15
|
+
super(scope, id);
|
|
16
|
+
|
|
17
|
+
this.lambdaFunction = createBasicLambda(scope, props);
|
|
18
|
+
}
|
|
19
|
+
}
|
package/src/constructs/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { MicroService } from "./MicroService";
|
|
2
2
|
export { TsgAuthorizerType } from "../config/types/TsgAuthorizerType";
|
|
3
3
|
export { DynamoDbSingleTable } from "./DynamoDbSingleTable";
|
|
4
|
-
export { TimerJob } from "./timer-job";
|
|
4
|
+
export { TimerJob } from "./timer-job";
|
|
5
|
+
export { BasicLambda } from "./BasicLambda";
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
2
|
import { TimerJobProps } from "../interfaces/timer-job";
|
|
3
|
-
import { createBasicLambdaTimerJob } from "../resources/lambda/create-basic-lambda";
|
|
3
|
+
import { createBasicLambdaTimerJob } from "../resources/lambda/create-basic-lambda.js";
|
|
4
|
+
import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
|
|
4
5
|
|
|
5
6
|
export class TimerJob extends Construct {
|
|
7
|
+
public readonly lambdaFunction: NodejsFunction;
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
constructor(
|
|
10
|
+
scope: Construct,
|
|
11
|
+
id: string,
|
|
12
|
+
props: TimerJobProps,
|
|
13
|
+
private env: string
|
|
14
|
+
) {
|
|
15
|
+
super(scope, id);
|
|
9
16
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
}
|
|
17
|
+
this.lambdaFunction = createBasicLambdaTimerJob(scope, props);
|
|
18
|
+
}
|
|
19
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -3,4 +3,6 @@ export { MicroserviceProps } from "./interfaces/MicroserviceProps";
|
|
|
3
3
|
export { IAppConfig } from "./config/customConfigs/IAppConfig";
|
|
4
4
|
export { MicroServiceAppConfig } from "./config/MicroserviceAppConfig";
|
|
5
5
|
export { TsgAuthorizerType } from "./config/types/TsgAuthorizerType";
|
|
6
|
-
export * from "./interfaces/timer-job/index";
|
|
6
|
+
export * from "./interfaces/timer-job/index";
|
|
7
|
+
export * from "./interfaces/lambda/index";
|
|
8
|
+
export * from "./constructs/index";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LambdaProps } from "./lambda-props";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IRole } from "aws-cdk-lib/aws-iam/lib";
|
|
2
|
+
|
|
3
|
+
export interface LambdaProps {
|
|
4
|
+
functionName: string;
|
|
5
|
+
appPrefix?: string;
|
|
6
|
+
codePath?: string;
|
|
7
|
+
memory?: number;
|
|
8
|
+
envs?: Record<string, string>;
|
|
9
|
+
role?: IRole;
|
|
10
|
+
dynamoTableNames?: string[];
|
|
11
|
+
lambdaLayerArn?: string[];
|
|
12
|
+
projectRoot?: string;
|
|
13
|
+
depsLockFilePath?: string;
|
|
14
|
+
timeoutInMinutes?: number;
|
|
15
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Duration } from "aws-cdk-lib";
|
|
2
|
+
import { ServicePrincipal } from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import { LayerVersion, Runtime } from "aws-cdk-lib/aws-lambda";
|
|
4
|
+
import {
|
|
5
|
+
NodejsFunction,
|
|
6
|
+
NodejsFunctionProps,
|
|
7
|
+
SourceMapMode,
|
|
8
|
+
} from "aws-cdk-lib/aws-lambda-nodejs";
|
|
9
|
+
import { RetentionDays } from "aws-cdk-lib/aws-logs";
|
|
10
|
+
import path = require("path");
|
|
11
|
+
import { LambdaProps } from "../../interfaces/lambda";
|
|
12
|
+
import { Construct } from "constructs";
|
|
13
|
+
import { Table } from "aws-cdk-lib/aws-dynamodb";
|
|
14
|
+
|
|
15
|
+
export const createBasicLambda = (
|
|
16
|
+
scope: Construct,
|
|
17
|
+
props: LambdaProps
|
|
18
|
+
): NodejsFunction => {
|
|
19
|
+
const lambdaProps = createBasicLambdaProps(props);
|
|
20
|
+
|
|
21
|
+
let lambdaFunction = new NodejsFunction(
|
|
22
|
+
scope,
|
|
23
|
+
`${props.appPrefix || ""}${props.functionName}`,
|
|
24
|
+
lambdaProps
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
grantAccessToDynamoTables(scope, lambdaFunction, props.dynamoTableNames);
|
|
28
|
+
|
|
29
|
+
addLambdaLayers(scope, lambdaFunction, props.lambdaLayerArn);
|
|
30
|
+
|
|
31
|
+
return lambdaFunction;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const createBasicLambdaProps = (props: LambdaProps): NodejsFunctionProps => {
|
|
35
|
+
const lambdaProp: NodejsFunctionProps = {
|
|
36
|
+
entry: props.codePath
|
|
37
|
+
? path.join(props.codePath)
|
|
38
|
+
: path.join(`./resources/lambdas/${props.functionName}/main.mts`),
|
|
39
|
+
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${
|
|
40
|
+
props.functionName
|
|
41
|
+
}`,
|
|
42
|
+
handler: "main.ts",
|
|
43
|
+
logRetention: RetentionDays.TWO_WEEKS,
|
|
44
|
+
runtime: Runtime.NODEJS_LATEST,
|
|
45
|
+
timeout: Duration.minutes(
|
|
46
|
+
props.timeoutInMinutes ? props.timeoutInMinutes : 1
|
|
47
|
+
),
|
|
48
|
+
memorySize: props.memory,
|
|
49
|
+
environment: {
|
|
50
|
+
...props.envs,
|
|
51
|
+
},
|
|
52
|
+
bundling: {
|
|
53
|
+
minify: true,
|
|
54
|
+
target: `esnext`,
|
|
55
|
+
sourceMap: true,
|
|
56
|
+
sourceMapMode: SourceMapMode.EXTERNAL,
|
|
57
|
+
environment: {
|
|
58
|
+
...props.envs,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
role: props.role,
|
|
62
|
+
layers: undefined,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
return lambdaProp;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const grantAccessToDynamoTables = (
|
|
69
|
+
scope: Construct,
|
|
70
|
+
lambda: NodejsFunction,
|
|
71
|
+
tableNames?: string[]
|
|
72
|
+
) => {
|
|
73
|
+
if (tableNames && tableNames.length > 0) {
|
|
74
|
+
tableNames.forEach((tableName) => {
|
|
75
|
+
const table = Table.fromTableName(scope, `${tableName}-table`, tableName);
|
|
76
|
+
|
|
77
|
+
table.grantReadWriteData(lambda);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const addLambdaLayers = (
|
|
83
|
+
scope: Construct,
|
|
84
|
+
lambda: NodejsFunction,
|
|
85
|
+
layerArns?: string[]
|
|
86
|
+
) => {
|
|
87
|
+
if (layerArns && layerArns.length > 0) {
|
|
88
|
+
layerArns.forEach((arn: string, idx: number) => {
|
|
89
|
+
const layer = LayerVersion.fromLayerVersionArn(
|
|
90
|
+
scope,
|
|
91
|
+
`common-layer-${idx}`,
|
|
92
|
+
arn
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
lambda.addLayers(layer);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
};
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { Duration } from "aws-cdk-lib";
|
|
2
2
|
import { ServicePrincipal } from "aws-cdk-lib/aws-iam";
|
|
3
3
|
import { LayerVersion, Runtime } from "aws-cdk-lib/aws-lambda";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
NodejsFunction,
|
|
6
|
+
NodejsFunctionProps,
|
|
7
|
+
SourceMapMode,
|
|
8
|
+
} from "aws-cdk-lib/aws-lambda-nodejs";
|
|
5
9
|
import { RetentionDays } from "aws-cdk-lib/aws-logs";
|
|
6
10
|
import path = require("path");
|
|
7
11
|
import { TimerJobProps } from "../../interfaces/timer-job";
|
|
@@ -11,94 +15,121 @@ import { CronOptions, Rule, Schedule } from "aws-cdk-lib/aws-events";
|
|
|
11
15
|
import { LambdaFunction } from "aws-cdk-lib/aws-events-targets";
|
|
12
16
|
import { Table } from "aws-cdk-lib/aws-dynamodb";
|
|
13
17
|
|
|
18
|
+
export const createBasicLambdaTimerJob = (
|
|
19
|
+
scope: Construct,
|
|
20
|
+
props: TimerJobProps
|
|
21
|
+
): NodejsFunction => {
|
|
22
|
+
const lambdaProps = createBasicLambdaProps(props);
|
|
14
23
|
|
|
24
|
+
let lambdaFunction = new NodejsFunction(
|
|
25
|
+
scope,
|
|
26
|
+
`${props.appPrefix}${props.functionName}`,
|
|
27
|
+
lambdaProps
|
|
28
|
+
);
|
|
15
29
|
|
|
16
|
-
|
|
30
|
+
addInvokePermissionToLambdaForEvents(lambdaFunction);
|
|
17
31
|
|
|
18
|
-
|
|
32
|
+
const eventRule = createEventRuleForLambda(
|
|
33
|
+
scope,
|
|
34
|
+
lambdaFunction,
|
|
35
|
+
props.cronOptions
|
|
36
|
+
);
|
|
19
37
|
|
|
20
|
-
|
|
38
|
+
eventRule.addTarget(new LambdaFunction(lambdaFunction));
|
|
21
39
|
|
|
22
|
-
|
|
40
|
+
grantAccessToDynamoTables(scope, lambdaFunction, props.dynamoTableNames);
|
|
23
41
|
|
|
24
|
-
|
|
42
|
+
addLambdaLayers(scope, lambdaFunction, props.lambdaLayerArn);
|
|
25
43
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
grantAccessToDynamoTables(scope, lambdaFunction, props.dynamoTableNames);
|
|
29
|
-
|
|
30
|
-
addLambdaLayers(scope, lambdaFunction, props.lambdaLayerArn);
|
|
44
|
+
return lambdaFunction;
|
|
31
45
|
};
|
|
32
46
|
|
|
33
|
-
const createBasicLambdaProps = (props: TimerJobProps) => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
47
|
+
const createBasicLambdaProps = (props: TimerJobProps): NodejsFunctionProps => {
|
|
48
|
+
const lambdaProp: NodejsFunctionProps = {
|
|
49
|
+
entry: props.codePath
|
|
50
|
+
? path.join(props.codePath)
|
|
51
|
+
: path.join(
|
|
52
|
+
`./resources/lambdas/timer-jobs/${props.functionName}/main.mts`
|
|
53
|
+
),
|
|
54
|
+
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${
|
|
55
|
+
props.functionName
|
|
56
|
+
}`,
|
|
57
|
+
handler: "main.ts",
|
|
58
|
+
logRetention: RetentionDays.TWO_WEEKS,
|
|
59
|
+
runtime: Runtime.NODEJS_LATEST,
|
|
60
|
+
timeout: Duration.minutes(
|
|
61
|
+
props.timeoutInMinutes ? props.timeoutInMinutes : 1
|
|
62
|
+
),
|
|
63
|
+
memorySize: props.memory,
|
|
64
|
+
environment: {
|
|
65
|
+
...props.envs,
|
|
66
|
+
},
|
|
67
|
+
bundling: {
|
|
68
|
+
minify: true,
|
|
69
|
+
target: `esnext`,
|
|
70
|
+
sourceMap: true,
|
|
71
|
+
sourceMapMode: SourceMapMode.EXTERNAL,
|
|
72
|
+
environment: {
|
|
73
|
+
...props.envs,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
role: props.role,
|
|
77
|
+
layers: undefined,
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
return lambdaProp;
|
|
60
81
|
};
|
|
61
82
|
|
|
62
83
|
const addInvokePermissionToLambdaForEvents = (lambda: NodejsFunction) => {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
});
|
|
84
|
+
lambda.addPermission(`InvokePermission-${lambda.functionName}`, {
|
|
85
|
+
principal: new ServicePrincipal(SERVICE_PRINCIPAL.EVENTS),
|
|
86
|
+
});
|
|
67
87
|
};
|
|
68
88
|
|
|
69
|
-
const createEventRuleForLambda = (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
89
|
+
const createEventRuleForLambda = (
|
|
90
|
+
scope: Construct,
|
|
91
|
+
lambda: NodejsFunction,
|
|
92
|
+
options: CronOptions
|
|
93
|
+
) => {
|
|
94
|
+
const eventRule = new Rule(
|
|
95
|
+
scope,
|
|
96
|
+
`scheduleRule-${lambda?.node.id || "010"}`,
|
|
97
|
+
{
|
|
98
|
+
schedule: Schedule.cron(options),
|
|
99
|
+
}
|
|
100
|
+
);
|
|
74
101
|
|
|
75
|
-
|
|
102
|
+
return eventRule;
|
|
76
103
|
};
|
|
77
104
|
|
|
78
|
-
const grantAccessToDynamoTables = (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
105
|
+
const grantAccessToDynamoTables = (
|
|
106
|
+
scope: Construct,
|
|
107
|
+
lambda: NodejsFunction,
|
|
108
|
+
tableNames?: string[]
|
|
109
|
+
) => {
|
|
110
|
+
if (tableNames && tableNames.length > 0) {
|
|
111
|
+
tableNames.forEach((tableName) => {
|
|
112
|
+
const table = Table.fromTableName(scope, `${tableName}-table`, tableName);
|
|
113
|
+
|
|
114
|
+
table.grantReadWriteData(lambda);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
92
117
|
};
|
|
93
118
|
|
|
94
|
-
const addLambdaLayers = (
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
119
|
+
const addLambdaLayers = (
|
|
120
|
+
scope: Construct,
|
|
121
|
+
lambda: NodejsFunction,
|
|
122
|
+
layerArns?: string[]
|
|
123
|
+
) => {
|
|
124
|
+
if (layerArns && layerArns.length > 0) {
|
|
125
|
+
layerArns.forEach((arn: string, idx: number) => {
|
|
126
|
+
const layer = LayerVersion.fromLayerVersionArn(
|
|
127
|
+
scope,
|
|
128
|
+
`common-layer-${idx}`,
|
|
129
|
+
arn
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
lambda.addLayers(layer);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
104
135
|
};
|