@sylvesterllc/aws-constructs 1.1.60 → 1.1.61

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 (182) hide show
  1. package/.github/workflows/publish.yml +69 -56
  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.js +1 -1
  40. package/dist/constructs/BasicLambda.js +3 -3
  41. package/dist/constructs/DynamoDbSingleTable.js +1 -1
  42. package/dist/constructs/MicroService.js +1 -1
  43. package/dist/constructs/basic-queue.js +1 -1
  44. package/dist/constructs/index.js +1 -1
  45. package/dist/constructs/timer-job.js +3 -3
  46. package/dist/helpers/logger.js +1 -1
  47. package/dist/helpers/util-helper.js +1 -1
  48. package/dist/index.js +1 -1
  49. package/dist/interfaces/ApiLambdaResult.js +1 -1
  50. package/dist/interfaces/BaseResourceProps.js +1 -1
  51. package/dist/interfaces/CreateLambdaFunctionInput.js +1 -1
  52. package/dist/interfaces/MicroserviceProps.js +1 -1
  53. package/dist/interfaces/lambda/index.js +1 -1
  54. package/dist/interfaces/lambda/lambda-props.js +1 -1
  55. package/dist/interfaces/timer-job/timer-job-props.js +1 -1
  56. package/dist/resources/base/baseResource.js +1 -1
  57. package/dist/resources/base/tsgBaseResource.js +1 -1
  58. package/dist/resources/certificate/createCertificate.js +1 -1
  59. package/dist/resources/cognito/createCognito.js +1 -1
  60. package/dist/resources/cognito/createCognitoProps.js +1 -1
  61. package/dist/resources/customResource/createSeedDatabaseCustomResource.js +1 -1
  62. package/dist/resources/dynamodb/CreateDynamo.js +1 -1
  63. package/dist/resources/dynamodb/CreateDynamoSingleTableDesign.js +1 -1
  64. package/dist/resources/ec2/create-ec2-instance.js +3 -3
  65. package/dist/resources/ecr/CreateEcr.js +2 -2
  66. package/dist/resources/gateway/CreateApiAndAttachLambdas.js +1 -1
  67. package/dist/resources/gateway/createApi.js +1 -1
  68. package/dist/resources/gateway/createApiKey.js +1 -1
  69. package/dist/resources/helpers/createCommonLayer.js +1 -1
  70. package/dist/resources/helpers/createRoutes.js +1 -1
  71. package/dist/resources/index.js +1 -1
  72. package/dist/resources/lambda/create-basic-lambda-helper.js +1 -1
  73. package/dist/resources/lambda/create-basic-lambda.js +1 -1
  74. package/dist/resources/lambda/createLambda.js +1 -1
  75. package/dist/resources/lambda/lambdaHelper.js +1 -1
  76. package/dist/resources/lambda-authorizer/TsgJwtTokenAuthorizer.js +1 -1
  77. package/dist/resources/lambda-authorizer/TsgRequestAuthorizer.js +1 -1
  78. package/dist/resources/lambda-authorizer/createAuthorizerHelpers.js +1 -1
  79. package/dist/resources/lambda-layer/createLambdaLayer.js +1 -1
  80. package/dist/resources/layers/common/src/nodejs/api-response/responses.js +1 -1
  81. package/dist/resources/layers/common/src/nodejs/index.js +1 -1
  82. package/dist/resources/layers/common/src/nodejs/logger/IContext.js +1 -1
  83. package/dist/resources/layers/common/src/nodejs/logger/index.js +1 -1
  84. package/dist/resources/layers/common/src/nodejs/logger/logger.js +1 -1
  85. package/dist/resources/resources/iam/policyDocuments/cognitoPolicy.js +1 -1
  86. package/dist/resources/resources/iam/roles/createRole.js +1 -1
  87. package/dist/resources/route53/CreateZone.js +1 -1
  88. package/dist/resources/route53/create-zones.js +1 -1
  89. package/dist/resources/securityManager/index.js +1 -1
  90. package/dist/resources/sqs/create-sqs-resource.js +1 -1
  91. package/jest.config.js +8 -8
  92. package/jest.config.ts.old +20 -20
  93. package/package.json +1 -1
  94. package/readme.md +147 -147
  95. package/src/config/AppConfig.ts +106 -106
  96. package/src/config/Constants.ts +26 -26
  97. package/src/config/Environments.ts +1 -1
  98. package/src/config/MicroserviceAppConfig.ts +8 -8
  99. package/src/config/ServiceBundleConfig.ts +17 -17
  100. package/src/config/bishopConfig.ts +82 -82
  101. package/src/config/customConfigs/ApiAppConfig.ts +5 -5
  102. package/src/config/customConfigs/GlobalAppConfig.ts +10 -10
  103. package/src/config/customConfigs/IAppConfig.ts +12 -12
  104. package/src/config/customConfigs/ResourceAppConfig.ts +15 -15
  105. package/src/config/microServiceConfig.ts +83 -83
  106. package/src/config/types/LogDuration.ts +7 -7
  107. package/src/config/types/TsgAuthorizerProp.ts +8 -8
  108. package/src/config/types/TsgAuthorizerType.ts +4 -4
  109. package/src/config/types/TsgCdkConfigType.ts +2 -2
  110. package/src/config/types/TsgCognitoConfig.ts +5 -5
  111. package/src/config/types/TsgDnsConfig.ts +10 -10
  112. package/src/config/types/TsgDynamoDbProp.ts +9 -9
  113. package/src/config/types/TsgDynamoIndex.ts +15 -15
  114. package/src/config/types/TsgDynamoProp.ts +16 -16
  115. package/src/config/types/TsgDynamoTable.ts +4 -4
  116. package/src/config/types/TsgDynamoTableRef.ts +3 -3
  117. package/src/config/types/TsgEc2Prop.ts +8 -8
  118. package/src/config/types/TsgKeyPair.ts +5 -5
  119. package/src/config/types/TsgLambda.ts +5 -5
  120. package/src/config/types/TsgLambdaLayerProp.ts +4 -4
  121. package/src/config/types/TsgLambdaMap.ts +3 -3
  122. package/src/config/types/TsgLambdaName.ts +3 -3
  123. package/src/config/types/TsgLambdaNode.ts +3 -3
  124. package/src/config/types/TsgLambdaProp.ts +19 -19
  125. package/src/config/types/TsgLambdaProps.ts +17 -17
  126. package/src/config/types/TsgLambdaRoutable.ts +8 -8
  127. package/src/config/types/index.ts +11 -11
  128. package/src/constants/aws-service-principal-constants.ts +2 -2
  129. package/src/constructs/BasicLambda.ts +19 -19
  130. package/src/constructs/DynamoDbSingleTable.ts +9 -9
  131. package/src/constructs/MicroService.ts +131 -131
  132. package/src/constructs/basic-queue.ts +18 -18
  133. package/src/constructs/index.ts +6 -6
  134. package/src/constructs/timer-job.ts +19 -19
  135. package/src/helpers/logger.ts +12 -12
  136. package/src/helpers/util-helper.ts +19 -19
  137. package/src/index.ts +8 -8
  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/lambda/index.ts +1 -1
  143. package/src/interfaces/lambda/lambda-props.ts +15 -15
  144. package/src/interfaces/timer-job/timer-job-props.ts +6 -6
  145. package/src/resources/base/baseResource.ts +14 -14
  146. package/src/resources/base/tsgBaseResource.ts +21 -21
  147. package/src/resources/certificate/createCertificate.ts +57 -57
  148. package/src/resources/cognito/createCognito.ts +47 -47
  149. package/src/resources/cognito/createCognitoProps.ts +46 -46
  150. package/src/resources/customResource/createSeedDatabaseCustomResource.ts +36 -36
  151. package/src/resources/dynamodb/CreateDynamo.ts +110 -110
  152. package/src/resources/dynamodb/CreateDynamoSingleTableDesign.ts +118 -118
  153. package/src/resources/ec2/create-ec2-instance.ts +52 -52
  154. package/src/resources/ecr/CreateEcr.ts +57 -57
  155. package/src/resources/gateway/CreateApiAndAttachLambdas.ts +161 -161
  156. package/src/resources/gateway/createApi.ts +173 -173
  157. package/src/resources/gateway/createApiKey.ts +88 -88
  158. package/src/resources/helpers/createCommonLayer.ts +18 -18
  159. package/src/resources/helpers/createRoutes.ts +74 -74
  160. package/src/resources/index.ts +1 -1
  161. package/src/resources/lambda/create-basic-lambda-helper.ts +124 -124
  162. package/src/resources/lambda/create-basic-lambda.ts +162 -162
  163. package/src/resources/lambda/createLambda.ts +239 -239
  164. package/src/resources/lambda/lambdaHelper.ts +133 -133
  165. package/src/resources/lambda-authorizer/TsgJwtTokenAuthorizer.ts +107 -107
  166. package/src/resources/lambda-authorizer/TsgRequestAuthorizer.ts +44 -44
  167. package/src/resources/lambda-authorizer/createAuthorizerHelpers.ts +76 -76
  168. package/src/resources/lambda-layer/createLambdaLayer.ts +39 -39
  169. package/src/resources/layers/common/package.json +22 -22
  170. package/src/resources/layers/common/src/nodejs/api-response/responses.ts +41 -41
  171. package/src/resources/layers/common/src/nodejs/index.ts +3 -3
  172. package/src/resources/layers/common/src/nodejs/logger/IContext.ts +6 -6
  173. package/src/resources/layers/common/src/nodejs/logger/index.ts +1 -1
  174. package/src/resources/layers/common/src/nodejs/logger/logger.ts +10 -10
  175. package/src/resources/layers/common/tsconfig.json +7 -7
  176. package/src/resources/resources/iam/policyDocuments/cognitoPolicy.ts +54 -54
  177. package/src/resources/resources/iam/roles/createRole.ts +29 -29
  178. package/src/resources/route53/CreateZone.ts +61 -61
  179. package/src/resources/route53/create-zones.ts +40 -40
  180. package/src/resources/securityManager/index.ts +23 -23
  181. package/src/resources/sqs/create-sqs-resource.ts +26 -26
  182. package/tsconfig.json +46 -46
