@sylvesterllc/aws-constructs 1.1.11 → 1.1.13

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.
Files changed (179) hide show
  1. package/.github/workflows/publish.yml +58 -38
  2. package/__tests__/app-config.test.ts +32 -32
  3. package/__tests__/data/testConfig.ts +146 -146
  4. package/__tests__/mocks/ResourceMock.ts +9 -9
  5. package/__tests__/router.test.ts +194 -194
  6. package/dist/config/AppConfig.js +1 -1
  7. package/dist/config/Constants.js +1 -1
  8. package/dist/config/Environments.js +1 -1
  9. package/dist/config/MicroserviceAppConfig.js +1 -1
  10. package/dist/config/ServiceBundleConfig.js +1 -1
  11. package/dist/config/bishopConfig.js +1 -1
  12. package/dist/config/customConfigs/ApiAppConfig.js +1 -1
  13. package/dist/config/customConfigs/GlobalAppConfig.js +1 -1
  14. package/dist/config/customConfigs/IAppConfig.js +1 -1
  15. package/dist/config/customConfigs/ResourceAppConfig.js +1 -1
  16. package/dist/config/microServiceConfig.js +1 -1
  17. package/dist/config/types/LogDuration.js +1 -1
  18. package/dist/config/types/TsgAuthorizerProp.js +1 -1
  19. package/dist/config/types/TsgAuthorizerType.js +1 -1
  20. package/dist/config/types/TsgCdkConfigType.js +1 -1
  21. package/dist/config/types/TsgCognitoConfig.js +1 -1
  22. package/dist/config/types/TsgDnsConfig.js +1 -1
  23. package/dist/config/types/TsgDynamoDbProp.js +1 -1
  24. package/dist/config/types/TsgDynamoIndex.js +1 -1
  25. package/dist/config/types/TsgDynamoProp.js +1 -1
  26. package/dist/config/types/TsgDynamoTable.js +1 -1
  27. package/dist/config/types/TsgDynamoTableRef.js +1 -1
  28. package/dist/config/types/TsgEc2Prop.js +1 -1
  29. package/dist/config/types/TsgKeyPair.js +1 -1
  30. package/dist/config/types/TsgLambda.js +1 -1
  31. package/dist/config/types/TsgLambdaLayerProp.js +1 -1
  32. package/dist/config/types/TsgLambdaMap.js +1 -1
  33. package/dist/config/types/TsgLambdaName.js +1 -1
  34. package/dist/config/types/TsgLambdaNode.js +1 -1
  35. package/dist/config/types/TsgLambdaProp.js +1 -1
  36. package/dist/config/types/TsgLambdaProps.js +1 -1
  37. package/dist/config/types/TsgLambdaRoutable.js +1 -1
  38. package/dist/config/types/index.js +1 -1
  39. package/dist/constants/aws-service-principal-constants.d.ts +3 -0
  40. package/dist/constants/aws-service-principal-constants.js +7 -0
  41. package/dist/constructs/DynamoDbSingleTable.js +1 -1
  42. package/dist/constructs/MicroService.js +1 -1
  43. package/dist/constructs/index.d.ts +1 -0
  44. package/dist/constructs/index.js +4 -2
  45. package/dist/constructs/timer-job.d.ts +6 -0
  46. package/dist/constructs/timer-job.js +15 -0
  47. package/dist/helpers/logger.js +1 -1
  48. package/dist/helpers/util-helper.js +1 -1
  49. package/dist/index.d.ts +2 -1
  50. package/dist/index.js +18 -4
  51. package/dist/interfaces/ApiLambdaResult.js +1 -1
  52. package/dist/interfaces/BaseResourceProps.js +1 -1
  53. package/dist/interfaces/CreateLambdaFunctionInput.js +1 -1
  54. package/dist/interfaces/MicroserviceProps.js +1 -1
  55. package/dist/interfaces/timer-job/index.d.ts +1 -0
  56. package/dist/interfaces/timer-job/index.js +18 -0
  57. package/dist/interfaces/timer-job/timer-job-props.d.ts +14 -0
  58. package/dist/interfaces/timer-job/timer-job-props.js +3 -0
  59. package/dist/resources/base/baseResource.js +1 -1
  60. package/dist/resources/base/tsgBaseResource.js +1 -1
  61. package/dist/resources/certificate/createCertificate.js +1 -1
  62. package/dist/resources/cognito/createCognito.js +1 -1
  63. package/dist/resources/cognito/createCognitoProps.js +1 -1
  64. package/dist/resources/customResource/createSeedDatabaseCustomResource.js +1 -1
  65. package/dist/resources/dynamodb/CreateDynamo.js +1 -1
  66. package/dist/resources/dynamodb/CreateDynamoSingleTableDesign.js +1 -1
  67. package/dist/resources/ec2/create-ec2-instance.js +3 -3
  68. package/dist/resources/ecr/CreateEcr.js +2 -2
  69. package/dist/resources/gateway/CreateApiAndAttachLambdas.js +1 -1
  70. package/dist/resources/gateway/createApi.js +1 -1
  71. package/dist/resources/gateway/createApiKey.js +1 -1
  72. package/dist/resources/helpers/createCommonLayer.js +1 -1
  73. package/dist/resources/helpers/createRoutes.js +1 -1
  74. package/dist/resources/index.js +1 -1
  75. package/dist/resources/lambda/create-basic-lambda.d.ts +3 -0
  76. package/dist/resources/lambda/create-basic-lambda.js +77 -0
  77. package/dist/resources/lambda/createLambda.js +1 -1
  78. package/dist/resources/lambda/lambdaHelper.js +1 -1
  79. package/dist/resources/lambda-authorizer/TsgJwtTokenAuthorizer.js +1 -1
  80. package/dist/resources/lambda-authorizer/TsgRequestAuthorizer.js +1 -1
  81. package/dist/resources/lambda-authorizer/createAuthorizerHelpers.js +1 -1
  82. package/dist/resources/lambda-layer/createLambdaLayer.js +1 -1
  83. package/dist/resources/layers/common/src/nodejs/api-response/responses.js +1 -1
  84. package/dist/resources/layers/common/src/nodejs/index.js +1 -1
  85. package/dist/resources/layers/common/src/nodejs/logger/IContext.js +1 -1
  86. package/dist/resources/layers/common/src/nodejs/logger/index.js +1 -1
  87. package/dist/resources/layers/common/src/nodejs/logger/logger.js +1 -1
  88. package/dist/resources/resources/iam/policyDocuments/cognitoPolicy.js +1 -1
  89. package/dist/resources/resources/iam/roles/createRole.js +1 -1
  90. package/dist/resources/route53/CreateZone.js +1 -1
  91. package/dist/resources/route53/create-zones.js +1 -1
  92. package/dist/resources/securityManager/index.js +1 -1
  93. package/jest.config.js +8 -8
  94. package/jest.config.ts.old +20 -20
  95. package/package.json +55 -56
  96. package/readme.md +147 -147
  97. package/src/config/AppConfig.ts +106 -106
  98. package/src/config/Constants.ts +26 -26
  99. package/src/config/Environments.ts +1 -1
  100. package/src/config/MicroserviceAppConfig.ts +8 -8
  101. package/src/config/ServiceBundleConfig.ts +17 -17
  102. package/src/config/bishopConfig.ts +82 -82
  103. package/src/config/customConfigs/ApiAppConfig.ts +5 -5
  104. package/src/config/customConfigs/GlobalAppConfig.ts +10 -10
  105. package/src/config/customConfigs/IAppConfig.ts +12 -12
  106. package/src/config/customConfigs/ResourceAppConfig.ts +15 -15
  107. package/src/config/microServiceConfig.ts +83 -83
  108. package/src/config/types/LogDuration.ts +7 -7
  109. package/src/config/types/TsgAuthorizerProp.ts +8 -8
  110. package/src/config/types/TsgAuthorizerType.ts +4 -4
  111. package/src/config/types/TsgCdkConfigType.ts +2 -2
  112. package/src/config/types/TsgCognitoConfig.ts +5 -5
  113. package/src/config/types/TsgDnsConfig.ts +10 -10
  114. package/src/config/types/TsgDynamoDbProp.ts +9 -9
  115. package/src/config/types/TsgDynamoIndex.ts +15 -15
  116. package/src/config/types/TsgDynamoProp.ts +16 -16
  117. package/src/config/types/TsgDynamoTable.ts +4 -4
  118. package/src/config/types/TsgDynamoTableRef.ts +3 -3
  119. package/src/config/types/TsgEc2Prop.ts +8 -8
  120. package/src/config/types/TsgKeyPair.ts +5 -5
  121. package/src/config/types/TsgLambda.ts +5 -5
  122. package/src/config/types/TsgLambdaLayerProp.ts +4 -4
  123. package/src/config/types/TsgLambdaMap.ts +3 -3
  124. package/src/config/types/TsgLambdaName.ts +3 -3
  125. package/src/config/types/TsgLambdaNode.ts +3 -3
  126. package/src/config/types/TsgLambdaProp.ts +19 -19
  127. package/src/config/types/TsgLambdaProps.ts +17 -17
  128. package/src/config/types/TsgLambdaRoutable.ts +8 -8
  129. package/src/config/types/index.ts +11 -11
  130. package/src/constants/aws-service-principal-constants.ts +3 -0
  131. package/src/constructs/DynamoDbSingleTable.ts +12 -12
  132. package/src/constructs/MicroService.ts +131 -132
  133. package/src/constructs/index.ts +4 -3
  134. package/src/constructs/timer-job.ts +17 -0
  135. package/src/helpers/logger.ts +12 -12
  136. package/src/helpers/util-helper.ts +19 -19
  137. package/src/index.ts +6 -5
  138. package/src/interfaces/ApiLambdaResult.ts +6 -6
  139. package/src/interfaces/BaseResourceProps.ts +6 -6
  140. package/src/interfaces/CreateLambdaFunctionInput.ts +10 -10
  141. package/src/interfaces/MicroserviceProps.ts +10 -10
  142. package/src/interfaces/timer-job/index.ts +1 -0
  143. package/src/interfaces/timer-job/timer-job-props.ts +17 -0
  144. package/src/resources/base/baseResource.ts +14 -14
  145. package/src/resources/base/tsgBaseResource.ts +21 -21
  146. package/src/resources/certificate/createCertificate.ts +57 -57
  147. package/src/resources/cognito/createCognito.ts +47 -47
  148. package/src/resources/cognito/createCognitoProps.ts +46 -46
  149. package/src/resources/customResource/createSeedDatabaseCustomResource.ts +36 -36
  150. package/src/resources/dynamodb/CreateDynamo.ts +110 -110
  151. package/src/resources/dynamodb/CreateDynamoSingleTableDesign.ts +111 -111
  152. package/src/resources/ec2/create-ec2-instance.ts +52 -52
  153. package/src/resources/ecr/CreateEcr.ts +57 -57
  154. package/src/resources/gateway/CreateApiAndAttachLambdas.ts +161 -161
  155. package/src/resources/gateway/createApi.ts +173 -173
  156. package/src/resources/gateway/createApiKey.ts +88 -88
  157. package/src/resources/helpers/createCommonLayer.ts +18 -18
  158. package/src/resources/helpers/createRoutes.ts +74 -74
  159. package/src/resources/index.ts +1 -1
  160. package/src/resources/lambda/create-basic-lambda.ts +104 -0
  161. package/src/resources/lambda/createLambda.ts +203 -200
  162. package/src/resources/lambda/lambdaHelper.ts +133 -133
  163. package/src/resources/lambda-authorizer/TsgJwtTokenAuthorizer.ts +107 -107
  164. package/src/resources/lambda-authorizer/TsgRequestAuthorizer.ts +44 -44
  165. package/src/resources/lambda-authorizer/createAuthorizerHelpers.ts +76 -76
  166. package/src/resources/lambda-layer/createLambdaLayer.ts +39 -39
  167. package/src/resources/layers/common/package.json +22 -22
  168. package/src/resources/layers/common/src/nodejs/api-response/responses.ts +41 -41
  169. package/src/resources/layers/common/src/nodejs/index.ts +3 -3
  170. package/src/resources/layers/common/src/nodejs/logger/IContext.ts +6 -6
  171. package/src/resources/layers/common/src/nodejs/logger/index.ts +1 -1
  172. package/src/resources/layers/common/src/nodejs/logger/logger.ts +10 -10
  173. package/src/resources/layers/common/tsconfig.json +7 -7
  174. package/src/resources/resources/iam/policyDocuments/cognitoPolicy.ts +54 -54
  175. package/src/resources/resources/iam/roles/createRole.ts +29 -29
  176. package/src/resources/route53/CreateZone.ts +61 -61
  177. package/src/resources/route53/create-zones.ts +40 -40
  178. package/src/resources/securityManager/index.ts +23 -23
  179. package/tsconfig.json +44 -42
