@gradientedge/cdk-utils 8.72.0 → 8.74.0

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 (27) hide show
  1. package/dist/src/lib/construct/graphql-api-lambda-with-cache/main.d.ts +2 -1
  2. package/dist/src/lib/construct/graphql-api-lambda-with-cache/main.js +2 -1
  3. package/dist/src/lib/construct/index.d.ts +2 -0
  4. package/dist/src/lib/construct/index.js +2 -0
  5. package/dist/src/lib/construct/rest-api-lambda/index.d.ts +1 -0
  6. package/dist/src/lib/construct/rest-api-lambda/index.js +17 -0
  7. package/dist/src/lib/construct/rest-api-lambda/main.d.ts +114 -0
  8. package/dist/src/lib/construct/rest-api-lambda/main.js +214 -0
  9. package/dist/src/lib/construct/rest-api-lambda-with-cache/index.d.ts +1 -0
  10. package/dist/src/lib/construct/rest-api-lambda-with-cache/index.js +17 -0
  11. package/dist/src/lib/construct/rest-api-lambda-with-cache/main.d.ts +67 -0
  12. package/dist/src/lib/construct/rest-api-lambda-with-cache/main.js +137 -0
  13. package/dist/src/lib/manager/aws/iam-manager.d.ts +15 -0
  14. package/dist/src/lib/manager/aws/iam-manager.js +33 -0
  15. package/dist/src/lib/manager/aws/lambda-manager.js +1 -0
  16. package/dist/src/lib/types/aws/index.d.ts +38 -0
  17. package/dist/src/lib/utils/index.js +1 -1
  18. package/package.json +9 -9
  19. package/src/lib/construct/graphql-api-lambda-with-cache/main.ts +2 -1
  20. package/src/lib/construct/index.ts +2 -0
  21. package/src/lib/construct/rest-api-lambda/index.ts +1 -0
  22. package/src/lib/construct/rest-api-lambda/main.ts +261 -0
  23. package/src/lib/construct/rest-api-lambda-with-cache/index.ts +1 -0
  24. package/src/lib/construct/rest-api-lambda-with-cache/main.ts +151 -0
  25. package/src/lib/manager/aws/iam-manager.ts +36 -0
  26. package/src/lib/manager/aws/lambda-manager.ts +1 -0
  27. package/src/lib/types/aws/index.ts +40 -0
@@ -4,7 +4,8 @@ import { Construct } from 'constructs';
4
4
  import { GraphQLApiLambda } from '..';
5
5
  import { GraphQlApiLambdaWithCacheProps } from '../../types';