@@ -1,111 +1,111 @@
1
- import { CfnOutput, RemovalPolicy } from "aws-cdk-lib";
2
- import { GlobalSecondaryIndexProps,Table, TableProps } from "aws-cdk-lib/aws-dynamodb";
3
- import { Construct } from "constructs";
4
- import { AppConfig } from "../../config/AppConfig";
5
- import { BaseResource } from "../base/baseResource";
6
-
7
-
8
- export class CreateDynamoDb extends BaseResource<Table> {
9
-
10
- static ReadWriteActions: string[] = [
11
- "dynamodb:BatchGetItem",
12
- "dynamodb:BatchWriteItem",
13
- "dynamodb:ConditionCheckItem",
14
- "dynamodb:DeleteItem",
15
- "dynamodb:DescribeTable",
16
- "dynamodb:GetItem",
17
- "dynamodb:GetRecords",
18
- "dynamodb:GetShardIterator",
19
- "dynamodb:PutItem",
20
- "dynamodb:Query",
21
- "dynamodb:Scan",
22
- "dynamodb:UpdateItem",
23
- ];
24
-
25
- get CreatedTables() {
26
- return this.createdResources;
27
- }
28
-
29
- constructor(protected scope: Construct, protected config: AppConfig) {
30
- super(scope, config);
31
-
32
- this.createdResources = this.createResource(scope);
33
-
34
- if (this.createdResources) {
35
- this.createOutput(scope, this.createdResources);
36
- }
37
- }
38
-
39
- protected createResource(scope: Construct): Table[] {
40
-
41
- const props = this.createProps();
42
-
43
- const tables = props?.map((prop: any, idx: number) => {
44
- const dbTable = new Table(scope, `${prop.tableName}`, {
45
- ...prop,
46
- removalPolicy: RemovalPolicy.DESTROY,
47
-
48
- });
49
-
50
-
51
-
52
- this.config.RESOURCES.DYNAMO?.TABLES?.[idx].indexes.map((gsi) => {
53
-
54
- const gsiProps: GlobalSecondaryIndexProps = {
55
- indexName: gsi.indexName,
56
- partitionKey: gsi.partitionKey,
57
- sortKey: gsi.sortKey,
58
- projectionType: gsi.projectionType
59
-
60
- };
61
-
62
- dbTable.addGlobalSecondaryIndex(gsiProps);
63
- });
64
- return dbTable;
65
- });
66
-
67
- return tables ?? [];
68
-
69
-
70
-
71
- }
72
-
73
-
74
- protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
75
- this.createdResources!.forEach((x, idx) => {
76
- new CfnOutput(scope, `dynamoTable${idx}`, {
77
- value: x.tableName
78
- });
79
- });
80
- }
81
-
82
- private createProps() {
83
- const props = this.config.RESOURCES?.DYNAMO?.TABLES?.map((x) => {
84
-
85
- const prop: any = {};
86
-
87
- prop.tableName = this.generateDbName(x.tableName);
88
-
89
- prop.partitionKey = {
90
- name: x.primaryKey.name,
91
- type: x.primaryKey.type
92
- };
93
-
94
- prop.billingMode = x.billingMode;
95
-
96
- if (x.sortKey) {
97
- prop.sortKey = {
98
- name: x.sortKey.name,
99
- type: x.sortKey.type,
100
- }
101
- }
102
- return prop as TableProps;
103
- });
104
-
105
- return props;
106
- }
107
-
108
- private generateDbName(tableName: string) {
109
- return `${this.config.AppPrefix}-${tableName}`;
110
- }
1
+ import { CfnOutput, RemovalPolicy } from "aws-cdk-lib";
2
+ import { GlobalSecondaryIndexProps,Table, TableProps } from "aws-cdk-lib/aws-dynamodb";
3
+ import { Construct } from "constructs";
4
+ import { AppConfig } from "../../config/AppConfig";
5
+ import { BaseResource } from "../base/baseResource";
6
+
7
+
8
+ export class CreateDynamoDb extends BaseResource<Table> {
9
+
10
+ static ReadWriteActions: string[] = [
11
+ "dynamodb:BatchGetItem",
12
+ "dynamodb:BatchWriteItem",
13
+ "dynamodb:ConditionCheckItem",
14
+ "dynamodb:DeleteItem",
15
+ "dynamodb:DescribeTable",
16
+ "dynamodb:GetItem",
17
+ "dynamodb:GetRecords",
18
+ "dynamodb:GetShardIterator",
19
+ "dynamodb:PutItem",
20
+ "dynamodb:Query",
21
+ "dynamodb:Scan",
22
+ "dynamodb:UpdateItem",
23
+ ];
24
+
25
+ get CreatedTables() {
26
+ return this.createdResources;
27
+ }
28
+
29
+ constructor(protected scope: Construct, protected config: AppConfig) {
30
+ super(scope, config);
31
+
32
+ this.createdResources = this.createResource(scope);
33
+
34
+ if (this.createdResources) {
35
+ this.createOutput(scope, this.createdResources);
36
+ }
37
+ }
38
+
39
+ protected createResource(scope: Construct): Table[] {
40
+
41
+ const props = this.createProps();
42
+
43
+ const tables = props?.map((prop: any, idx: number) => {
44
+ const dbTable = new Table(scope, `${prop.tableName}`, {
45
+ ...prop,
46
+ removalPolicy: RemovalPolicy.DESTROY,
47
+
48
+ });
49
+
50
+
51
+
52
+ this.config.RESOURCES.DYNAMO?.TABLES?.[idx].indexes.map((gsi) => {
53
+
54
+ const gsiProps: GlobalSecondaryIndexProps = {
55
+ indexName: gsi.indexName,
56
+ partitionKey: gsi.partitionKey,
57
+ sortKey: gsi.sortKey,
58
+ projectionType: gsi.projectionType
59
+
60
+ };
61
+
62
+ dbTable.addGlobalSecondaryIndex(gsiProps);
63
+ });
64
+ return dbTable;
65
+ });
66
+
67
+ return tables ?? [];
68
+
69
+
70
+
71
+ }
72
+
73
+
74
+ protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
75
+ this.createdResources!.forEach((x, idx) => {
76
+ new CfnOutput(scope, `dynamoTable${idx}`, {
77
+ value: x.tableName
78
+ });
79
+ });
80
+ }
81
+
82
+ private createProps() {
83
+ const props = this.config.RESOURCES?.DYNAMO?.TABLES?.map((x) => {
84
+
85
+ const prop: any = {};
86
+
87
+ prop.tableName = this.generateDbName(x.tableName);
88
+
89
+ prop.partitionKey = {
90
+ name: x.primaryKey.name,
91
+ type: x.primaryKey.type
92
+ };
93
+
94
+ prop.billingMode = x.billingMode;
95
+
96
+ if (x.sortKey) {
97
+ prop.sortKey = {
98
+ name: x.sortKey.name,
99
+ type: x.sortKey.type,
100
+ }
101
+ }
102
+ return prop as TableProps;
103
+ });
104
+
105
+ return props;
106
+ }
107
+
108
+ private generateDbName(tableName: string) {
109
+ return `${this.config.AppPrefix}-${tableName}`;
110
+ }
111
111
  }