@@ -1,200 +1,203 @@
1
- import { CfnOutput, Duration } from "aws-cdk-lib";
2
- import { TokenAuthorizer } from "aws-cdk-lib/aws-apigateway";
3
- import { Alarm, ComparisonOperator, IAlarmAction } from "aws-cdk-lib/aws-cloudwatch";
4
- import { IRole, ManagedPolicy } from "aws-cdk-lib/aws-iam";
5
- import { LayerVersion } from "aws-cdk-lib/aws-lambda";
6
- import { NodejsFunction, NodejsFunctionProps, SourceMapMode } from "aws-cdk-lib/aws-lambda-nodejs";
7
- import { Construct } from "constructs";
8
- import * as path from 'path';
9
- import { AppConfig } from "../../config/AppConfig";
10
- import { TsgLambdaProp } from "../../config/types";
11
-
12
- import { TsgLambdaProps } from "../../config/types/TsgLambdaProps";
13
- import { CreateLambdaFunctionInput } from "../../interfaces/CreateLambdaFunctionInput";
14
- import { BaseResource } from "../base/baseResource";
15
- import { RetentionDays } from "aws-cdk-lib/aws-logs";
16
- import { LambdaHelper } from "./lambdaHelper";
17
- import { getUUID } from "../../helpers/util-helper";
18
- import { Environment } from "../../config/Environments";
19
-
20
-
21
- export class CreateLambda extends BaseResource<NodejsFunction> {
22
-
23
- public Lambdas: NodejsFunction[] = [];
24
- public LambdaRecords: Record<string, NodejsFunction> = {};
25
-
26
- constructor(scope: Construct, config: AppConfig, private layers?: LayerVersion[]) {
27
- super(scope, config);
28
-
29
- const resources = this.createResource(scope);
30
-
31
- this.createdResources = [...resources];
32
-
33
- this.Lambdas = [...resources];
34
-
35
- this.createAlarmsForLambdas(this.Lambdas);
36
-
37
- this.LambdaRecords = this.createRecordForLambda(this.Lambdas);
38
-
39
- this.createOutput(scope, resources);
40
- }
41
-
42
- protected createResource(scope: Construct): NodejsFunction[] {
43
-
44
- const result = this.createLambdas(this.config);
45
-
46
- return result;
47
- }
48
-
49
- protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
50
- createdAssets.forEach((x, idx) => {
51
-
52
- new CfnOutput(scope, `lambda-${idx}`, {
53
- // @ts-ignore
54
- value: x.functionName
55
- });
56
- });
57
- }
58
-
59
- private createLambdas(config: AppConfig): NodejsFunction[] {
60
-
61
- const createdLambdas: NodejsFunction[] = this.createLambdaFunctions(this.scope, undefined, this.layers);
62
-
63
- return createdLambdas;
64
- }
65
-
66
- private createLambdaFunctions(scope: Construct, role?: IRole, layers?: LayerVersion[]) {
67
-
68
- const createdLambdas = this.config.RESOURCES.LAMBDA.map((config: TsgLambdaProp) => {
69
-
70
- let lambdaProps = this.createLambdaProps(config, role, layers);
71
-
72
- const lambdaId = CreateLambda.getIdForLambda(config, this.config);
73
- let fctn = new NodejsFunction(scope, lambdaId, lambdaProps);
74
-
75
- return fctn;
76
- });
77
-
78
- return createdLambdas || [];
79
- }
80
-
81
- private createLambdaProps(prop: TsgLambdaProp, role?: IRole, layers?: LayerVersion[], props?: TsgLambdaProps) {
82
-
83
- return this.createLambdaFunctionProps({
84
- prop,
85
- role,
86
- layers,
87
- props
88
- });
89
- }
90
-
91
- private createLambdaFunctionProps(props: CreateLambdaFunctionInput) {
92
- const { prop, role, layers } = props;
93
-
94
- const lambdaProp: NodejsFunctionProps = {
95
- entry: path.join(prop.codePath),
96
- functionName: `${this.config.AppPrefix}-${prop.name}`,
97
- handler: prop.handler,
98
- logRetention: (!prop.logDuration) ? RetentionDays.FIVE_DAYS : LambdaHelper.getDayToSaveLogs(prop.logDuration),
99
- runtime: prop.runtime || this.config.GLOBALS.stackRuntime,
100
- timeout: prop.duration || Duration.minutes(2),
101
- memorySize: prop.memory || 512,
102
- environment: {
103
- "VERBOSE_LOGGING": "true",
104
- ...prop.environment
105
- },
106
- bundling: {
107
- minify: false,
108
- target: 'es2020',
109
- sourceMap: true,
110
- sourceMapMode: SourceMapMode.EXTERNAL,
111
- environment: prop.environment || prop.environment,
112
- },
113
- role,
114
- layers
115
-
116
- }
117
-
118
- return lambdaProp;
119
- };
120
-
121
- private createAlarmsForLambdas(lambdas: NodejsFunction[]) {
122
-
123
- const lambdaRecords = this.createRecordForLambda(lambdas);
124
-
125
- // console.log('Lambda Records:', lambdaRecords);
126
- // const lambdaNames = Object.keys(lambdaRecords);
127
- // console.log('lambda Names from Records', lambdaNames);
128
-
129
- lambdas.forEach((lambda, idx) => {
130
-
131
- const errorMetric = lambda.metricErrors({
132
- period: Duration.minutes(3),
133
-
134
- });
135
-
136
- const durationMetric = lambda.metricDuration({
137
- period: Duration.minutes(3),
138
- });
139
-
140
- const invocationMetric = lambda.metricInvocations({
141
- period: Duration.minutes(3),
142
- });
143
-
144
- const uuid = getUUID().split('-')[0];
145
-
146
- new Alarm(this.scope, `${this.config.AppPrefix}-${lambda.node.id}-error-alarm`, {
147
- metric: errorMetric,
148
- threshold: 5,
149
- comparisonOperator: ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
150
- evaluationPeriods: 3,
151
- alarmDescription: `${this.config.AppPrefix} errors over 3 min period`,
152
- alarmName: `${this.config.AppPrefix}-${lambda.node.id}-error-alarm`
153
- });
154
-
155
- new Alarm(this.scope, `${this.config.AppPrefix}-${lambda.node.id}-duration-alarm`, {
156
- metric: durationMetric,
157
- threshold: 1,
158
- comparisonOperator: ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
159
- evaluationPeriods: 3,
160
- alarmDescription: `${this.config.AppPrefix}-${lambda.node.id} duration errors over 3 min period`,
161
- alarmName: `${this.config.AppPrefix}-${lambda.node.id}-duration-alarm`
162
- });
163
-
164
- const invocationAlarm = new Alarm(this.scope, `${this.config.AppPrefix}-${lambda.node.id}-invocation-alarm`, {
165
- metric: errorMetric,
166
- threshold: 1000,
167
- comparisonOperator: ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
168
- evaluationPeriods: 3,
169
- alarmDescription: `${this.config.AppPrefix}-${lambda.node.id} errors over 3 min period`,
170
- alarmName: `${this.config.AppPrefix}-${lambda.node.id}-invocation-Metric-alarm`
171
- });
172
- });
173
- }
174
-
175
- public static getIdForLambda(lambdaProp: TsgLambdaProp, appConfig: AppConfig) {
176
- return `${appConfig.AppPrefix}-${lambdaProp.name}`.toLowerCase();
177
- }
178
-
179
- private createRecordForLambda(lambdas: NodejsFunction[]) {
180
-
181
- const names = this.config.RESOURCES.LAMBDA.map((lambda) => {
182
- return lambda.name;
183
- });
184
-
185
- const lambdaNames = [...names] as const;
186
-
187
- type LambdaName = typeof lambdaNames[number];
188
-
189
-
190
- const lambdaRecord: Record<LambdaName, NodejsFunction> = {} as Record<LambdaName, NodejsFunction>;
191
-
192
- lambdas.forEach((lambda, idx) => {
193
- lambdaRecord[lambdaNames[idx] as LambdaName] = lambdas[idx];
194
- });
195
-
196
- return lambdaRecord;
197
- }
198
- }
199
-
200
-
1
+ import { CfnOutput, Duration } from "aws-cdk-lib";
2
+ import { TokenAuthorizer } from "aws-cdk-lib/aws-apigateway";
3
+ import { Alarm, ComparisonOperator, IAlarmAction } from "aws-cdk-lib/aws-cloudwatch";
4
+ import { IRole, ManagedPolicy } from "aws-cdk-lib/aws-iam";
5
+ import { LayerVersion, Runtime } from "aws-cdk-lib/aws-lambda";
6
+ import { NodejsFunction, NodejsFunctionProps, SourceMapMode } from "aws-cdk-lib/aws-lambda-nodejs";
7
+ import { Construct } from "constructs";
8
+ import * as path from 'path';
9
+ import { AppConfig } from "../../config/AppConfig";
10
+ import { TsgLambdaProp } from "../../config/types";
11
+
12
+ import { TsgLambdaProps } from "../../config/types/TsgLambdaProps";
13
+ import { CreateLambdaFunctionInput } from "../../interfaces/CreateLambdaFunctionInput";
14
+ import { BaseResource } from "../base/baseResource";
15
+ import { RetentionDays } from "aws-cdk-lib/aws-logs";
16
+ import { LambdaHelper } from "./lambdaHelper";
17
+ import { getUUID } from "../../helpers/util-helper";
18
+
19
+
20
+ export class CreateLambda extends BaseResource<NodejsFunction> {
21
+
22
+ public Lambdas: NodejsFunction[] = [];
23
+ public LambdaRecords: Record<string, NodejsFunction> = {};
24
+
25
+ constructor(scope: Construct, config: AppConfig, private layers?: LayerVersion[]) {
26
+ super(scope, config);
27
+
28
+ const resources = this.createResource(scope);
29
+
30
+ this.createdResources = [...resources];
31
+
32
+ this.Lambdas = [...resources];
33
+
34
+ this.createAlarmsForLambdas(this.Lambdas);
35
+
36
+ this.LambdaRecords = this.createRecordForLambda(this.Lambdas);
37
+
38
+ this.createOutput(scope, resources);
39
+ }
40
+
41
+ protected createResource(scope: Construct): NodejsFunction[] {
42
+
43
+ const result = this.createLambdas(this.config);
44
+
45
+ return result;
46
+ }
47
+
48
+ protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
49
+ createdAssets.forEach((x, idx) => {
50
+
51
+ new CfnOutput(scope, `lambda-${idx}`, {
52
+ // @ts-ignore
53
+ value: x.functionName
54
+ });
55
+ });
56
+ }
57
+
58
+ private createLambdas(config: AppConfig): NodejsFunction[] {
59
+
60
+ const createdLambdas: NodejsFunction[] = this.createLambdaFunctions(this.scope, undefined, this.layers);
61
+
62
+ return createdLambdas;
63
+ }
64
+
65
+ private createLambdaFunctions(scope: Construct, role?: IRole, layers?: LayerVersion[]) {
66
+
67
+ const createdLambdas = this.config.RESOURCES.LAMBDA.map((config: TsgLambdaProp) => {
68
+
69
+ let lambdaProps = this.createLambdaProps(config, role, layers);
70
+
71
+ const lambdaId = CreateLambda.getIdForLambda(config, this.config);
72
+ let fctn = new NodejsFunction(scope, lambdaId, lambdaProps);
73
+
74
+ return fctn;
75
+ });
76
+
77
+ return createdLambdas || [];
78
+ }
79
+
80
+ private createLambdaProps(prop: TsgLambdaProp, role?: IRole, layers?: LayerVersion[], props?: TsgLambdaProps) {
81
+
82
+ return this.createLambdaFunctionProps({
83
+ prop,
84
+ role,
85
+ layers,
86
+ props
87
+ });
88
+ }
89
+
90
+ private createLambdaFunctionProps(props: CreateLambdaFunctionInput) {
91
+ const { prop, role, layers } = props;
92
+
93
+ const lambdaProp: NodejsFunctionProps = {
94
+ entry: path.join(prop.codePath),
95
+ functionName: `${this.config.AppPrefix}-${prop.name}`,
96
+ handler: prop.handler,
97
+ logRetention: (!prop.logDuration) ? RetentionDays.FIVE_DAYS : LambdaHelper.getDayToSaveLogs(prop.logDuration),
98
+ runtime: prop.runtime || this.config.GLOBALS.stackRuntime,
99
+ timeout: prop.duration || Duration.minutes(2),
100
+ memorySize: prop.memory || 512,
101
+ environment: {
102
+ "VERBOSE_LOGGING": "true",
103
+ ...prop.environment
104
+ },
105
+ bundling: {
106
+ minify: false,
107
+ target: 'es2020',
108
+ sourceMap: true,
109
+ sourceMapMode: SourceMapMode.EXTERNAL,
110
+ environment: prop.environment || prop.environment,
111
+ },
112
+ role,
113
+ layers
114
+
115
+ }
116
+
117
+ return lambdaProp;
118
+ };
119
+
120
+ private createAlarmsForLambdas(lambdas: NodejsFunction[]) {
121
+
122
+ const lambdaRecords = this.createRecordForLambda(lambdas);
123
+
124
+ // console.log('Lambda Records:', lambdaRecords);
125
+ // const lambdaNames = Object.keys(lambdaRecords);
126
+ // console.log('lambda Names from Records', lambdaNames);
127
+
128
+ lambdas.forEach((lambda, idx) => {
129
+
130
+ const errorMetric = lambda.metricErrors({
131
+ period: Duration.minutes(3),
132
+
133
+ });
134
+
135
+ const durationMetric = lambda.metricDuration({
136
+ period: Duration.minutes(3),
137
+ });
138
+
139
+ const invocationMetric = lambda.metricInvocations({
140
+ period: Duration.minutes(3),
141
+ });
142
+
143
+ const uuid = getUUID().split('-')[0];
144
+
145
+ new Alarm(this.scope, `${this.config.AppPrefix}-${lambda.node.id}-error-alarm`, {
146
+ metric: errorMetric,
147
+ threshold: 5,
148
+ comparisonOperator: ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
149
+ evaluationPeriods: 3,
150
+ alarmDescription: `${this.config.AppPrefix} errors over 3 min period`,
151
+ alarmName: `${this.config.AppPrefix}-${lambda.node.id}-error-alarm`
152
+ });
153
+
154
+ new Alarm(this.scope, `${this.config.AppPrefix}-${lambda.node.id}-duration-alarm`, {
155
+ metric: durationMetric,
156
+ threshold: 1,
157
+ comparisonOperator: ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
158
+ evaluationPeriods: 3,
159
+ alarmDescription: `${this.config.AppPrefix}-${lambda.node.id} duration errors over 3 min period`,
160
+ alarmName: `${this.config.AppPrefix}-${lambda.node.id}-duration-alarm`
161
+ });
162
+
163
+ const invocationAlarm = new Alarm(this.scope, `${this.config.AppPrefix}-${lambda.node.id}-invocation-alarm`, {
164
+ metric: errorMetric,
165
+ threshold: 1000,
166
+ comparisonOperator: ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
167
+ evaluationPeriods: 3,
168
+ alarmDescription: `${this.config.AppPrefix}-${lambda.node.id} errors over 3 min period`,
169
+ alarmName: `${this.config.AppPrefix}-${lambda.node.id}-invocation-Metric-alarm`
170
+ });
171
+ });
172
+ }
173
+
174
+ public static getIdForLambda(lambdaProp: TsgLambdaProp, appConfig: AppConfig) {
175
+ return `${appConfig.AppPrefix}-${lambdaProp.name}`.toLowerCase();
176
+ }
177
+
178
+ private createRecordForLambda(lambdas: NodejsFunction[]) {
179
+
180
+ const names = this.config.RESOURCES.LAMBDA.map((lambda) => {
181
+ return lambda.name;
182
+ });
183
+
184
+ const lambdaNames = [...names] as const;
185
+
186
+ type LambdaName = typeof lambdaNames[number];
187
+
188
+
189
+ const lambdaRecord: Record<LambdaName, NodejsFunction> = {} as Record<LambdaName, NodejsFunction>;
190
+
191
+ lambdas.forEach((lambda, idx) => {
192
+ lambdaRecord[lambdaNames[idx] as LambdaName] = lambdas[idx];
193
+ });
194
+
195
+ return lambdaRecord;
196
+ }
197
+
198
+
199
+
200
+
201
+ }
202
+
203
+