6
6
  /**
7
- * @stability stable
7
+ * @deprecated Use RestApiLambdaWithCache instead. This will be removed in a future release.
8
+ *
8
9
  * @category cdk-utils.graphql-api-lambda-with-cache
9
10
  * @subcategory construct
10
11
  * @classdesc Provides a construct to create and deploy a Graphql API as Lambda with Caching
@@ -30,7 +30,8 @@ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
30
30
  const __1 = require("..");
31
31
  const utils = __importStar(require("../../utils"));
32
32
  /**
33
- * @stability stable
33
+ * @deprecated Use RestApiLambdaWithCache instead. This will be removed in a future release.
34
+ *
34
35
  * @category cdk-utils.graphql-api-lambda-with-cache
35
36
  * @subcategory construct
36
37
  * @classdesc Provides a construct to create and deploy a Graphql API as Lambda with Caching
@@ -3,5 +3,7 @@ export * from './api-to-eventbridge-target-with-sns';
3
3
  export * from './api-to-lambda-target';
4
4
  export * from './graphql-api-lambda';
5
5
  export * from './graphql-api-lambda-with-cache';
6
+ export * from './rest-api-lambda';
7
+ export * from './rest-api-lambda-with-cache';
6
8
  export * from './site-with-ecs-backend';
7
9
  export * from './static-site';
@@ -19,5 +19,7 @@ __exportStar(require("./api-to-eventbridge-target-with-sns"), exports);
19
19
  __exportStar(require("./api-to-lambda-target"), exports);
20
20
  __exportStar(require("./graphql-api-lambda"), exports);
21
21
  __exportStar(require("./graphql-api-lambda-with-cache"), exports);
22
+ __exportStar(require("./rest-api-lambda"), exports);
23
+ __exportStar(require("./rest-api-lambda-with-cache"), exports);
22
24
  __exportStar(require("./site-with-ecs-backend"), exports);
23
25
  __exportStar(require("./static-site"), exports);
@@ -0,0 +1 @@
1
+ export * from './main';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./main"), exports);
@@ -0,0 +1,114 @@
1
+ import * as apig from 'aws-cdk-lib/aws-apigateway';
2
+ import * as acm from 'aws-cdk-lib/aws-certificatemanager';
3
+ import * as iam from 'aws-cdk-lib/aws-iam';
4
+ import * as lambda from 'aws-cdk-lib/aws-lambda';
5
+ import * as route53 from 'aws-cdk-lib/aws-route53';
6
+ import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
7
+ import { Construct } from 'constructs';
8
+ import { CommonConstruct } from '../../common';
9
+ import { RestApiLambdaEnvironment, RestApiLambdaProps } from '../../types';
10
+ /**
11
+ * @deprecated Use RestApiLambda instead. This will be removed in a future release.
12
+ *
13
+ * @category cdk-utils.rest-api-lambda
14
+ * @subcategory construct
15
+ * @classdesc Provides a construct to create and deploy a RestApi as Lambda
16
+ *
17
+ * <b>Architecture</b><br/> ![Architecture](./RestApiLambda.jpg)
18
+ *
19
+ * @example
20
+ * import { RestApiLambda, RestApiLambdaProps } '@gradientedge/cdk-utils'
21
+ * import { Construct } from 'constructs'
22
+ *
23
+ * class CustomConstruct extends RestApiLambda {
24
+ * constructor(parent: Construct, id: string, props: RestApiLambdaProps) {
25
+ * super(parent, id, props)
26
+ * this.props = props
27
+ * this.id = id
28
+ * this.initResources()
29
+ * }
30
+ * }
31
+ * @mixin
32
+ */
33
+ export declare class RestApiLambda extends CommonConstruct {
34
+ props: RestApiLambdaProps;
35
+ id: string;
36
+ applicationSecrets: secretsmanager.ISecret[];
37
+ restApiLambdaPolicy: iam.PolicyDocument;
38
+ restApiLambdaRole: iam.Role;
39
+ restApiLambdaEnvironment: RestApiLambdaEnvironment;
40
+ restApiLambdaLayers: lambda.LayerVersion[];
41
+ restApiLambdaFunction: lambda.Function;
42
+ restApi: apig.RestApi;
43
+ restApiHostedZone: route53.IHostedZone;
44
+ restApiCertificate: acm.ICertificate;
45
+ restApiDomain: apig.DomainName;
46
+ restApiBasePathMappings: apig.BasePathMapping[];
47
+ constructor(parent: Construct, id: string, props: RestApiLambdaProps);
48
+ /**
49
+ * @summary Initialise and provision resources
50
+ * @protected
51
+ */
52
+ protected initResources(): void;
53
+ /**
54
+ * @summary Method to resolve secrets from SecretsManager
55
+ * - To be implemented in the overriding method in the implementation class
56
+ * @protected
57
+ */
58
+ protected resolveSecrets(): void;
59
+ /**
60
+ * @summary Method to resolve a hosted zone based on domain attributes
61
+ * @protected
62
+ */
63
+ protected resolveHostedZone(): void;
64
+ /**
65
+ * @summary Method to resolve a certificate based on attributes
66
+ * @protected
67
+ */
68
+ protected resolveCertificate(): void;
69
+ /**
70
+ * @summary Method to create iam policy for RestApi Lambda function
71
+ * @protected
72
+ */
73
+ protected createLambdaPolicy(): void;
74
+ /**
75
+ * @summary Method to create iam role for RestApi Lambda function
76
+ * @protected
77
+ */
78
+ protected createLambdaRole(): void;
79
+ /**
80
+ * @summary Method to create environment variables for RestApi Lambda function
81
+ * @protected
82
+ */
83
+ protected createLambdaEnvironment(): void;
84
+ /**
85
+ * @summary Method to create layers for RestApi Lambda function
86
+ * @protected
87
+ */
88
+ protected createLambdaLayers(): void;
89
+ /**
90
+ * @summary Method to create lambda function for RestApi
91
+ * @protected
92
+ */
93
+ protected createLambdaFunction(): void;
94
+ /**
95
+ * @summary Method to create rest restApiLambda for RestApi
96
+ * @protected
97
+ */
98
+ protected createRestApi(): void;
99
+ /**
100
+ * @summary Method to create custom restApiLambda domain for RestApi API
101
+ * @protected
102
+ */
103
+ protected createApiDomain(): void;
104
+ /**
105
+ * @summary Method to create base path mappings for RestApi API
106
+ * @protected
107
+ */
108
+ protected createApiBasePathMapping(): void;
109
+ /**
110
+ * @summary Method to create route53 records for RestApi API
111
+ * @protected
112
+ */
113
+ protected createApiRouteAssets(): void;
114
+ }
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.RestApiLambda = void 0;
27
+ const apig = __importStar(require("aws-cdk-lib/aws-apigateway"));
28
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
29
+ const common_1 = require("../../common");
30
+ /**
31
+ * @deprecated Use RestApiLambda instead. This will be removed in a future release.
32
+ *
33
+ * @category cdk-utils.rest-api-lambda
34
+ * @subcategory construct
35
+ * @classdesc Provides a construct to create and deploy a RestApi as Lambda
36
+ *
37
+ * <b>Architecture</b><br/> ![Architecture](./RestApiLambda.jpg)
38
+ *
39
+ * @example
40
+ * import { RestApiLambda, RestApiLambdaProps } '@gradientedge/cdk-utils'
41
+ * import { Construct } from 'constructs'
42
+ *
43
+ * class CustomConstruct extends RestApiLambda {
44
+ * constructor(parent: Construct, id: string, props: RestApiLambdaProps) {
45
+ * super(parent, id, props)
46
+ * this.props = props
47
+ * this.id = id
48
+ * this.initResources()
49
+ * }
50
+ * }
51
+ * @mixin
52
+ */
53
+ class RestApiLambda extends common_1.CommonConstruct {
54
+ /* restApiLambda props */
55
+ props;
56
+ id;
57
+ /* restApiLambda resources */
58
+ applicationSecrets;
59
+ restApiLambdaPolicy;
60
+ restApiLambdaRole;
61
+ restApiLambdaEnvironment;
62
+ restApiLambdaLayers = [];
63
+ restApiLambdaFunction;
64
+ restApi;
65
+ restApiHostedZone;
66
+ restApiCertificate;
67
+ restApiDomain;
68
+ restApiBasePathMappings = [];
69
+ constructor(parent, id, props) {
70
+ super(parent, id, props);
71
+ this.props = props;
72
+ this.id = id;
73
+ }
74
+ /**
75
+ * @summary Initialise and provision resources
76
+ * @protected
77
+ */
78
+ initResources() {
79
+ this.resolveSecrets();
80
+ this.resolveHostedZone();
81
+ this.resolveCertificate();
82
+ this.createLambdaPolicy();
83
+ this.createLambdaRole();
84
+ this.createLambdaEnvironment();
85
+ this.createLambdaLayers();
86
+ this.createLambdaFunction();
87
+ this.createRestApi();
88
+ this.createApiDomain();
89
+ this.createApiBasePathMapping();
90
+ this.createApiRouteAssets();
91
+ }
92
+ /**
93
+ * @summary Method to resolve secrets from SecretsManager
94
+ * - To be implemented in the overriding method in the implementation class
95
+ * @protected
96
+ */
97
+ resolveSecrets() {
98
+ this.applicationSecrets = [];
99
+ }
100
+ /**
101
+ * @summary Method to resolve a hosted zone based on domain attributes
102
+ * @protected
103
+ */
104
+ resolveHostedZone() {
105
+ this.restApiHostedZone = this.route53Manager.withHostedZoneFromFullyQualifiedDomainName(`${this.id}-hosted-zone`, this, this.props.useExistingHostedZone);
106
+ }
107
+ /**
108
+ * @summary Method to resolve a certificate based on attributes
109
+ * @protected
110
+ */
111
+ resolveCertificate() {
112
+ if (this.props.restApiCertificate.useExistingCertificate &&
113
+ this.props.restApiCertificate.certificateSsmName &&
114
+ this.props.restApiCertificate.certificateRegion) {
115
+ this.props.restApiCertificate.certificateArn = this.ssmManager.readStringParameterFromRegion(`${this.id}-certificate-param`, this, this.props.restApiCertificate.certificateSsmName, this.props.restApiCertificate.certificateRegion);
116
+ }
117
+ this.restApiCertificate = this.acmManager.resolveCertificate(`${this.id}-certificate`, this, this.props.restApiCertificate);
118
+ }
119
+ /**
120
+ * @summary Method to create iam policy for RestApi Lambda function
121
+ * @protected
122
+ */
123
+ createLambdaPolicy() {
124
+ this.restApiLambdaPolicy = new iam.PolicyDocument({
125
+ statements: [this.iamManager.statementForCreateAnyLogStream()],
126
+ });
127
+ }
128
+ /**
129
+ * @summary Method to create iam role for RestApi Lambda function
130
+ * @protected
131
+ */
132
+ createLambdaRole() {
133
+ this.restApiLambdaRole = this.iamManager.createRoleForLambda(`${this.id}-lambda-role`, this, this.restApiLambdaPolicy);
134
+ }
135
+ /**
136
+ * @summary Method to create environment variables for RestApi Lambda function
137
+ * @protected
138
+ */
139
+ createLambdaEnvironment() {
140
+ this.restApiLambdaEnvironment = {
141
+ NODE_ENV: this.props.nodeEnv,
142
+ LOG_LEVEL: this.props.logLevel,
143
+ TZ: this.props.timezone,
144
+ };
145
+ }
146
+ /**
147
+ * @summary Method to create layers for RestApi Lambda function
148
+ * @protected
149
+ */
150
+ createLambdaLayers() {
151
+ const layers = [];
152
+ if (!this.props.restApiLambdaLayerSources)
153
+ return;
154
+ this.props.restApiLambdaLayerSources.forEach((source, index) => {
155
+ layers.push(this.lambdaManager.createLambdaLayer(`${this.id}-layer-${index}`, this, source));
156
+ });
157
+ this.restApiLambdaLayers = layers;
158
+ }
159
+ /**
160
+ * @summary Method to create lambda function for RestApi
161
+ * @protected
162
+ */
163
+ createLambdaFunction() {
164
+ this.restApiLambdaFunction = this.lambdaManager.createLambdaFunction(`${this.id}-restapi-server`, this, this.props.restApiLambda, this.restApiLambdaRole, this.restApiLambdaLayers, this.props.restApiSource, this.props.restApiHandler || 'index.handler', this.restApiLambdaEnvironment);
165
+ }
166
+ /**
167
+ * @summary Method to create rest restApiLambda for RestApi
168
+ * @protected
169
+ */
170
+ createRestApi() {
171
+ this.restApi = this.apiManager.createLambdaRestApi(`${this.id}-lambda-rest-api`, this, this.props.restApi, this.restApiLambdaFunction);
172
+ }
173
+ /**
174
+ * @summary Method to create custom restApiLambda domain for RestApi API
175
+ * @protected
176
+ */
177
+ createApiDomain() {
178
+ this.restApiDomain = this.apiManager.createApiDomain(`${this.id}-api-domain`, this, this.isProductionStage() || this.props.skipStageForARecords
179
+ ? `${this.props.apiSubDomain}.${this.fullyQualifiedDomainName}`
180
+ : `${this.props.apiSubDomain}-${this.props.stage}.${this.fullyQualifiedDomainName}`, this.restApiCertificate);
181
+ }
182
+ /**
183
+ * @summary Method to create base path mappings for RestApi API
184
+ * @protected
185
+ */
186
+ createApiBasePathMapping() {
187
+ const apiRootPaths = this.props.apiRootPaths;
188
+ if (apiRootPaths && apiRootPaths.length > 0) {
189
+ apiRootPaths.forEach((apiRootPath) => {
190
+ this.restApiBasePathMappings.push(new apig.BasePathMapping(this, `${this.id}-base-bath-mapping-${apiRootPath}`, {
191
+ basePath: apiRootPath,
192
+ domainName: this.restApiDomain,
193
+ restApi: this.restApi,
194
+ stage: this.restApi.deploymentStage,
195
+ }));
196
+ });
197
+ return;
198
+ }
199
+ // add default mapping if apiRootPaths not set
200
+ new apig.BasePathMapping(this, `${this.id}-base-bath-mapping`, {
201
+ domainName: this.restApiDomain,
202
+ restApi: this.restApi,
203
+ stage: this.restApi.deploymentStage,
204
+ });
205
+ }
206
+ /**
207
+ * @summary Method to create route53 records for RestApi API
208
+ * @protected
209
+ */
210
+ createApiRouteAssets() {
211
+ this.route53Manager.createApiGatewayARecord(`${this.id}-custom-domain-a-record`, this, this.props.apiSubDomain, this.restApiDomain, this.restApiHostedZone, this.props.skipStageForARecords);
212
+ }
213
+ }
214
+ exports.RestApiLambda = RestApiLambda;
@@ -0,0 +1 @@
1
+ export * from './main';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./main"), exports);
@@ -0,0 +1,67 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import * as elasticache from 'aws-cdk-lib/aws-elasticache';
3
+ import { Construct } from 'constructs';
4
+ import { RestApiLambda } from '..';
5
+ import { RestApiLambdaWithCacheProps } from '../../types';
6
+ /**
7
+ * @stability stable
8
+ * @category cdk-utils.rest-api-lambda-with-cache
9
+ * @subcategory construct
10
+ * @classdesc Provides a construct to create and deploy a RestApi API as Lambda with Caching
11
+ *
12
+ * <b>Architecture</b><br/> ![Architecture](./RestApiLambda.jpg)
13
+ *
14
+ * @example
15
+ * import { RestApiLambdaWithCacheProps } '@gradientedge/cdk-utils'
16
+ * import { Construct } from 'constructs'
17
+ *
18
+ * class CustomConstruct extends RestApiLambdaWithCache {
19
+ * constructor(parent: Construct, id: string, props: RestApiLambdaWithCacheProps) {
20
+ * super(parent, id, props)
21
+ * this.props = props
22
+ * this.id = id
23
+ * this.initResources()
24
+ * }
25
+ * }
26
+ * @mixin
27
+ */
28
+ export declare class RestApiLambdaWithCache extends RestApiLambda {
29
+ props: RestApiLambdaWithCacheProps;
30
+ id: string;
31
+ restApivpc: ec2.IVpc;
32
+ restApiCache: elasticache.CfnReplicationGroup;
33
+ restApiSecurityGroup: ec2.ISecurityGroup;
34
+ restApiSecurityGroupExportName: string;
35
+ constructor(parent: Construct, id: string, props: RestApiLambdaWithCacheProps);
36
+ protected initResources(): void;
37
+ /**
38
+ * Create VPC
39
+ * @protected
40
+ */
41
+ protected resolveVpc(): void;
42
+ /**
43
+ * Resolve Security Group
44
+ * @protected
45
+ */
46
+ protected resolveSecurityGroup(): void;
47
+ /**
48
+ * Create ElastiCache
49
+ * @protected
50
+ */
51
+ protected createElastiCache(): void;
52
+ /**
53
+ * Create Lambda Role
54
+ * @protected
55
+ */
56
+ protected createLambdaRole(): void;
57
+ /**
58
+ * @summary Method to create environment variables for RestApi Lambda function
59
+ * @protected
60
+ */
61
+ protected createLambdaEnvironment(): void;
62
+ /**
63
+ * @summary Method to create lambda function for RestApi API
64
+ * @protected
65
+ */
66
+ protected createLambdaFunction(): void;
67
+ }
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.RestApiLambdaWithCache = void 0;
27
+ const cdk = __importStar(require("aws-cdk-lib"));
28
+ const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
29
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
30
+ const __1 = require("..");
31
+ const utils = __importStar(require("../../utils"));
32
+ /**
33
+ * @stability stable
34
+ * @category cdk-utils.rest-api-lambda-with-cache
35
+ * @subcategory construct
36
+ * @classdesc Provides a construct to create and deploy a RestApi API as Lambda with Caching
37
+ *
38
+ * <b>Architecture</b><br/> ![Architecture](./RestApiLambda.jpg)
39
+ *
40
+ * @example
41
+ * import { RestApiLambdaWithCacheProps } '@gradientedge/cdk-utils'
42
+ * import { Construct } from 'constructs'
43
+ *
44
+ * class CustomConstruct extends RestApiLambdaWithCache {
45
+ * constructor(parent: Construct, id: string, props: RestApiLambdaWithCacheProps) {
46
+ * super(parent, id, props)
47
+ * this.props = props
48
+ * this.id = id
49
+ * this.initResources()
50
+ * }
51
+ * }
52
+ * @mixin
53
+ */
54
+ class RestApiLambdaWithCache extends __1.RestApiLambda {
55
+ /* restApiLambdaWithCache props */
56
+ props;
57
+ id;
58
+ /* restApiLambda resources */
59
+ restApivpc;
60
+ restApiCache;
61
+ restApiSecurityGroup;
62
+ restApiSecurityGroupExportName;
63
+ constructor(parent, id, props) {
64
+ super(parent, id, props);
65
+ this.props = props;
66
+ this.id = id;
67
+ }
68
+ initResources() {
69
+ this.resolveVpc();
70
+ this.resolveSecurityGroup();
71
+ this.createElastiCache();
72
+ super.initResources();
73
+ }
74
+ /**
75
+ * Create VPC
76
+ * @protected
77
+ */
78
+ resolveVpc() {
79
+ if (this.props.useExistingVpc) {
80
+ this.restApivpc = this.vpcManager.retrieveCommonVpc(`${this.id}`, this, this.props.vpcName);
81
+ }
82
+ else {
83
+ this.restApivpc = this.vpcManager.createCommonVpc(this, this.props.restApiVpc, this.props.restApiVpc.vpcName);
84
+ }
85
+ }
86
+ /**
87
+ * Resolve Security Group
88
+ * @protected
89
+ */
90
+ resolveSecurityGroup() {
91
+ if (this.props.securityGroupExportName) {
92
+ this.restApiSecurityGroup = ec2.SecurityGroup.fromSecurityGroupId(this, `${this.id}`, cdk.Fn.importValue(this.props.securityGroupExportName));
93
+ }
94
+ else {
95
+ this.restApiSecurityGroup = new ec2.SecurityGroup(this, `${this.id}-security-group-${this.props.stage}`, {
96
+ securityGroupName: `${this.id}-security-group-${this.props.stage}`,
97
+ vpc: this.restApivpc,
98
+ });
99
+ this.restApiSecurityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.allTraffic(), 'All Traffic');
100
+ utils.createCfnOutput(`${this.id}-security-group-id`, this, this.restApiSecurityGroup.securityGroupId);
101
+ }
102
+ }
103
+ /**
104
+ * Create ElastiCache
105
+ * @protected
106
+ */
107
+ createElastiCache() {
108
+ this.restApiCache = this.elasticacheManager.createReplicatedElastiCache(`${this.id}-elasticache`, this, this.props.restApiElastiCache, this.restApivpc.privateSubnets.map(subnet => subnet.subnetId), [this.restApiSecurityGroup.securityGroupId]);
109
+ }
110
+ /**
111
+ * Create Lambda Role
112
+ * @protected
113
+ */
114
+ createLambdaRole() {
115
+ super.createLambdaRole();
116
+ this.restApiLambdaRole.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaVPCAccessExecutionRole'));
117
+ }
118
+ /**
119
+ * @summary Method to create environment variables for RestApi Lambda function
120
+ * @protected
121
+ */
122
+ createLambdaEnvironment() {
123
+ this.restApiLambdaEnvironment = {
124
+ NODE_ENV: this.props.nodeEnv,
125
+ LOG_LEVEL: this.props.logLevel,
126
+ TZ: this.props.timezone,
127
+ };
128
+ }
129
+ /**
130
+ * @summary Method to create lambda function for RestApi API
131
+ * @protected
132
+ */
133
+ createLambdaFunction() {
134
+ this.restApiLambdaFunction = this.lambdaManager.createLambdaFunction(`${this.id}-restapi-server`, this, this.props.restApiLambda, this.restApiLambdaRole, this.restApiLambdaLayers, this.props.restApiSource, this.props.restApiHandler || 'index.handler', this.restApiLambdaEnvironment, this.restApivpc, [this.restApiSecurityGroup], undefined, undefined, this.restApivpc);
135
+ }
136
+ }
137
+ exports.RestApiLambdaWithCache = RestApiLambdaWithCache;
@@ -58,6 +58,21 @@ export declare class IamManager {
58
58
  * @param {string[]} resourceArns list of ARNs to allow access to
59
59
  */
60
60
  statementForReadAnyAppConfig(resourceArns?: string[]): cdk.aws_iam.PolicyStatement;
61
+ /**
62
+ * @summary Method to create iam statement to access app config
63
+ * @param {string[]} resourceArns list of ARNs to allow access to
64
+ */
65
+ statementForAppConfigExecution(resourceArns?: string[]): cdk.aws_iam.PolicyStatement;
66
+ /**
67
+ * @summary Method to create iam statement to put xray telemetry
68
+ * @param {string[]} resourceArns list of ARNs to allow access to
69
+ */
70
+ statementForPutXrayTelemetry(resourceArns?: string[]): cdk.aws_iam.PolicyStatement;
71
+ /**
72
+ * @summary Method to create iam statement to decrypt kms
73
+ * @param {string[]} resourceArns list of ARNs to allow access to
74
+ */
75
+ statementForDecryptKms(resourceArns?: string[]): cdk.aws_iam.PolicyStatement;
61
76
  /**
62
77
  * @summary Method to create iam statement to list s3 buckets
63
78
  * @param {common.CommonConstruct} scope scope in which this resource is defined
@@ -130,6 +130,39 @@ class IamManager {
130
130
  resources: resourceArns ?? ['*'],
131
131
  });
132
132
  }
133
+ /**
134
+ * @summary Method to create iam statement to access app config
135
+ * @param {string[]} resourceArns list of ARNs to allow access to
136
+ */
137
+ statementForAppConfigExecution(resourceArns) {
138
+ return new iam.PolicyStatement({
139
+ effect: iam.Effect.ALLOW,
140
+ actions: ['appconfig:GetLatestConfiguration', 'appconfig:StartConfigurationSession'],
141
+ resources: resourceArns ?? ['*'],
142
+ });
143
+ }
144
+ /**
145
+ * @summary Method to create iam statement to put xray telemetry
146
+ * @param {string[]} resourceArns list of ARNs to allow access to
147
+ */
148
+ statementForPutXrayTelemetry(resourceArns) {
149
+ return new iam.PolicyStatement({
150
+ effect: iam.Effect.ALLOW,
151
+ actions: ['xray:PutTraceSegments', 'xray:PutTelemetryRecords'],
152
+ resources: resourceArns ?? ['*'],
153
+ });
154
+ }
155
+ /**
156
+ * @summary Method to create iam statement to decrypt kms
157
+ * @param {string[]} resourceArns list of ARNs to allow access to
158
+ */
159
+ statementForDecryptKms(resourceArns) {
160
+ return new iam.PolicyStatement({
161
+ effect: iam.Effect.ALLOW,
162
+ actions: ['kms:Decrypt'],
163
+ resources: resourceArns ?? ['*'],
164
+ });
165
+ }
133
166
  /**
134
167
  * @summary Method to create iam statement to list s3 buckets
135
168
  * @param {common.CommonConstruct} scope scope in which this resource is defined