@@ -1,118 +1,118 @@
1
- import { CfnOutput, RemovalPolicy } from "aws-cdk-lib";
2
- import {
3
- AttributeType,
4
- BillingMode,
5
- GlobalSecondaryIndexProps,
6
- ProjectionType,
7
- Table,
8
- TableProps,
9
- } from "aws-cdk-lib/aws-dynamodb";
10
- import { Construct } from "constructs";
11
-
12
- export class CreateDynamoSingleTableDesign extends Construct {
13
- public readonly createdResource: Table;
14
- static ReadWriteActions: string[] = [
15
- "dynamodb:BatchGetItem",
16
- "dynamodb:BatchWriteItem",
17
- "dynamodb:ConditionCheckItem",
18
- "dynamodb:DeleteItem",
19
- "dynamodb:DescribeTable",
20
- "dynamodb:GetItem",
21
- "dynamodb:GetRecords",
22
- "dynamodb:GetShardIterator",
23
- "dynamodb:PutItem",
24
- "dynamodb:Query",
25
- "dynamodb:Scan",
26
- "dynamodb:UpdateItem",
27
- ];
28
-
29
- get CreatedTable() {
30
- return this.createdResource;
31
- }
32
-
33
- constructor(
34
- scope: Construct,
35
- id: string,
36
- protected tableName: string,
37
- ) {
38
- super(scope, id);
39
- this.createdResource = this.createResource();
40
- this.createOutput();
41
- }
42
-
43
- protected createResource(): Table {
44
- const dbTable = new Table(this, "Table", {
45
- tableName: this.tableName,
46
- removalPolicy: RemovalPolicy.DESTROY,
47
-
48
- partitionKey: {
49
- name: "pk",
50
- type: AttributeType.STRING,
51
- },
52
- sortKey: {
53
- name: "sk",
54
- type: AttributeType.STRING,
55
- },
56
- billingMode: BillingMode.PAY_PER_REQUEST,
57
- });
58
-
59
- const gsiIndexes = [
60
- {
61
- indexName: "gsi1Index",
62
- partitionKey: {
63
- name: "gsi1pk",
64
- type: AttributeType.STRING,
65
- },
66
- sortKey: {
67
- name: "gsi1sk",
68
- type: AttributeType.STRING,
69
- },
70
- projectionType: ProjectionType.ALL,
71
- },
72
- {
73
- indexName: "gsi2Index",
74
- partitionKey: {
75
- name: "gsi2pk",
76
- type: AttributeType.STRING,
77
- },
78
- sortKey: {
79
- name: "gsi2sk",
80
- type: AttributeType.STRING,
81
- },
82
- projectionType: ProjectionType.ALL,
83
- },
84
- {
85
- indexName: "gsi3Index",
86
- partitionKey: {
87
- name: "gsi3pk",
88
- type: AttributeType.STRING,
89
- },
90
- sortKey: {
91
- name: "gsi3sk",
92
- type: AttributeType.STRING,
93
- },
94
- projectionType: ProjectionType.ALL,
95
- },
96
- ];
97
-
98
- gsiIndexes.map((gsi) => {
99
- const gsiProps: GlobalSecondaryIndexProps = {
100
- indexName: gsi.indexName,
101
- partitionKey: gsi.partitionKey,
102
- sortKey: gsi.sortKey,
103
- projectionType: gsi.projectionType,
104
- };
105
-
106
- dbTable.addGlobalSecondaryIndex(gsiProps);
107
- });
108
-
109
- return dbTable;
110
- }
111
-
112
- protected createOutput(): void {
113
- // Logical IDs must not include unresolved tokens; use a stable ID
114
- new CfnOutput(this, "TableOutput", {
115
- value: `Table Name: ${this.createdResource?.tableName}\t Table Arn: ${this.createdResource?.tableArn}`,
116
- });
117
- }
118
- }
1
+ import { CfnOutput, RemovalPolicy } from "aws-cdk-lib";
2
+ import {
3
+ AttributeType,
4
+ BillingMode,
5
+ GlobalSecondaryIndexProps,
6
+ ProjectionType,
7
+ Table,
8
+ TableProps,
9
+ } from "aws-cdk-lib/aws-dynamodb";
10
+ import { Construct } from "constructs";
11
+
12
+ export class CreateDynamoSingleTableDesign extends Construct {
13
+ public readonly createdResource: Table;
14
+ static ReadWriteActions: string[] = [
15
+ "dynamodb:BatchGetItem",
16
+ "dynamodb:BatchWriteItem",
17
+ "dynamodb:ConditionCheckItem",
18
+ "dynamodb:DeleteItem",
19
+ "dynamodb:DescribeTable",
20
+ "dynamodb:GetItem",
21
+ "dynamodb:GetRecords",
22
+ "dynamodb:GetShardIterator",
23
+ "dynamodb:PutItem",
24
+ "dynamodb:Query",
25
+ "dynamodb:Scan",
26
+ "dynamodb:UpdateItem",
27
+ ];
28
+
29
+ get CreatedTable() {
30
+ return this.createdResource;
31
+ }
32
+
33
+ constructor(
34
+ scope: Construct,
35
+ id: string,
36
+ protected tableName: string,
37
+ ) {
38
+ super(scope, id);
39
+ this.createdResource = this.createResource();
40
+ this.createOutput();
41
+ }
42
+
43
+ protected createResource(): Table {
44
+ const dbTable = new Table(this, "Table", {
45
+ tableName: this.tableName,
46
+ removalPolicy: RemovalPolicy.DESTROY,
47
+
48
+ partitionKey: {
49
+ name: "pk",
50
+ type: AttributeType.STRING,
51
+ },
52
+ sortKey: {
53
+ name: "sk",
54
+ type: AttributeType.STRING,
55
+ },
56
+ billingMode: BillingMode.PAY_PER_REQUEST,
57
+ });
58
+
59
+ const gsiIndexes = [
60
+ {
61
+ indexName: "gsi1Index",
62
+ partitionKey: {
63
+ name: "gsi1pk",
64
+ type: AttributeType.STRING,
65
+ },
66
+ sortKey: {
67
+ name: "gsi1sk",
68
+ type: AttributeType.STRING,
69
+ },
70
+ projectionType: ProjectionType.ALL,
71
+ },
72
+ {
73
+ indexName: "gsi2Index",
74
+ partitionKey: {
75
+ name: "gsi2pk",
76
+ type: AttributeType.STRING,
77
+ },
78
+ sortKey: {
79
+ name: "gsi2sk",
80
+ type: AttributeType.STRING,
81
+ },
82
+ projectionType: ProjectionType.ALL,
83
+ },
84
+ {
85
+ indexName: "gsi3Index",
86
+ partitionKey: {
87
+ name: "gsi3pk",
88
+ type: AttributeType.STRING,
89
+ },
90
+ sortKey: {
91
+ name: "gsi3sk",
92
+ type: AttributeType.STRING,
93
+ },
94
+ projectionType: ProjectionType.ALL,
95
+ },
96
+ ];
97
+
98
+ gsiIndexes.map((gsi) => {
99
+ const gsiProps: GlobalSecondaryIndexProps = {
100
+ indexName: gsi.indexName,
101
+ partitionKey: gsi.partitionKey,
102
+ sortKey: gsi.sortKey,
103
+ projectionType: gsi.projectionType,
104
+ };
105
+
106
+ dbTable.addGlobalSecondaryIndex(gsiProps);
107
+ });
108
+
109
+ return dbTable;
110
+ }
111
+
112
+ protected createOutput(): void {
113
+ // Logical IDs must not include unresolved tokens; use a stable ID
114
+ new CfnOutput(this, "TableOutput", {
115
+ value: `Table Name: ${this.createdResource?.tableName}\t Table Arn: ${this.createdResource?.tableArn}`,
116
+ });
117
+ }
118
+ }
@@ -1,53 +1,53 @@
1
- import { Instance, InstanceType, InstanceClass, InstanceSize, MachineImage, Vpc, CfnKeyPair } from "aws-cdk-lib/aws-ec2";
2
- import { BaseResource } from "../base/baseResource";
3
- import { Construct } from "constructs";
4
- import { AppConfig } from "../../config/AppConfig";
5
- import { CfnOutput } from "aws-cdk-lib";
6
-
7
- export class Ec2Instance extends BaseResource<Instance> {
8
-
9
- constructor(scope: Construct, config: AppConfig) {
10
- super(scope, config);
11
-
12
- const createdAssets = this.createResource(scope);
13
-
14
- this.createOutput<Instance>(scope, createdAssets!);
15
- }
16
-
17
- protected createResource(scope: Construct): Instance[] | null {
18
-
19
- const keyPair = new CfnKeyPair(scope, 'my-key-pair', {
20
- keyName: 'davis-dsylv-amazon-com',
21
- publicKeyMaterial: process.env.KEY_PAIR
22
- });
23
-
24
- const server = new Instance(scope, `my-ec2`, {
25
- vpc: Vpc.fromLookup(scope, 'VPC', {
26
- vpcId: process.env.VPC_PRIMARY_ID,
27
- isDefault: true
28
- }),
29
- instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.SMALL),
30
- machineImage: MachineImage.genericLinux({
31
- 'us-east-1': 'ami-010e83f579f15bba0'
32
- }),
33
- keyName: keyPair.keyName
34
-
35
- });
36
-
37
- return [server];
38
- }
39
- protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
40
-
41
- createdAssets.forEach((asset, index) => {
42
- new CfnOutput(scope, `my-ec2-instance-${index}`, {
43
- value: `Server Name: ${(asset as Instance).instancePrivateDnsName} \n
44
- Private: ${(asset as Instance).instancePrivateIp} \n
45
- Public: ${(asset as Instance).instancePublicIp}`
46
- });
47
- });
48
-
49
-
50
- }
51
-
52
-
1
+ import { Instance, InstanceType, InstanceClass, InstanceSize, MachineImage, Vpc, CfnKeyPair } from "aws-cdk-lib/aws-ec2";
2
+ import { BaseResource } from "../base/baseResource";
3
+ import { Construct } from "constructs";
4
+ import { AppConfig } from "../../config/AppConfig";
5
+ import { CfnOutput } from "aws-cdk-lib";
6
+
7
+ export class Ec2Instance extends BaseResource<Instance> {
8
+
9
+ constructor(scope: Construct, config: AppConfig) {
10
+ super(scope, config);
11
+
12
+ const createdAssets = this.createResource(scope);
13
+
14
+ this.createOutput<Instance>(scope, createdAssets!);
15
+ }
16
+
17
+ protected createResource(scope: Construct): Instance[] | null {
18
+
19
+ const keyPair = new CfnKeyPair(scope, 'my-key-pair', {
20
+ keyName: 'davis-dsylv-amazon-com',
21
+ publicKeyMaterial: process.env.KEY_PAIR
22
+ });
23
+
24
+ const server = new Instance(scope, `my-ec2`, {
25
+ vpc: Vpc.fromLookup(scope, 'VPC', {
26
+ vpcId: process.env.VPC_PRIMARY_ID,
27
+ isDefault: true
28
+ }),
29
+ instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.SMALL),
30
+ machineImage: MachineImage.genericLinux({
31
+ 'us-east-1': 'ami-010e83f579f15bba0'
32
+ }),
33
+ keyName: keyPair.keyName
34
+
35
+ });
36
+
37
+ return [server];
38
+ }
39
+ protected createOutput<T>(scope: Construct, createdAssets: T[]): void {
40
+
41
+ createdAssets.forEach((asset, index) => {
42
+ new CfnOutput(scope, `my-ec2-instance-${index}`, {
43
+ value: `Server Name: ${(asset as Instance).instancePrivateDnsName} \n
44
+ Private: ${(asset as Instance).instancePrivateIp} \n
45
+ Public: ${(asset as Instance).instancePublicIp}`
46
+ });
47
+ });
48
+
49
+
50
+ }
51
+
52
+
53
53
  }
