@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,38 @@
|
|
|
1
|
+
import { Fn } from 'aws-cdk-lib';
|
|
2
|
+
import { CfnEgressOnlyInternetGateway, CfnVPCCidrBlock, RouterType, Vpc, } from 'aws-cdk-lib/aws-ec2';
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
export class Ipv6Vpc extends Vpc {
|
|
5
|
+
egressOnlyInternetGatewayId;
|
|
6
|
+
constructor(scope, id, props) {
|
|
7
|
+
super(scope, id, props);
|
|
8
|
+
const cfnVpcCidrBlock = new CfnVPCCidrBlock(this, `${id}-ipv6-cidr`, {
|
|
9
|
+
amazonProvidedIpv6CidrBlock: true,
|
|
10
|
+
vpcId: this.vpcId,
|
|
11
|
+
});
|
|
12
|
+
const subnetIpv6CidrBlocks = Fn.cidr(Fn.select(0, this.vpcIpv6CidrBlocks), 256, '64');
|
|
13
|
+
_.forEach([...this.publicSubnets, ...this.privateSubnets, ...this.isolatedSubnets], (subnet, index) => {
|
|
14
|
+
subnet.node.addDependency(cfnVpcCidrBlock);
|
|
15
|
+
const cfnSubnet = subnet.node.defaultChild;
|
|
16
|
+
cfnSubnet.cidrBlock = undefined;
|
|
17
|
+
cfnSubnet.mapPublicIpOnLaunch = false;
|
|
18
|
+
cfnSubnet.ipv6CidrBlock = Fn.select(index, subnetIpv6CidrBlocks);
|
|
19
|
+
cfnSubnet.assignIpv6AddressOnCreation = true;
|
|
20
|
+
cfnSubnet.ipv6Native = true;
|
|
21
|
+
});
|
|
22
|
+
const addDefaultIpv6Routes = (subnets, gatewayId, routerType) => subnets.forEach(subnet => subnet.addRoute(`${id}-default-route`, {
|
|
23
|
+
destinationIpv6CidrBlock: '::/0',
|
|
24
|
+
enablesInternetConnectivity: true,
|
|
25
|
+
routerId: gatewayId,
|
|
26
|
+
routerType: routerType,
|
|
27
|
+
}));
|
|
28
|
+
if (this.internetGatewayId) {
|
|
29
|
+
addDefaultIpv6Routes(this.publicSubnets, this.internetGatewayId, RouterType.GATEWAY);
|
|
30
|
+
}
|
|
31
|
+
if (_.isEmpty(this.privateSubnets)) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const egressIgw = new CfnEgressOnlyInternetGateway(this, `${id}-eigw`, { vpcId: this.vpcId });
|
|
35
|
+
this.egressOnlyInternetGatewayId = egressIgw.ref;
|
|
36
|
+
addDefaultIpv6Routes(this.privateSubnets, egressIgw.ref, RouterType.EGRESS_ONLY_INTERNET_GATEWAY);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Vpc } from 'aws-cdk-lib/aws-ec2';
|
|
2
|
+
import { CommonConstruct } from '../../common/index.js';
|
|
3
|
+
import { VpcProps } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* @classdesc Provides operations on AWS VPC.
|
|
6
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
7
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
8
|
+
* @example
|
|
9
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
10
|
+
*
|
|
11
|
+
* class CustomConstruct extends CommonConstruct {
|
|
12
|
+
* constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
|
|
13
|
+
* super(parent, id, props)
|
|
14
|
+
* this.props = props
|
|
15
|
+
* this.vpcManager.createVpc('MyVPC', this)
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* @see [CDK VPC Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.@aws-cdk_aws-Vpc.html}
|
|
19
|
+
*/
|
|
20
|
+
export declare class VpcManager {
|
|
21
|
+
/**
|
|
22
|
+
* @summary Method to create a new vpc
|
|
23
|
+
* @param id scoped id of the resource
|
|
24
|
+
* @param scope scope in which this resource is defined
|
|
25
|
+
* @param props
|
|
26
|
+
*/
|
|
27
|
+
createVpc(id: string, scope: CommonConstruct, props: VpcProps): Vpc;
|
|
28
|
+
/**
|
|
29
|
+
* @summary Method to create a common vpc
|
|
30
|
+
* @param id scoped id of the resource
|
|
31
|
+
* @param scope scope in which this resource is defined
|
|
32
|
+
* @param props
|
|
33
|
+
* @param vpcIdentifier optional identifier for VPC
|
|
34
|
+
*/
|
|
35
|
+
createCommonVpc(id: string, scope: CommonConstruct, props: VpcProps, vpcIdentifier?: string): Vpc;
|
|
36
|
+
/**
|
|
37
|
+
* @summary Method to retrieve a common vpc
|
|
38
|
+
* @param id scoped id of the resource
|
|
39
|
+
* @param scope scope in which this resource is defined
|
|
40
|
+
* @param vpcIdentifier optional identifier for VPC
|
|
41
|
+
*/
|
|
42
|
+
retrieveCommonVpc(id: string, scope: CommonConstruct, vpcIdentifier?: string): import("aws-cdk-lib/aws-ec2").IVpc;
|
|
43
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Tags } from 'aws-cdk-lib';
|
|
2
|
+
import { SubnetType, Vpc } from 'aws-cdk-lib/aws-ec2';
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
import { createCfnOutput } from '../../utils/index.js';
|
|
5
|
+
import { Ipv6Vpc } from './ipv6.js';
|
|
6
|
+
/**
|
|
7
|
+
*/
|
|
8
|
+
const CommonVpcIdentifier = 'CommonVpc';
|
|
9
|
+
/**
|
|
10
|
+
* @classdesc Provides operations on AWS VPC.
|
|
11
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
12
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
13
|
+
* @example
|
|
14
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
15
|
+
*
|
|
16
|
+
* class CustomConstruct extends CommonConstruct {
|
|
17
|
+
* constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
|
|
18
|
+
* super(parent, id, props)
|
|
19
|
+
* this.props = props
|
|
20
|
+
* this.vpcManager.createVpc('MyVPC', this)
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* @see [CDK VPC Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.@aws-cdk_aws-Vpc.html}
|
|
24
|
+
*/
|
|
25
|
+
export class VpcManager {
|
|
26
|
+
/**
|
|
27
|
+
* @summary Method to create a new vpc
|
|
28
|
+
* @param id scoped id of the resource
|
|
29
|
+
* @param scope scope in which this resource is defined
|
|
30
|
+
* @param props
|
|
31
|
+
*/
|
|
32
|
+
createVpc(id, scope, props) {
|
|
33
|
+
if (!props)
|
|
34
|
+
throw `Vpc props undefined for ${id}`;
|
|
35
|
+
if (!props.vpcName)
|
|
36
|
+
throw `Vpc vpcName undefined for ${id}`;
|
|
37
|
+
const vpcName = scope.resourceNameFormatter.format(props.vpcName, scope.props.resourceNameOptions?.vpc);
|
|
38
|
+
let vpc;
|
|
39
|
+
if (props.isIPV6) {
|
|
40
|
+
vpc = new Ipv6Vpc(scope, `${id}`, {
|
|
41
|
+
...props,
|
|
42
|
+
subnetConfiguration: [
|
|
43
|
+
{ name: `${vpcName}-public`, subnetType: SubnetType.PUBLIC },
|
|
44
|
+
{ name: `${vpcName}-private`, subnetType: SubnetType.PRIVATE_WITH_EGRESS },
|
|
45
|
+
],
|
|
46
|
+
vpcName,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
vpc = new Vpc(scope, `${id}`, {
|
|
51
|
+
...props,
|
|
52
|
+
vpcName,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
createCfnOutput(`${id}Id`, scope, vpc.vpcId);
|
|
56
|
+
createCfnOutput(`${id}PublicSubnetIds`, scope, _.map(vpc.publicSubnets, subnet => subnet.subnetId).toString());
|
|
57
|
+
createCfnOutput(`${id}PrivateSubnetIds`, scope, _.map(vpc.privateSubnets, subnet => subnet.subnetId).toString());
|
|
58
|
+
createCfnOutput(`${id}PublicSubnetRouteTableIds`, scope, _.map(vpc.publicSubnets, subnet => subnet.routeTable.routeTableId).toString());
|
|
59
|
+
createCfnOutput(`${id}PrivateSubnetRouteTableIds`, scope, _.map(vpc.privateSubnets, subnet => subnet.routeTable.routeTableId).toString());
|
|
60
|
+
createCfnOutput(`${id}AvailabilityZones`, scope, vpc.availabilityZones.toString());
|
|
61
|
+
createCfnOutput(`${id}DefaultSecurityGroup`, scope, vpc.vpcDefaultSecurityGroup.toString());
|
|
62
|
+
return vpc;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @summary Method to create a common vpc
|
|
66
|
+
* @param id scoped id of the resource
|
|
67
|
+
* @param scope scope in which this resource is defined
|
|
68
|
+
* @param props
|
|
69
|
+
* @param vpcIdentifier optional identifier for VPC
|
|
70
|
+
*/
|
|
71
|
+
createCommonVpc(id, scope, props, vpcIdentifier) {
|
|
72
|
+
const vpc = this.createVpc(id, scope, props);
|
|
73
|
+
Tags.of(vpc).add('Name', scope.resourceNameFormatter.format(vpcIdentifier ?? CommonVpcIdentifier, scope.props.resourceNameOptions?.vpc));
|
|
74
|
+
return vpc;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* @summary Method to retrieve a common vpc
|
|
78
|
+
* @param id scoped id of the resource
|
|
79
|
+
* @param scope scope in which this resource is defined
|
|
80
|
+
* @param vpcIdentifier optional identifier for VPC
|
|
81
|
+
*/
|
|
82
|
+
retrieveCommonVpc(id, scope, vpcIdentifier) {
|
|
83
|
+
return Vpc.fromLookup(scope, `${id}`, {
|
|
84
|
+
vpcName: scope.resourceNameFormatter.format(vpcIdentifier ?? CommonVpcIdentifier, scope.props.resourceNameOptions?.vpc),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { CfnIPSet, CfnWebACL } from 'aws-cdk-lib/aws-wafv2';
|
|
2
|
+
import { CommonConstruct } from '../../common/index.js';
|
|
3
|
+
import { WafIPSetProps, WafWebACLProps } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* @classdesc Provides operations on AWS WAF.
|
|
6
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
7
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
8
|
+
* @example
|
|
9
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
10
|
+
*
|
|
11
|
+
* class CustomConstruct extends CommonConstruct {
|
|
12
|
+
* constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
|
|
13
|
+
* super(parent, id, props)
|
|
14
|
+
* this.props = props
|
|
15
|
+
* this.wafManager.createWebAcl('MyWebAcl', this)
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* @see [CDK WAF Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_waf-readme.html}
|
|
19
|
+
*/
|
|
20
|
+
export declare class WafManager {
|
|
21
|
+
/**
|
|
22
|
+
* @summary Method to create an ip set
|
|
23
|
+
* @param id scoped id of the resource
|
|
24
|
+
* @param scope scope in which this resource is defined
|
|
25
|
+
* @param props
|
|
26
|
+
*/
|
|
27
|
+
createIpSet(id: string, scope: CommonConstruct, props: WafIPSetProps): CfnIPSet;
|
|
28
|
+
/**
|
|
29
|
+
* @summary Method to create a web acl
|
|
30
|
+
* @param id scoped id of the resource
|
|
31
|
+
* @param scope scope in which this resource is defined
|
|
32
|
+
* @param props
|
|
33
|
+
*/
|
|
34
|
+
createWebAcl(id: string, scope: CommonConstruct, props: WafWebACLProps): CfnWebACL;
|
|
35
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { CfnIPSet, CfnWebACL } from 'aws-cdk-lib/aws-wafv2';
|
|
2
|
+
import { createCfnOutput } from '../../utils/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* @classdesc Provides operations on AWS WAF.
|
|
5
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
6
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
7
|
+
* @example
|
|
8
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
9
|
+
*
|
|
10
|
+
* class CustomConstruct extends CommonConstruct {
|
|
11
|
+
* constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
|
|
12
|
+
* super(parent, id, props)
|
|
13
|
+
* this.props = props
|
|
14
|
+
* this.wafManager.createWebAcl('MyWebAcl', this)
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
* @see [CDK WAF Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_waf-readme.html}
|
|
18
|
+
*/
|
|
19
|
+
export class WafManager {
|
|
20
|
+
/**
|
|
21
|
+
* @summary Method to create an ip set
|
|
22
|
+
* @param id scoped id of the resource
|
|
23
|
+
* @param scope scope in which this resource is defined
|
|
24
|
+
* @param props
|
|
25
|
+
*/
|
|
26
|
+
createIpSet(id, scope, props) {
|
|
27
|
+
if (!props)
|
|
28
|
+
throw `WAF Ip Set props undefined for ${id}`;
|
|
29
|
+
if (!props.name)
|
|
30
|
+
throw `WAF Ip Set name undefined for ${id}`;
|
|
31
|
+
const ipSet = new CfnIPSet(scope, `${id}`, {
|
|
32
|
+
...props,
|
|
33
|
+
description: `IP Set for ${id} - ${scope.props.stage} stage`,
|
|
34
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.waf),
|
|
35
|
+
});
|
|
36
|
+
createCfnOutput(`${id}-ipSetId`, scope, ipSet.attrId);
|
|
37
|
+
createCfnOutput(`${id}-ipSetArn`, scope, ipSet.attrArn);
|
|
38
|
+
return ipSet;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @summary Method to create a web acl
|
|
42
|
+
* @param id scoped id of the resource
|
|
43
|
+
* @param scope scope in which this resource is defined
|
|
44
|
+
* @param props
|
|
45
|
+
*/
|
|
46
|
+
createWebAcl(id, scope, props) {
|
|
47
|
+
if (!props)
|
|
48
|
+
throw `WAF WebACL props undefined for ${id}`;
|
|
49
|
+
if (!props.name)
|
|
50
|
+
throw `WAF WebACL name undefined for ${id}`;
|
|
51
|
+
const webAcl = new CfnWebACL(scope, `${id}`, {
|
|
52
|
+
...props,
|
|
53
|
+
description: `Web Acl for ${id} - ${scope.props.stage} stage`,
|
|
54
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.waf),
|
|
55
|
+
tags: [{ key: 'service', value: scope.props.name }],
|
|
56
|
+
});
|
|
57
|
+
createCfnOutput(`${id}-webAclId`, scope, webAcl.attrId);
|
|
58
|
+
createCfnOutput(`${id}-webAclArn`, scope, webAcl.attrArn);
|
|
59
|
+
return webAcl;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { AwsCredentialIdentityProvider } from '@aws-sdk/types';
|
|
2
|
+
import { CfnOutput } from 'aws-cdk-lib';
|
|
3
|
+
import { CommonConstruct } from '../common/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* @summary Helper method to add CloudFormation outputs from the construct
|
|
6
|
+
* @param id scoped id of the resource
|
|
7
|
+
* @param scope scope in which this resource is defined
|
|
8
|
+
* @param value the value of the exported output
|
|
9
|
+
* @param description optional description for the output
|
|
10
|
+
* @param overrideId Flag which indicates whether to override the default logical id of the output
|
|
11
|
+
* @returns The CloudFormation output
|
|
12
|
+
*/
|
|
13
|
+
export declare function createCfnOutput(id: string, scope: CommonConstruct, value?: string, description?: string, overrideId?: boolean): CfnOutput;
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
export declare function determineCredentials(): AwsCredentialIdentityProvider;
|
|
18
|
+
/**
|
|
19
|
+
* @param error
|
|
20
|
+
*/
|
|
21
|
+
export declare function redirectError(error: any): {
|
|
22
|
+
body: string;
|
|
23
|
+
headers: {
|
|
24
|
+
'Access-Control-Allow-Origin': string;
|
|
25
|
+
};
|
|
26
|
+
isBase64Encoded: boolean;
|
|
27
|
+
statusCode: number;
|
|
28
|
+
} & {
|
|
29
|
+
body: string;
|
|
30
|
+
statusCode: number;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* @param message
|
|
34
|
+
*/
|
|
35
|
+
export declare function redirectSuccess(message: any): {
|
|
36
|
+
body: string;
|
|
37
|
+
headers: {
|
|
38
|
+
'Access-Control-Allow-Origin': string;
|
|
39
|
+
};
|
|
40
|
+
isBase64Encoded: boolean;
|
|
41
|
+
statusCode: number;
|
|
42
|
+
} & {
|
|
43
|
+
body: string;
|
|
44
|
+
statusCode: number;
|
|
45
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { fromEnv, fromIni } from '@aws-sdk/credential-providers';
|
|
2
|
+
import { CfnOutput } from 'aws-cdk-lib';
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
/**
|
|
5
|
+
* @summary Helper method to add CloudFormation outputs from the construct
|
|
6
|
+
* @param id scoped id of the resource
|
|
7
|
+
* @param scope scope in which this resource is defined
|
|
8
|
+
* @param value the value of the exported output
|
|
9
|
+
* @param description optional description for the output
|
|
10
|
+
* @param overrideId Flag which indicates whether to override the default logical id of the output
|
|
11
|
+
* @returns The CloudFormation output
|
|
12
|
+
*/
|
|
13
|
+
export function createCfnOutput(id, scope, value, description, overrideId = true) {
|
|
14
|
+
const camelName = _.camelCase(id);
|
|
15
|
+
const output = new CfnOutput(scope, id, {
|
|
16
|
+
description,
|
|
17
|
+
exportName: `${scope.props.stackName}-${camelName}`,
|
|
18
|
+
value: value ?? '',
|
|
19
|
+
});
|
|
20
|
+
if (overrideId) {
|
|
21
|
+
output.overrideLogicalId(camelName);
|
|
22
|
+
}
|
|
23
|
+
return output;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
export function determineCredentials() {
|
|
29
|
+
if (process.env.AWS_PROFILE)
|
|
30
|
+
return fromIni();
|
|
31
|
+
return fromEnv();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
*/
|
|
35
|
+
const defaultResponseObject = {
|
|
36
|
+
body: '',
|
|
37
|
+
headers: {
|
|
38
|
+
'Access-Control-Allow-Origin': '*',
|
|
39
|
+
},
|
|
40
|
+
isBase64Encoded: false,
|
|
41
|
+
statusCode: 200,
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* @param error
|
|
45
|
+
*/
|
|
46
|
+
export function redirectError(error) {
|
|
47
|
+
console.error(error, error.message, error.stack);
|
|
48
|
+
return Object.assign({}, defaultResponseObject, {
|
|
49
|
+
body: JSON.stringify(Object.assign({}, { error: error.message, success: false })),
|
|
50
|
+
statusCode: 500,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @param message
|
|
55
|
+
*/
|
|
56
|
+
export function redirectSuccess(message) {
|
|
57
|
+
return Object.assign({}, defaultResponseObject, {
|
|
58
|
+
body: JSON.stringify(Object.assign({}, { error: message, success: true })),
|
|
59
|
+
statusCode: 200,
|
|
60
|
+
});
|
|
61
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gradientedge/cdk-utils-aws",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "AWS CDK utilities for @gradientedge/cdk-utils",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/src/index.js",
|
|
10
|
+
"types": "./dist/src/index.d.ts"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist/src/"
|
|
15
|
+
],
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@aws-sdk/client-secrets-manager": "^3.1021.0",
|
|
18
|
+
"@aws-sdk/credential-providers": "^3.1021.0",
|
|
19
|
+
"@aws-sdk/types": "^3.973.6",
|
|
20
|
+
"@types/lodash": "^4.17.24",
|
|
21
|
+
"app-root-path": "^3.1.0",
|
|
22
|
+
"aws-cdk-lib": "^2.246.0",
|
|
23
|
+
"lodash": "^4.17.23",
|
|
24
|
+
"constructs": "^10.6.0",
|
|
25
|
+
"moment": "^2.30.1",
|
|
26
|
+
"uuid": "^13.0.0",
|
|
27
|
+
"@gradientedge/cdk-utils-common": "1.0.0"
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/gradientedge/cdk-utils.git",
|
|
36
|
+
"directory": "packages/aws"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsc",
|
|
40
|
+
"build:production": "tsc -p tsconfig.prd.json",
|
|
41
|
+
"test": "vitest run --coverage",
|
|
42
|
+
"lint": "eslint src/**/*.ts --cache --max-warnings=0 --no-warn-ignored"
|
|
43
|
+
}
|
|
44
|
+
}
|