@gradientedge/cdk-utils-aws 1.0.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.
- package/LICENSE +21 -0
- package/dist/src/common/construct.d.ts +85 -0
- package/dist/src/common/construct.js +125 -0
- package/dist/src/common/index.d.ts +4 -0
- package/dist/src/common/index.js +4 -0
- package/dist/src/common/resource-name-formatter.d.ts +13 -0
- package/dist/src/common/resource-name-formatter.js +30 -0
- package/dist/src/common/stack.d.ts +62 -0
- package/dist/src/common/stack.js +139 -0
- package/dist/src/common/types.d.ts +30 -0
- package/dist/src/common/types.js +1 -0
- package/dist/src/construct/api-to-any-target/index.d.ts +3 -0
- package/dist/src/construct/api-to-any-target/index.js +3 -0
- package/dist/src/construct/api-to-any-target/main.d.ts +47 -0
- package/dist/src/construct/api-to-any-target/main.js +154 -0
- package/dist/src/construct/api-to-any-target/target.d.ts +23 -0
- package/dist/src/construct/api-to-any-target/target.js +14 -0
- package/dist/src/construct/api-to-any-target/types.d.ts +60 -0
- package/dist/src/construct/api-to-any-target/types.js +1 -0
- package/dist/src/construct/api-to-eventbridge-target/api.d.ts +34 -0
- package/dist/src/construct/api-to-eventbridge-target/api.js +23 -0
- package/dist/src/construct/api-to-eventbridge-target/event.d.ts +15 -0
- package/dist/src/construct/api-to-eventbridge-target/event.js +12 -0
- package/dist/src/construct/api-to-eventbridge-target/index.d.ts +4 -0
- package/dist/src/construct/api-to-eventbridge-target/index.js +4 -0
- package/dist/src/construct/api-to-eventbridge-target/main.d.ts +121 -0
- package/dist/src/construct/api-to-eventbridge-target/main.js +442 -0
- package/dist/src/construct/api-to-eventbridge-target/types.d.ts +100 -0
- package/dist/src/construct/api-to-eventbridge-target/types.js +1 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/api-destined-lambda.d.ts +16 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/api-destined-lambda.js +12 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/index.d.ts +3 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/index.js +3 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/main.d.ts +159 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/main.js +547 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/types.d.ts +22 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/types.js +1 -0
- package/dist/src/construct/api-to-lambda-target/api.d.ts +35 -0
- package/dist/src/construct/api-to-lambda-target/api.js +24 -0
- package/dist/src/construct/api-to-lambda-target/index.d.ts +3 -0
- package/dist/src/construct/api-to-lambda-target/index.js +3 -0
- package/dist/src/construct/api-to-lambda-target/main.d.ts +70 -0
- package/dist/src/construct/api-to-lambda-target/main.js +218 -0
- package/dist/src/construct/api-to-lambda-target/types.d.ts +62 -0
- package/dist/src/construct/api-to-lambda-target/types.js +1 -0
- package/dist/src/construct/application-configuration/index.d.ts +2 -0
- package/dist/src/construct/application-configuration/index.js +2 -0
- package/dist/src/construct/application-configuration/main.d.ts +23 -0
- package/dist/src/construct/application-configuration/main.js +79 -0
- package/dist/src/construct/application-configuration/types.d.ts +6 -0
- package/dist/src/construct/application-configuration/types.js +1 -0
- package/dist/src/construct/event-handler/handler.d.ts +29 -0
- package/dist/src/construct/event-handler/handler.js +21 -0
- package/dist/src/construct/event-handler/index.d.ts +3 -0
- package/dist/src/construct/event-handler/index.js +3 -0
- package/dist/src/construct/event-handler/main.d.ts +91 -0
- package/dist/src/construct/event-handler/main.js +196 -0
- package/dist/src/construct/event-handler/types.d.ts +41 -0
- package/dist/src/construct/event-handler/types.js +1 -0
- package/dist/src/construct/index.d.ts +14 -0
- package/dist/src/construct/index.js +14 -0
- package/dist/src/construct/lambda-with-iam-access/index.d.ts +2 -0
- package/dist/src/construct/lambda-with-iam-access/index.js +2 -0
- package/dist/src/construct/lambda-with-iam-access/main.d.ts +78 -0
- package/dist/src/construct/lambda-with-iam-access/main.js +182 -0
- package/dist/src/construct/lambda-with-iam-access/types.d.ts +20 -0
- package/dist/src/construct/lambda-with-iam-access/types.js +1 -0
- package/dist/src/construct/piped-event-handler/index.d.ts +2 -0
- package/dist/src/construct/piped-event-handler/index.js +2 -0
- package/dist/src/construct/piped-event-handler/main.d.ts +38 -0
- package/dist/src/construct/piped-event-handler/main.js +62 -0
- package/dist/src/construct/piped-event-handler/types.d.ts +9 -0
- package/dist/src/construct/piped-event-handler/types.js +1 -0
- package/dist/src/construct/rest-api-lambda/index.d.ts +2 -0
- package/dist/src/construct/rest-api-lambda/index.js +2 -0
- package/dist/src/construct/rest-api-lambda/main.d.ts +96 -0
- package/dist/src/construct/rest-api-lambda/main.js +170 -0
- package/dist/src/construct/rest-api-lambda/types.d.ts +23 -0
- package/dist/src/construct/rest-api-lambda/types.js +1 -0
- package/dist/src/construct/rest-api-lambda-with-cache/index.d.ts +2 -0
- package/dist/src/construct/rest-api-lambda-with-cache/index.js +2 -0
- package/dist/src/construct/rest-api-lambda-with-cache/main.d.ts +56 -0
- package/dist/src/construct/rest-api-lambda-with-cache/main.js +118 -0
- package/dist/src/construct/rest-api-lambda-with-cache/types.d.ts +11 -0
- package/dist/src/construct/rest-api-lambda-with-cache/types.js +1 -0
- package/dist/src/construct/site-with-ecs-backend/constants.d.ts +4 -0
- package/dist/src/construct/site-with-ecs-backend/constants.js +5 -0
- package/dist/src/construct/site-with-ecs-backend/index.d.ts +3 -0
- package/dist/src/construct/site-with-ecs-backend/index.js +3 -0
- package/dist/src/construct/site-with-ecs-backend/main.d.ts +154 -0
- package/dist/src/construct/site-with-ecs-backend/main.js +437 -0
- package/dist/src/construct/site-with-ecs-backend/types.d.ts +49 -0
- package/dist/src/construct/site-with-ecs-backend/types.js +1 -0
- package/dist/src/construct/site-with-lambda-backend/constants.d.ts +5 -0
- package/dist/src/construct/site-with-lambda-backend/constants.js +6 -0
- package/dist/src/construct/site-with-lambda-backend/index.d.ts +3 -0
- package/dist/src/construct/site-with-lambda-backend/index.js +3 -0
- package/dist/src/construct/site-with-lambda-backend/main.d.ts +116 -0
- package/dist/src/construct/site-with-lambda-backend/main.js +316 -0
- package/dist/src/construct/site-with-lambda-backend/types.d.ts +45 -0
- package/dist/src/construct/site-with-lambda-backend/types.js +1 -0
- package/dist/src/construct/static-asset-deployment/index.d.ts +2 -0
- package/dist/src/construct/static-asset-deployment/index.js +2 -0
- package/dist/src/construct/static-asset-deployment/main.d.ts +41 -0
- package/dist/src/construct/static-asset-deployment/main.js +113 -0
- package/dist/src/construct/static-asset-deployment/types.d.ts +41 -0
- package/dist/src/construct/static-asset-deployment/types.js +1 -0
- package/dist/src/construct/static-site/index.d.ts +2 -0
- package/dist/src/construct/static-site/index.js +2 -0
- package/dist/src/construct/static-site/main.d.ts +84 -0
- package/dist/src/construct/static-site/main.js +136 -0
- package/dist/src/construct/static-site/types.d.ts +30 -0
- package/dist/src/construct/static-site/types.js +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +5 -0
- package/dist/src/services/api-gateway/index.d.ts +2 -0
- package/dist/src/services/api-gateway/index.js +2 -0
- package/dist/src/services/api-gateway/main.d.ts +68 -0
- package/dist/src/services/api-gateway/main.js +173 -0
- package/dist/src/services/api-gateway/types.d.ts +10 -0
- package/dist/src/services/api-gateway/types.js +1 -0
- package/dist/src/services/appconfig/constants.d.ts +12 -0
- package/dist/src/services/appconfig/constants.js +51 -0
- package/dist/src/services/appconfig/index.d.ts +3 -0
- package/dist/src/services/appconfig/index.js +3 -0
- package/dist/src/services/appconfig/main.d.ts +63 -0
- package/dist/src/services/appconfig/main.js +119 -0
- package/dist/src/services/appconfig/types.d.ts +17 -0
- package/dist/src/services/appconfig/types.js +1 -0
- package/dist/src/services/certificate-manager/index.d.ts +2 -0
- package/dist/src/services/certificate-manager/index.js +2 -0
- package/dist/src/services/certificate-manager/main.d.ts +41 -0
- package/dist/src/services/certificate-manager/main.js +62 -0
- package/dist/src/services/certificate-manager/types.d.ts +11 -0
- package/dist/src/services/certificate-manager/types.js +1 -0
- package/dist/src/services/cloudfront/index.d.ts +2 -0
- package/dist/src/services/cloudfront/index.js +2 -0
- package/dist/src/services/cloudfront/main.d.ts +96 -0
- package/dist/src/services/cloudfront/main.js +233 -0
- package/dist/src/services/cloudfront/types.d.ts +13 -0
- package/dist/src/services/cloudfront/types.js +1 -0
- package/dist/src/services/cloudtrail/index.d.ts +2 -0
- package/dist/src/services/cloudtrail/index.js +2 -0
- package/dist/src/services/cloudtrail/main.d.ts +44 -0
- package/dist/src/services/cloudtrail/main.js +71 -0
- package/dist/src/services/cloudtrail/types.d.ts +5 -0
- package/dist/src/services/cloudtrail/types.js +1 -0
- package/dist/src/services/cloudwatch/index.d.ts +3 -0
- package/dist/src/services/cloudwatch/index.js +3 -0
- package/dist/src/services/cloudwatch/logs.d.ts +47 -0
- package/dist/src/services/cloudwatch/logs.js +98 -0
- package/dist/src/services/cloudwatch/main.d.ts +207 -0
- package/dist/src/services/cloudwatch/main.js +552 -0
- package/dist/src/services/cloudwatch/types.d.ts +89 -0
- package/dist/src/services/cloudwatch/types.js +1 -0
- package/dist/src/services/codebuild/index.d.ts +1 -0
- package/dist/src/services/codebuild/index.js +1 -0
- package/dist/src/services/codebuild/main.d.ts +36 -0
- package/dist/src/services/codebuild/main.js +67 -0
- package/dist/src/services/constants.d.ts +4 -0
- package/dist/src/services/constants.js +5 -0
- package/dist/src/services/dynamodb/index.d.ts +2 -0
- package/dist/src/services/dynamodb/index.js +2 -0
- package/dist/src/services/dynamodb/main.d.ts +35 -0
- package/dist/src/services/dynamodb/main.js +72 -0
- package/dist/src/services/dynamodb/types.d.ts +10 -0
- package/dist/src/services/dynamodb/types.js +1 -0
- package/dist/src/services/elastic-container-registry/index.d.ts +1 -0
- package/dist/src/services/elastic-container-registry/index.js +1 -0
- package/dist/src/services/elastic-container-registry/main.d.ts +27 -0
- package/dist/src/services/elastic-container-registry/main.js +33 -0
- package/dist/src/services/elastic-container-service/index.d.ts +2 -0
- package/dist/src/services/elastic-container-service/index.js +2 -0
- package/dist/src/services/elastic-container-service/main.d.ts +56 -0
- package/dist/src/services/elastic-container-service/main.js +149 -0
- package/dist/src/services/elastic-container-service/types.d.ts +45 -0
- package/dist/src/services/elastic-container-service/types.js +1 -0
- package/dist/src/services/elastic-file-system/index.d.ts +2 -0
- package/dist/src/services/elastic-file-system/index.js +2 -0
- package/dist/src/services/elastic-file-system/main.d.ts +42 -0
- package/dist/src/services/elastic-file-system/main.js +76 -0
- package/dist/src/services/elastic-file-system/types.d.ts +15 -0
- package/dist/src/services/elastic-file-system/types.js +1 -0
- package/dist/src/services/elastic-kubernetes-service/index.d.ts +2 -0
- package/dist/src/services/elastic-kubernetes-service/index.js +2 -0
- package/dist/src/services/elastic-kubernetes-service/main.d.ts +32 -0
- package/dist/src/services/elastic-kubernetes-service/main.js +85 -0
- package/dist/src/services/elastic-kubernetes-service/types.d.ts +7 -0
- package/dist/src/services/elastic-kubernetes-service/types.js +1 -0
- package/dist/src/services/elasticache/index.d.ts +2 -0
- package/dist/src/services/elasticache/index.js +2 -0
- package/dist/src/services/elasticache/main.d.ts +47 -0
- package/dist/src/services/elasticache/main.js +90 -0
- package/dist/src/services/elasticache/types.d.ts +9 -0
- package/dist/src/services/elasticache/types.js +1 -0
- package/dist/src/services/eventbridge/index.d.ts +3 -0
- package/dist/src/services/eventbridge/index.js +3 -0
- package/dist/src/services/eventbridge/main.d.ts +93 -0
- package/dist/src/services/eventbridge/main.js +295 -0
- package/dist/src/services/eventbridge/target.d.ts +57 -0
- package/dist/src/services/eventbridge/target.js +61 -0
- package/dist/src/services/eventbridge/types.d.ts +43 -0
- package/dist/src/services/eventbridge/types.js +1 -0
- package/dist/src/services/evidently/index.d.ts +2 -0
- package/dist/src/services/evidently/index.js +2 -0
- package/dist/src/services/evidently/main.d.ts +56 -0
- package/dist/src/services/evidently/main.js +114 -0
- package/dist/src/services/evidently/types.d.ts +21 -0
- package/dist/src/services/evidently/types.js +1 -0
- package/dist/src/services/identity-access-management/index.d.ts +1 -0
- package/dist/src/services/identity-access-management/index.js +1 -0
- package/dist/src/services/identity-access-management/main.d.ts +263 -0
- package/dist/src/services/identity-access-management/main.js +609 -0
- package/dist/src/services/index.d.ts +28 -0
- package/dist/src/services/index.js +28 -0
- package/dist/src/services/key-management-service/index.d.ts +2 -0
- package/dist/src/services/key-management-service/index.js +2 -0
- package/dist/src/services/key-management-service/main.d.ts +28 -0
- package/dist/src/services/key-management-service/main.js +39 -0
- package/dist/src/services/key-management-service/types.d.ts +5 -0
- package/dist/src/services/key-management-service/types.js +1 -0
- package/dist/src/services/lambda/index.d.ts +2 -0
- package/dist/src/services/lambda/index.js +2 -0
- package/dist/src/services/lambda/main.d.ts +89 -0
- package/dist/src/services/lambda/main.js +232 -0
- package/dist/src/services/lambda/types.d.ts +54 -0
- package/dist/src/services/lambda/types.js +1 -0
- package/dist/src/services/route53/index.d.ts +2 -0
- package/dist/src/services/route53/index.js +2 -0
- package/dist/src/services/route53/main.d.ts +66 -0
- package/dist/src/services/route53/main.js +136 -0
- package/dist/src/services/route53/types.d.ts +6 -0
- package/dist/src/services/route53/types.js +1 -0
- package/dist/src/services/secrets-manager/index.d.ts +2 -0
- package/dist/src/services/secrets-manager/index.js +2 -0
- package/dist/src/services/secrets-manager/main.d.ts +43 -0
- package/dist/src/services/secrets-manager/main.js +71 -0
- package/dist/src/services/secrets-manager/types.d.ts +3 -0
- package/dist/src/services/secrets-manager/types.js +1 -0
- package/dist/src/services/simple-notification-service/index.d.ts +2 -0
- package/dist/src/services/simple-notification-service/index.js +2 -0
- package/dist/src/services/simple-notification-service/main.d.ts +38 -0
- package/dist/src/services/simple-notification-service/main.js +68 -0
- package/dist/src/services/simple-notification-service/types.d.ts +5 -0
- package/dist/src/services/simple-notification-service/types.js +1 -0
- package/dist/src/services/simple-queue-service/index.d.ts +2 -0
- package/dist/src/services/simple-queue-service/index.js +2 -0
- package/dist/src/services/simple-queue-service/main.d.ts +45 -0
- package/dist/src/services/simple-queue-service/main.js +101 -0
- package/dist/src/services/simple-queue-service/types.d.ts +15 -0
- package/dist/src/services/simple-queue-service/types.js +1 -0
- package/dist/src/services/simple-storage-service/index.d.ts +2 -0
- package/dist/src/services/simple-storage-service/index.js +2 -0
- package/dist/src/services/simple-storage-service/main.d.ts +79 -0
- package/dist/src/services/simple-storage-service/main.js +191 -0
- package/dist/src/services/simple-storage-service/types.d.ts +25 -0
- package/dist/src/services/simple-storage-service/types.js +1 -0
- package/dist/src/services/step-function/index.d.ts +2 -0
- package/dist/src/services/step-function/index.js +2 -0
- package/dist/src/services/step-function/main.d.ts +161 -0
- package/dist/src/services/step-function/main.js +380 -0
- package/dist/src/services/step-function/types.d.ts +88 -0
- package/dist/src/services/step-function/types.js +1 -0
- package/dist/src/services/systems-manager/index.d.ts +2 -0
- package/dist/src/services/systems-manager/index.js +2 -0
- package/dist/src/services/systems-manager/main.d.ts +55 -0
- package/dist/src/services/systems-manager/main.js +97 -0
- package/dist/src/services/systems-manager/types.d.ts +9 -0
- package/dist/src/services/systems-manager/types.js +1 -0
- package/dist/src/services/virtual-private-cloud/index.d.ts +2 -0
- package/dist/src/services/virtual-private-cloud/index.js +2 -0
- package/dist/src/services/virtual-private-cloud/ipv6.d.ts +7 -0
- package/dist/src/services/virtual-private-cloud/ipv6.js +38 -0
- package/dist/src/services/virtual-private-cloud/main.d.ts +43 -0
- package/dist/src/services/virtual-private-cloud/main.js +87 -0
- package/dist/src/services/virtual-private-cloud/types.d.ts +4 -0
- package/dist/src/services/virtual-private-cloud/types.js +1 -0
- package/dist/src/services/web-application-firewall/index.d.ts +2 -0
- package/dist/src/services/web-application-firewall/index.js +2 -0
- package/dist/src/services/web-application-firewall/main.d.ts +35 -0
- package/dist/src/services/web-application-firewall/main.js +61 -0
- package/dist/src/services/web-application-firewall/types.d.ts +9 -0
- package/dist/src/services/web-application-firewall/types.js +1 -0
- package/dist/src/types/index.d.ts +6 -0
- package/dist/src/types/index.js +1 -0
- package/dist/src/utils/index.d.ts +45 -0
- package/dist/src/utils/index.js +61 -0
- package/package.json +44 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { QueueProps } from 'aws-cdk-lib/aws-sqs';
|
|
2
|
+
import { SqsToLambdaPipeProps, SqsToSfnPipeProps } from '../../services/index.js';
|
|
3
|
+
import { EventHandlerProps } from '../event-handler/index.js';
|
|
4
|
+
export interface PipedEventHandlerProps extends EventHandlerProps {
|
|
5
|
+
pipedDlq: QueueProps;
|
|
6
|
+
pipedQueue: QueueProps;
|
|
7
|
+
sqsToLambdaPipe: SqsToLambdaPipeProps;
|
|
8
|
+
sqsToSfnPipe: SqsToSfnPipeProps;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { BasePathMapping, DomainName, RestApi } from 'aws-cdk-lib/aws-apigateway';
|
|
2
|
+
import { ICertificate } from 'aws-cdk-lib/aws-certificatemanager';
|
|
3
|
+
import { PolicyDocument, Role } from 'aws-cdk-lib/aws-iam';
|
|
4
|
+
import { IFunction, ILayerVersion } from 'aws-cdk-lib/aws-lambda';
|
|
5
|
+
import { IHostedZone } from 'aws-cdk-lib/aws-route53';
|
|
6
|
+
import { ISecret } from 'aws-cdk-lib/aws-secretsmanager';
|
|
7
|
+
import { Construct } from 'constructs';
|
|
8
|
+
import { CommonConstruct } from '../../common/index.js';
|
|
9
|
+
import { RestApiLambdaEnvironment, RestApiLambdaProps } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* @classdesc Provides a construct to create and deploy a RestApi as Lambda
|
|
12
|
+
*
|
|
13
|
+
* <b>Architecture</b><br/> 
|
|
14
|
+
* @example
|
|
15
|
+
* import { RestApiLambda, RestApiLambdaProps } '@gradientedge/cdk-utils'
|
|
16
|
+
* import { Construct } from 'constructs'
|
|
17
|
+
*
|
|
18
|
+
* class CustomConstruct extends RestApiLambda {
|
|
19
|
+
* constructor(parent: Construct, id: string, props: RestApiLambdaProps) {
|
|
20
|
+
* super(parent, id, props)
|
|
21
|
+
* this.props = props
|
|
22
|
+
* this.id = id
|
|
23
|
+
* this.initResources()
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
*/
|
|
27
|
+
export declare abstract class RestApiLambda extends CommonConstruct {
|
|
28
|
+
props: RestApiLambdaProps;
|
|
29
|
+
id: string;
|
|
30
|
+
applicationSecrets: ISecret[];
|
|
31
|
+
restApiLambdaPolicy: PolicyDocument;
|
|
32
|
+
restApiLambdaRole: Role;
|
|
33
|
+
restApiLambdaEnvironment: RestApiLambdaEnvironment;
|
|
34
|
+
restApiLambdaLayers: ILayerVersion[];
|
|
35
|
+
restApiLambdaFunction: IFunction;
|
|
36
|
+
restApi: RestApi;
|
|
37
|
+
restApiHostedZone: IHostedZone;
|
|
38
|
+
restApiCertificate: ICertificate;
|
|
39
|
+
restApiDomain: DomainName;
|
|
40
|
+
restApiBasePathMappings: BasePathMapping[];
|
|
41
|
+
protected constructor(parent: Construct, id: string, props: RestApiLambdaProps);
|
|
42
|
+
/**
|
|
43
|
+
* @summary Initialise and provision resources
|
|
44
|
+
*/
|
|
45
|
+
initResources(): void;
|
|
46
|
+
/**
|
|
47
|
+
* @summary Method to resolve secrets from SecretsManager
|
|
48
|
+
* - To be implemented in the overriding method in the implementation class
|
|
49
|
+
*/
|
|
50
|
+
protected resolveSecrets(): void;
|
|
51
|
+
/**
|
|
52
|
+
* @summary Method to resolve a hosted zone based on domain attributes
|
|
53
|
+
*/
|
|
54
|
+
protected resolveHostedZone(): void;
|
|
55
|
+
/**
|
|
56
|
+
* @summary Method to resolve a certificate based on attributes
|
|
57
|
+
*/
|
|
58
|
+
protected resolveCertificate(): void;
|
|
59
|
+
/**
|
|
60
|
+
* @summary Method to create iam policy for RestApi Lambda function
|
|
61
|
+
*/
|
|
62
|
+
protected createLambdaPolicy(): void;
|
|
63
|
+
/**
|
|
64
|
+
* @summary Method to create iam role for RestApi Lambda function
|
|
65
|
+
*/
|
|
66
|
+
protected createLambdaRole(): void;
|
|
67
|
+
/**
|
|
68
|
+
* @summary Method to create environment variables for RestApi Lambda function
|
|
69
|
+
*/
|
|
70
|
+
protected createLambdaEnvironment(): void;
|
|
71
|
+
/**
|
|
72
|
+
* @summary Method to create layers for RestApi Lambda function
|
|
73
|
+
*/
|
|
74
|
+
protected createLambdaLayers(): void;
|
|
75
|
+
/**
|
|
76
|
+
* @summary Method to create lambda function for RestApi
|
|
77
|
+
*/
|
|
78
|
+
protected createLambdaFunction(): void;
|
|
79
|
+
/**
|
|
80
|
+
* @summary Method to create rest restApiLambda for RestApi
|
|
81
|
+
*/
|
|
82
|
+
protected createRestApi(): void;
|
|
83
|
+
protected abstract createRestApiResources(): void;
|
|
84
|
+
/**
|
|
85
|
+
* @summary Method to create custom restApiLambda domain for RestApi
|
|
86
|
+
*/
|
|
87
|
+
protected createApiDomain(): void;
|
|
88
|
+
/**
|
|
89
|
+
* @summary Method to create base path mappings for RestApi
|
|
90
|
+
*/
|
|
91
|
+
protected createApiBasePathMapping(): void;
|
|
92
|
+
/**
|
|
93
|
+
* @summary Method to create route53 records for RestApi
|
|
94
|
+
*/
|
|
95
|
+
protected createApiRouteAssets(): void;
|
|
96
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { BasePathMapping } from 'aws-cdk-lib/aws-apigateway';
|
|
2
|
+
import { PolicyDocument } from 'aws-cdk-lib/aws-iam';
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
import { CommonConstruct } from '../../common/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* @classdesc Provides a construct to create and deploy a RestApi as Lambda
|
|
7
|
+
*
|
|
8
|
+
* <b>Architecture</b><br/> 
|
|
9
|
+
* @example
|
|
10
|
+
* import { RestApiLambda, RestApiLambdaProps } '@gradientedge/cdk-utils'
|
|
11
|
+
* import { Construct } from 'constructs'
|
|
12
|
+
*
|
|
13
|
+
* class CustomConstruct extends RestApiLambda {
|
|
14
|
+
* constructor(parent: Construct, id: string, props: RestApiLambdaProps) {
|
|
15
|
+
* super(parent, id, props)
|
|
16
|
+
* this.props = props
|
|
17
|
+
* this.id = id
|
|
18
|
+
* this.initResources()
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
*/
|
|
22
|
+
export class RestApiLambda extends CommonConstruct {
|
|
23
|
+
/* restApiLambda props */
|
|
24
|
+
props;
|
|
25
|
+
id;
|
|
26
|
+
/* restApiLambda resources */
|
|
27
|
+
applicationSecrets;
|
|
28
|
+
restApiLambdaPolicy;
|
|
29
|
+
restApiLambdaRole;
|
|
30
|
+
restApiLambdaEnvironment;
|
|
31
|
+
restApiLambdaLayers = [];
|
|
32
|
+
restApiLambdaFunction;
|
|
33
|
+
restApi;
|
|
34
|
+
restApiHostedZone;
|
|
35
|
+
restApiCertificate;
|
|
36
|
+
restApiDomain;
|
|
37
|
+
restApiBasePathMappings = [];
|
|
38
|
+
constructor(parent, id, props) {
|
|
39
|
+
super(parent, id, props);
|
|
40
|
+
this.props = props;
|
|
41
|
+
this.id = id;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* @summary Initialise and provision resources
|
|
45
|
+
*/
|
|
46
|
+
initResources() {
|
|
47
|
+
this.resolveSecrets();
|
|
48
|
+
this.resolveHostedZone();
|
|
49
|
+
this.resolveCertificate();
|
|
50
|
+
this.createLambdaPolicy();
|
|
51
|
+
this.createLambdaRole();
|
|
52
|
+
this.createLambdaEnvironment();
|
|
53
|
+
this.createLambdaLayers();
|
|
54
|
+
this.createLambdaFunction();
|
|
55
|
+
this.createRestApi();
|
|
56
|
+
this.createRestApiResources();
|
|
57
|
+
this.createApiDomain();
|
|
58
|
+
this.createApiBasePathMapping();
|
|
59
|
+
this.createApiRouteAssets();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @summary Method to resolve secrets from SecretsManager
|
|
63
|
+
* - To be implemented in the overriding method in the implementation class
|
|
64
|
+
*/
|
|
65
|
+
resolveSecrets() {
|
|
66
|
+
this.applicationSecrets = [];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @summary Method to resolve a hosted zone based on domain attributes
|
|
70
|
+
*/
|
|
71
|
+
resolveHostedZone() {
|
|
72
|
+
this.restApiHostedZone = this.route53Manager.withHostedZoneFromFullyQualifiedDomainName(`${this.id}-hosted-zone`, this, this.props.useExistingHostedZone);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @summary Method to resolve a certificate based on attributes
|
|
76
|
+
*/
|
|
77
|
+
resolveCertificate() {
|
|
78
|
+
if (this.props.restApiCertificate.useExistingCertificate &&
|
|
79
|
+
this.props.restApiCertificate.certificateSsmName &&
|
|
80
|
+
this.props.restApiCertificate.certificateRegion) {
|
|
81
|
+
this.props.restApiCertificate.certificateArn = this.ssmManager.readStringParameterFromRegion(`${this.id}-certificate-param`, this, this.props.restApiCertificate.certificateSsmName, this.props.restApiCertificate.certificateRegion);
|
|
82
|
+
}
|
|
83
|
+
this.restApiCertificate = this.acmManager.resolveCertificate(`${this.id}-certificate`, this, this.props.restApiCertificate);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* @summary Method to create iam policy for RestApi Lambda function
|
|
87
|
+
*/
|
|
88
|
+
createLambdaPolicy() {
|
|
89
|
+
this.restApiLambdaPolicy = new PolicyDocument({
|
|
90
|
+
statements: [this.iamManager.statementForCreateAnyLogStream()],
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* @summary Method to create iam role for RestApi Lambda function
|
|
95
|
+
*/
|
|
96
|
+
createLambdaRole() {
|
|
97
|
+
this.restApiLambdaRole = this.iamManager.createRoleForLambda(`${this.id}-lambda-role`, this, this.restApiLambdaPolicy);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* @summary Method to create environment variables for RestApi Lambda function
|
|
101
|
+
*/
|
|
102
|
+
createLambdaEnvironment() {
|
|
103
|
+
this.restApiLambdaEnvironment = {
|
|
104
|
+
LOG_LEVEL: this.props.logLevel,
|
|
105
|
+
NODE_ENV: this.props.nodeEnv,
|
|
106
|
+
TZ: this.props.timezone,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* @summary Method to create layers for RestApi Lambda function
|
|
111
|
+
*/
|
|
112
|
+
createLambdaLayers() {
|
|
113
|
+
const layers = [];
|
|
114
|
+
if (!this.props.restApiLambdaLayerSources)
|
|
115
|
+
return;
|
|
116
|
+
_.forEach(this.props.restApiLambdaLayerSources, (source, index) => {
|
|
117
|
+
layers.push(this.lambdaManager.createLambdaLayer(`${this.id}-layer-${index}`, this, source));
|
|
118
|
+
});
|
|
119
|
+
this.restApiLambdaLayers = layers;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* @summary Method to create lambda function for RestApi
|
|
123
|
+
*/
|
|
124
|
+
createLambdaFunction() {
|
|
125
|
+
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);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* @summary Method to create rest restApiLambda for RestApi
|
|
129
|
+
*/
|
|
130
|
+
createRestApi() {
|
|
131
|
+
this.restApi = this.apiManager.createLambdaRestApi(`${this.id}-lambda-rest-api`, this, this.props.restApi, this.restApiLambdaFunction);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* @summary Method to create custom restApiLambda domain for RestApi
|
|
135
|
+
*/
|
|
136
|
+
createApiDomain() {
|
|
137
|
+
this.restApiDomain = this.apiManager.createApiDomain(`${this.id}-api-domain`, this, this.isProductionStage() || this.props.skipStageForARecords
|
|
138
|
+
? `${this.props.apiSubDomain}.${this.fullyQualifiedDomainName}`
|
|
139
|
+
: `${this.props.apiSubDomain}-${this.props.stage}.${this.fullyQualifiedDomainName}`, this.restApiCertificate);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* @summary Method to create base path mappings for RestApi
|
|
143
|
+
*/
|
|
144
|
+
createApiBasePathMapping() {
|
|
145
|
+
const apiRootPaths = this.props.apiRootPaths;
|
|
146
|
+
if (apiRootPaths && !_.isEmpty(apiRootPaths)) {
|
|
147
|
+
_.forEach(apiRootPaths, (apiRootPath) => {
|
|
148
|
+
this.restApiBasePathMappings.push(new BasePathMapping(this, `${this.id}-base-bath-mapping-${apiRootPath}`, {
|
|
149
|
+
basePath: apiRootPath,
|
|
150
|
+
domainName: this.restApiDomain,
|
|
151
|
+
restApi: this.restApi,
|
|
152
|
+
stage: this.restApi.deploymentStage,
|
|
153
|
+
}));
|
|
154
|
+
});
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// add default mapping if apiRootPaths not set
|
|
158
|
+
new BasePathMapping(this, `${this.id}-base-bath-mapping`, {
|
|
159
|
+
domainName: this.restApiDomain,
|
|
160
|
+
restApi: this.restApi,
|
|
161
|
+
stage: this.restApi.deploymentStage,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* @summary Method to create route53 records for RestApi
|
|
166
|
+
*/
|
|
167
|
+
createApiRouteAssets() {
|
|
168
|
+
this.route53Manager.createApiGatewayARecord(`${this.id}-custom-domain-a-record`, this, this.props.apiSubDomain, this.restApiDomain, this.restApiHostedZone, this.props.skipStageForARecords);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AcmProps, LambdaEnvironment, LambdaProps, LambdaRestApiProps } from '../../services/index.js';
|
|
2
|
+
import { CommonStackProps } from '../../common/index.js';
|
|
3
|
+
import { AssetCode } from 'aws-cdk-lib/aws-lambda';
|
|
4
|
+
/**
|
|
5
|
+
*/
|
|
6
|
+
export interface RestApiLambdaEnvironment extends LambdaEnvironment {
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
*/
|
|
10
|
+
export interface RestApiLambdaProps extends CommonStackProps {
|
|
11
|
+
apiRootPaths?: string[];
|
|
12
|
+
apiSubDomain: string;
|
|
13
|
+
logLevel: string;
|
|
14
|
+
nodeEnv: string;
|
|
15
|
+
restApi: LambdaRestApiProps;
|
|
16
|
+
restApiCertificate: AcmProps;
|
|
17
|
+
restApiHandler: string;
|
|
18
|
+
restApiLambda: LambdaProps;
|
|
19
|
+
restApiLambdaLayerSources?: AssetCode[];
|
|
20
|
+
restApiSource: AssetCode;
|
|
21
|
+
timezone: string;
|
|
22
|
+
useExistingHostedZone: boolean;
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ISecurityGroup, IVpc } from 'aws-cdk-lib/aws-ec2';
|
|
2
|
+
import { CfnReplicationGroup } from 'aws-cdk-lib/aws-elasticache';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
import { RestApiLambdaWithCacheProps } from './types.js';
|
|
5
|
+
import { RestApiLambda } from '../rest-api-lambda/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* @classdesc Provides a construct to create and deploy a RestApi API as Lambda with Caching
|
|
8
|
+
*
|
|
9
|
+
* <b>Architecture</b><br/> 
|
|
10
|
+
* @example
|
|
11
|
+
* import { RestApiLambdaWithCacheProps } '@gradientedge/cdk-utils'
|
|
12
|
+
* import { Construct } from 'constructs'
|
|
13
|
+
*
|
|
14
|
+
* class CustomConstruct extends RestApiLambdaWithCache {
|
|
15
|
+
* constructor(parent: Construct, id: string, props: RestApiLambdaWithCacheProps) {
|
|
16
|
+
* super(parent, id, props)
|
|
17
|
+
* this.props = props
|
|
18
|
+
* this.id = id
|
|
19
|
+
* this.initResources()
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
*/
|
|
23
|
+
export declare abstract class RestApiLambdaWithCache extends RestApiLambda {
|
|
24
|
+
props: RestApiLambdaWithCacheProps;
|
|
25
|
+
id: string;
|
|
26
|
+
restApivpc: IVpc;
|
|
27
|
+
restApiCache: CfnReplicationGroup;
|
|
28
|
+
restApiSecurityGroup: ISecurityGroup;
|
|
29
|
+
restApiSecurityGroupExportName: string;
|
|
30
|
+
protected constructor(parent: Construct, id: string, props: RestApiLambdaWithCacheProps);
|
|
31
|
+
initResources(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Create VPC
|
|
34
|
+
*/
|
|
35
|
+
protected resolveVpc(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Resolve Security Group
|
|
38
|
+
*/
|
|
39
|
+
protected resolveSecurityGroup(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Create ElastiCache
|
|
42
|
+
*/
|
|
43
|
+
protected createElastiCache(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Create Lambda Role
|
|
46
|
+
*/
|
|
47
|
+
protected createLambdaRole(): void;
|
|
48
|
+
/**
|
|
49
|
+
* @summary Method to create environment variables for RestApi Lambda function
|
|
50
|
+
*/
|
|
51
|
+
protected createLambdaEnvironment(): void;
|
|
52
|
+
/**
|
|
53
|
+
* @summary Method to create lambda function for RestApi API
|
|
54
|
+
*/
|
|
55
|
+
protected createLambdaFunction(): void;
|
|
56
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Fn } from 'aws-cdk-lib';
|
|
2
|
+
import { Peer, Port, SecurityGroup } from 'aws-cdk-lib/aws-ec2';
|
|
3
|
+
import { ManagedPolicy } from 'aws-cdk-lib/aws-iam';
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import { createCfnOutput } from '../../utils/index.js';
|
|
6
|
+
import { RestApiLambda } from '../rest-api-lambda/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* @classdesc Provides a construct to create and deploy a RestApi API as Lambda with Caching
|
|
9
|
+
*
|
|
10
|
+
* <b>Architecture</b><br/> 
|
|
11
|
+
* @example
|
|
12
|
+
* import { RestApiLambdaWithCacheProps } '@gradientedge/cdk-utils'
|
|
13
|
+
* import { Construct } from 'constructs'
|
|
14
|
+
*
|
|
15
|
+
* class CustomConstruct extends RestApiLambdaWithCache {
|
|
16
|
+
* constructor(parent: Construct, id: string, props: RestApiLambdaWithCacheProps) {
|
|
17
|
+
* super(parent, id, props)
|
|
18
|
+
* this.props = props
|
|
19
|
+
* this.id = id
|
|
20
|
+
* this.initResources()
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
*/
|
|
24
|
+
export class RestApiLambdaWithCache extends RestApiLambda {
|
|
25
|
+
/* restApiLambdaWithCache props */
|
|
26
|
+
props;
|
|
27
|
+
id;
|
|
28
|
+
/* restApiLambda resources */
|
|
29
|
+
restApivpc;
|
|
30
|
+
restApiCache;
|
|
31
|
+
restApiSecurityGroup;
|
|
32
|
+
restApiSecurityGroupExportName;
|
|
33
|
+
constructor(parent, id, props) {
|
|
34
|
+
super(parent, id, props);
|
|
35
|
+
this.props = props;
|
|
36
|
+
this.id = id;
|
|
37
|
+
}
|
|
38
|
+
initResources() {
|
|
39
|
+
this.resolveVpc();
|
|
40
|
+
this.resolveSecurityGroup();
|
|
41
|
+
this.createElastiCache();
|
|
42
|
+
super.initResources();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create VPC
|
|
46
|
+
*/
|
|
47
|
+
resolveVpc() {
|
|
48
|
+
if (this.props.useExistingVpc) {
|
|
49
|
+
this.restApivpc = this.vpcManager.retrieveCommonVpc(`${this.id}-vpc`, this, this.props.vpcName);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.restApivpc = this.vpcManager.createCommonVpc(`${this.id}-vpc`, this, this.props.restApiVpc, this.props.restApiVpc.vpcName);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve Security Group
|
|
57
|
+
*/
|
|
58
|
+
resolveSecurityGroup() {
|
|
59
|
+
if (this.props.securityGroupExportName) {
|
|
60
|
+
this.restApiSecurityGroup = SecurityGroup.fromSecurityGroupId(this, `${this.id}-security-group`, Fn.importValue(this.props.securityGroupExportName));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.restApiSecurityGroup = new SecurityGroup(this, `${this.id}-security-group-${this.props.stage}`, {
|
|
64
|
+
securityGroupName: `${this.id}-security-group-${this.props.stage}`,
|
|
65
|
+
vpc: this.restApivpc,
|
|
66
|
+
});
|
|
67
|
+
if (this.props.restApiVpc.isIPV6) {
|
|
68
|
+
this.restApiSecurityGroup.addIngressRule(Peer.anyIpv6(), Port.allTraffic(), 'All Traffic');
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.restApiSecurityGroup.addIngressRule(Peer.anyIpv4(), Port.allTraffic(), 'All Traffic');
|
|
72
|
+
}
|
|
73
|
+
createCfnOutput(`${this.id}-security-group-id`, this, this.restApiSecurityGroup.securityGroupId);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create ElastiCache
|
|
78
|
+
*/
|
|
79
|
+
createElastiCache() {
|
|
80
|
+
if (!this.props.restApiCache) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
this.restApiCache = this.elasticacheManager.createReplicatedElastiCache(`${this.id}-elasticache`, this, this.props.restApiCache, _.map(this.restApivpc.privateSubnets, subnet => subnet.subnetId), [this.restApiSecurityGroup.securityGroupId]);
|
|
84
|
+
this.ssmManager.writeStringToParameters(`${this.id}-elasticache-endpoint-address`, this, {
|
|
85
|
+
description: `Elasticache address to use by applications`,
|
|
86
|
+
parameterName: `${this.id}-elasticache-endpoint-address`,
|
|
87
|
+
stringValue: this.restApiCache.attrConfigurationEndPointAddress,
|
|
88
|
+
});
|
|
89
|
+
this.ssmManager.writeStringToParameters(`${this.id}-elasticache-endpoint-port`, this, {
|
|
90
|
+
description: `Elasticache port to use by applications`,
|
|
91
|
+
parameterName: `${this.id}-elasticache-endpoint-port`,
|
|
92
|
+
stringValue: this.restApiCache.attrConfigurationEndPointPort,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create Lambda Role
|
|
97
|
+
*/
|
|
98
|
+
createLambdaRole() {
|
|
99
|
+
super.createLambdaRole();
|
|
100
|
+
this.restApiLambdaRole.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaVPCAccessExecutionRole'));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* @summary Method to create environment variables for RestApi Lambda function
|
|
104
|
+
*/
|
|
105
|
+
createLambdaEnvironment() {
|
|
106
|
+
this.restApiLambdaEnvironment = {
|
|
107
|
+
LOG_LEVEL: this.props.logLevel,
|
|
108
|
+
NODE_ENV: this.props.nodeEnv,
|
|
109
|
+
TZ: this.props.timezone,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* @summary Method to create lambda function for RestApi API
|
|
114
|
+
*/
|
|
115
|
+
createLambdaFunction() {
|
|
116
|
+
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);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RestApiLambdaProps } from '../rest-api-lambda/index.js';
|
|
2
|
+
import { ReplicatedElastiCacheProps, VpcProps } from '../../services/index.js';
|
|
3
|
+
/**
|
|
4
|
+
*/
|
|
5
|
+
export interface RestApiLambdaWithCacheProps extends RestApiLambdaProps {
|
|
6
|
+
restApiCache: ReplicatedElastiCacheProps;
|
|
7
|
+
restApiVpc: VpcProps;
|
|
8
|
+
securityGroupExportName: string;
|
|
9
|
+
useExistingVpc: boolean;
|
|
10
|
+
vpcName?: string;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|