@@ -1,58 +1,58 @@
1
- import * as ecr from "aws-cdk-lib/aws-ecr";
2
- import { BaseResource } from "../base/baseResource";
3
- import { Construct } from "constructs";
4
- import { CfnOutput, RemovalPolicy } from "aws-cdk-lib";
5
- import { BaseResourceProps } from "../../interfaces/BaseResourceProps";
6
-
7
- export class TsgECR extends BaseResource<ecr.Repository> {
8
-
9
- constructor(props: BaseResourceProps) {
10
-
11
- super(props.scope, props.config);
12
-
13
- const repos = this.createResource(props.scope);
14
-
15
- this.createdResources = [...repos as []];
16
-
17
- this.createOutput(props.scope, this.createdResources);
18
- }
19
-
20
- protected createResource(scope: Construct): ecr.Repository[] | null {
21
-
22
- const ecrRepo = new ecr.Repository(scope,
23
- `${this.config.AppName}-repository`,
24
- {
25
- repositoryName: `${this.config.AppName}-repository`,
26
- removalPolicy: RemovalPolicy.DESTROY,
27
- autoDeleteImages: true,
28
- });
29
-
30
- const rule: ecr.LifecycleRule = {
31
- description: 'Image Rentention',
32
- maxImageCount: 20
33
- };
34
-
35
- ecrRepo.addLifecycleRule(rule);
36
-
37
- if (ecrRepo instanceof ecr.Repository) {
38
- return [ecrRepo];
39
- }
40
-
41
- return null;
42
- }
43
-
44
- protected createOutput<Repository>(scope: Construct, createdAssets: Repository[]): void {
45
-
46
- createdAssets.forEach((x, idx) => {
47
-
48
- new CfnOutput(scope, `respository-${idx}`, {
49
- value: `Name: ${(x as ecr.Repository).repositoryName}\n
50
- Url: ${(x as ecr.Repository).repositoryUri}`
51
- });
52
- });
53
- }
54
-
55
-
56
-
57
-
1
+ import * as ecr from "aws-cdk-lib/aws-ecr";
2
+ import { BaseResource } from "../base/baseResource";
3
+ import { Construct } from "constructs";
4
+ import { CfnOutput, RemovalPolicy } from "aws-cdk-lib";
5
+ import { BaseResourceProps } from "../../interfaces/BaseResourceProps";
6
+
7
+ export class TsgECR extends BaseResource<ecr.Repository> {
8
+
9
+ constructor(props: BaseResourceProps) {
10
+
11
+ super(props.scope, props.config);
12
+
13
+ const repos = this.createResource(props.scope);
14
+
15
+ this.createdResources = [...repos as []];
16
+
17
+ this.createOutput(props.scope, this.createdResources);
18
+ }
19
+
20
+ protected createResource(scope: Construct): ecr.Repository[] | null {
21
+
22
+ const ecrRepo = new ecr.Repository(scope,
23
+ `${this.config.AppName}-repository`,
24
+ {
25
+ repositoryName: `${this.config.AppName}-repository`,
26
+ removalPolicy: RemovalPolicy.DESTROY,
27
+ autoDeleteImages: true,
28
+ });
29
+
30
+ const rule: ecr.LifecycleRule = {
31
+ description: 'Image Rentention',
32
+ maxImageCount: 20
33
+ };
34
+
35
+ ecrRepo.addLifecycleRule(rule);
36
+
37
+ if (ecrRepo instanceof ecr.Repository) {
38
+ return [ecrRepo];
39
+ }
40
+
41
+ return null;
42
+ }
43
+
44
+ protected createOutput<Repository>(scope: Construct, createdAssets: Repository[]): void {
45
+
46
+ createdAssets.forEach((x, idx) => {
47
+
48
+ new CfnOutput(scope, `respository-${idx}`, {
49
+ value: `Name: ${(x as ecr.Repository).repositoryName}\n
50
+ Url: ${(x as ecr.Repository).repositoryUri}`
51
+ });
52
+ });
53
+ }
54
+
55
+
56
+
57
+
58
58
  }