@fjall/components-infrastructure 0.1.5 → 0.1.6
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/dist/lib/app.d.ts +2 -1
- package/dist/lib/app.js +4 -2
- package/dist/lib/config/aws/accountId.d.ts +6 -0
- package/dist/lib/config/aws/accountId.js +33 -0
- package/dist/lib/config/aws/cloudTrail.d.ts +10 -0
- package/dist/lib/config/aws/cloudTrail.js +22 -0
- package/dist/lib/config/aws/costAllocationTags.d.ts +4 -0
- package/dist/lib/config/aws/costAllocationTags.js +59 -0
- package/dist/lib/config/aws/delegateHostedZoneRole.d.ts +5 -0
- package/dist/lib/config/aws/delegateHostedZoneRole.js +77 -0
- package/dist/lib/config/aws/ecrDefaultImage.d.ts +11 -0
- package/dist/lib/config/aws/ecrDefaultImage.js +127 -0
- package/dist/lib/config/aws/eventBus.d.ts +7 -0
- package/dist/lib/config/aws/eventBus.js +24 -0
- package/dist/lib/config/aws/identityCenter.d.ts +13 -0
- package/dist/lib/config/aws/identityCenter.js +102 -0
- package/dist/lib/config/aws/identityCenterUser.d.ts +16 -0
- package/dist/lib/config/aws/identityCenterUser.js +125 -0
- package/dist/lib/config/aws/index.d.ts +12 -0
- package/dist/lib/config/aws/index.js +29 -0
- package/dist/lib/config/aws/ipam.d.ts +5 -0
- package/dist/lib/config/aws/ipam.js +48 -0
- package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +8 -0
- package/dist/lib/config/aws/ipamDelegateAdmin.js +58 -0
- package/dist/lib/config/aws/ipamPool.d.ts +5 -0
- package/dist/lib/config/aws/ipamPool.js +56 -0
- package/dist/lib/config/aws/ipamPoolId.d.ts +9 -0
- package/dist/lib/config/aws/ipamPoolId.js +36 -0
- package/dist/lib/config/aws/{base/identityCenter.d.ts → ipamPoolResourceShare.d.ts} +2 -2
- package/dist/lib/config/aws/ipamPoolResourceShare.js +42 -0
- package/dist/lib/config/aws/organisation.d.ts +28 -0
- package/dist/lib/config/aws/organisation.js +142 -0
- package/dist/lib/config/aws/organisationId.d.ts +7 -0
- package/dist/lib/config/aws/organisationId.js +46 -0
- package/dist/lib/config/aws/{base/ipamPool.d.ts → ramEnableSharing.d.ts} +1 -1
- package/dist/lib/config/aws/ramEnableSharing.js +35 -0
- package/dist/lib/config/aws/ramSharing.d.ts +4 -0
- package/dist/lib/config/aws/ramSharing.js +35 -0
- package/dist/lib/config/aws/{base/ipam.d.ts → users.d.ts} +1 -1
- package/dist/lib/config/aws/users.js +126 -0
- package/dist/lib/config/fjall/hostedZones/fjall.io.d.ts +10 -0
- package/dist/lib/config/fjall/hostedZones/fjall.io.js +25 -0
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/index.js +4 -1
- package/dist/lib/patterns/aws/basicApp.d.ts +47 -0
- package/dist/lib/patterns/aws/basicApp.js +90 -0
- package/dist/lib/patterns/aws/buildkite.d.ts +50 -0
- package/dist/lib/patterns/aws/buildkite.js +346 -0
- package/dist/lib/patterns/aws/freeTierApp.d.ts +46 -0
- package/dist/lib/patterns/aws/freeTierApp.js +95 -0
- package/dist/lib/patterns/aws/hostedZone.d.ts +11 -0
- package/dist/lib/patterns/aws/hostedZone.js +73 -0
- package/dist/lib/patterns/aws/index.d.ts +5 -2
- package/dist/lib/patterns/aws/index.js +6 -3
- package/dist/lib/patterns/aws/managedAccount.d.ts +13 -0
- package/dist/lib/patterns/aws/managedAccount.js +39 -0
- package/dist/lib/patterns/aws/managedOrganisation.d.ts +19 -0
- package/dist/lib/patterns/aws/managedOrganisation.js +45 -0
- package/dist/lib/patterns/aws/managedPlatform.d.ts +13 -0
- package/dist/lib/patterns/aws/managedPlatform.js +22 -0
- package/dist/lib/patterns/aws/spotInstanceApp.d.ts +46 -0
- package/dist/lib/patterns/aws/spotInstanceApp.js +95 -0
- package/dist/lib/patterns/aws/subdomainHostedZone.d.ts +9 -0
- package/dist/lib/patterns/aws/subdomainHostedZone.js +39 -0
- package/dist/lib/resources/aws/awsStack.d.ts +5 -0
- package/dist/lib/resources/aws/awsStack.js +11 -1
- package/dist/lib/resources/aws/compute/ecs.d.ts +74 -0
- package/dist/lib/resources/aws/compute/ecs.js +269 -0
- package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +76 -0
- package/dist/lib/resources/aws/compute/ecsFreeTier.js +352 -0
- package/dist/lib/resources/aws/compute/ecsSpot.d.ts +76 -0
- package/dist/lib/resources/aws/compute/ecsSpot.js +334 -0
- package/dist/lib/resources/aws/compute/index.d.ts +2 -0
- package/dist/lib/resources/aws/compute/index.js +19 -0
- package/dist/lib/resources/aws/compute/lambda.d.ts +13 -6
- package/dist/lib/resources/aws/compute/lambda.js +23 -4
- package/dist/lib/resources/aws/constant/ecr.js +4 -3
- package/dist/lib/resources/aws/constant/vpc.d.ts +10 -2
- package/dist/lib/resources/aws/constant/vpc.js +18 -8
- package/dist/lib/resources/aws/database/database.d.ts +16 -0
- package/dist/lib/resources/aws/database/database.js +30 -0
- package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +17 -0
- package/dist/lib/resources/aws/database/databaseFreeTier.js +31 -0
- package/dist/lib/resources/aws/database/databaseInstance.d.ts +17 -0
- package/dist/lib/resources/aws/database/databaseInstance.js +32 -0
- package/dist/lib/resources/aws/database/index.d.ts +2 -0
- package/dist/lib/resources/aws/database/index.js +19 -0
- package/dist/lib/resources/aws/database/rds.d.ts +23 -0
- package/dist/lib/resources/aws/database/rds.js +130 -0
- package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +36 -0
- package/dist/lib/resources/aws/database/rdsFreeTier.js +80 -0
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +42 -0
- package/dist/lib/resources/aws/database/rdsInstance.js +173 -0
- package/dist/lib/resources/aws/iam/identityCenter/assignment.js +13 -0
- package/dist/lib/resources/aws/iam/identityCenter/group.js +14 -0
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +13 -0
- package/dist/lib/resources/aws/iam/index.d.ts +5 -0
- package/dist/lib/resources/aws/iam/index.js +22 -0
- package/dist/lib/resources/aws/iam/instanceProfile.d.ts +5 -0
- package/dist/lib/resources/aws/iam/instanceProfile.js +13 -0
- package/dist/lib/resources/aws/iam/managedPolicy.d.ts +5 -0
- package/dist/lib/resources/aws/iam/managedPolicy.js +14 -0
- package/dist/lib/resources/aws/iam/policy.d.ts +5 -0
- package/dist/lib/resources/aws/iam/policy.js +13 -0
- package/dist/lib/resources/aws/iam/role.js +2 -7
- package/dist/lib/resources/aws/iam/securityGroup.d.ts +5 -0
- package/dist/lib/resources/aws/iam/securityGroup.js +14 -0
- package/dist/lib/resources/aws/index.d.ts +1 -0
- package/dist/lib/resources/aws/index.js +18 -0
- package/dist/lib/resources/aws/logging/cloudTrail.d.ts +18 -0
- package/dist/lib/resources/aws/logging/cloudTrail.js +46 -0
- package/dist/lib/resources/aws/logging/logGroup.d.ts +8 -4
- package/dist/lib/resources/aws/logging/logGroup.js +6 -7
- package/dist/lib/resources/aws/networking/hostedZone.d.ts +19 -3
- package/dist/lib/resources/aws/networking/hostedZone.js +59 -11
- package/dist/lib/resources/aws/networking/index.d.ts +3 -0
- package/dist/lib/resources/aws/networking/index.js +20 -0
- package/dist/lib/resources/aws/networking/ipam.d.ts +2 -2
- package/dist/lib/resources/aws/networking/ipam.js +3 -3
- package/dist/lib/resources/aws/networking/ipamPool.d.ts +14 -5
- package/dist/lib/resources/aws/networking/ipamPool.js +69 -22
- package/dist/lib/resources/aws/networking/vpc.d.ts +29 -0
- package/dist/lib/resources/aws/networking/vpc.js +64 -0
- package/dist/lib/resources/aws/secrets/alias.d.ts +5 -0
- package/dist/lib/resources/aws/secrets/alias.js +13 -0
- package/dist/lib/resources/aws/secrets/index.d.ts +5 -0
- package/dist/lib/resources/aws/secrets/index.js +22 -0
- package/dist/lib/resources/aws/secrets/kms.d.ts +14 -0
- package/dist/lib/resources/aws/secrets/kms.js +34 -0
- package/dist/lib/resources/aws/secrets/parameter.d.ts +26 -0
- package/dist/lib/resources/aws/secrets/parameter.js +100 -0
- package/dist/lib/resources/aws/secrets/secret.d.ts +24 -0
- package/dist/lib/resources/aws/secrets/secret.js +53 -0
- package/dist/lib/resources/aws/storage/ecr.d.ts +12 -0
- package/dist/lib/resources/aws/storage/ecr.js +31 -0
- package/dist/lib/resources/aws/storage/index.d.ts +2 -0
- package/dist/lib/resources/aws/storage/index.js +19 -0
- package/dist/lib/resources/aws/storage/s3.d.ts +11 -0
- package/dist/lib/resources/aws/storage/s3.js +44 -0
- package/dist/lib/resources/aws/store/alias.d.ts +5 -0
- package/dist/lib/resources/aws/store/alias.js +13 -0
- package/dist/lib/resources/aws/store/database.d.ts +7 -2
- package/dist/lib/resources/aws/store/database.js +9 -5
- package/dist/lib/resources/aws/store/index.d.ts +7 -0
- package/dist/lib/resources/aws/store/index.js +24 -0
- package/dist/lib/resources/aws/store/kms.d.ts +14 -0
- package/dist/lib/resources/aws/store/kms.js +34 -0
- package/dist/lib/resources/aws/store/parameter.d.ts +26 -0
- package/dist/lib/resources/aws/store/parameter.js +100 -0
- package/dist/lib/resources/aws/store/rds.d.ts +15 -15
- package/dist/lib/resources/aws/store/rds.js +110 -68
- package/dist/lib/resources/aws/store/s3.d.ts +11 -0
- package/dist/lib/resources/aws/store/s3.js +43 -0
- package/dist/lib/resources/aws/store/secret.d.ts +26 -0
- package/dist/lib/resources/aws/store/secret.js +55 -0
- package/dist/lib/resources/aws/utilities/awsCustomResource.js +1 -6
- package/dist/lib/resources/aws/utilities/cfnOutput.js +2 -5
- package/dist/lib/resources/aws/utilities/codeBuild.d.ts +15 -0
- package/dist/lib/resources/aws/utilities/codeBuild.js +28 -0
- package/dist/lib/resources/aws/utilities/customResource.d.ts +20 -3
- package/dist/lib/resources/aws/utilities/customResource.js +24 -5
- package/dist/lib/resources/aws/utilities/customResourceProvider.js +1 -5
- package/dist/lib/resources/aws/utilities/resourceShare.d.ts +5 -0
- package/dist/lib/resources/aws/utilities/resourceShare.js +13 -0
- package/dist/lib/resources/index.d.ts +1 -0
- package/dist/lib/resources/index.js +18 -0
- package/dist/lib/types.d.ts +3 -0
- package/dist/lib/types.js +3 -0
- package/dist/lib/utils/capitalizeString.d.ts +1 -0
- package/dist/lib/utils/capitalizeString.js +8 -0
- package/dist/lib/utils/getAccountId.d.ts +1 -0
- package/dist/lib/utils/getAccountId.js +12 -0
- package/dist/lib/utils/getCidr.d.ts +8 -0
- package/dist/lib/utils/getCidr.js +42 -0
- package/dist/lib/utils/getConfig.d.ts +7 -5
- package/dist/lib/utils/getConfig.js +39 -11
- package/dist/lib/utils/getStackOutput.d.ts +1 -0
- package/dist/lib/utils/getStackOutput.js +20 -0
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +18 -0
- package/dist/lib/utils/stripAndCamelCase.d.ts +1 -0
- package/dist/lib/utils/stripAndCamelCase.js +17 -0
- package/dist/lib/utils/tagResource.d.ts +4 -0
- package/dist/lib/utils/tagResource.js +10 -0
- package/dist/lib/utils/usersConfig.d.ts +7 -0
- package/dist/lib/utils/usersConfig.js +18 -0
- package/package.json +23 -18
- package/dist/lib/config/aws/base/costAllocationTags.d.ts +0 -5
- package/dist/lib/config/aws/base/costAllocationTags.js +0 -57
- package/dist/lib/config/aws/base/iamIdentityCenter.d.ts +0 -5
- package/dist/lib/config/aws/base/iamIdentityCenter.js +0 -86
- package/dist/lib/config/aws/base/identityCenter.js +0 -90
- package/dist/lib/config/aws/base/ipam.js +0 -29
- package/dist/lib/config/aws/base/ipamPool.js +0 -46
- package/dist/lib/examples/custom-resources/lambda/aws-cost-allocation-tags/awsCostAllocationTagsLambda.d.ts +0 -2
- package/dist/lib/examples/custom-resources/lambda/aws-cost-allocation-tags/awsCostAllocationTagsLambda.js +0 -62
- package/dist/lib/examples/cutomResourceExample.d.ts +0 -6
- package/dist/lib/examples/cutomResourceExample.js +0 -45
- package/dist/lib/patterns/aws/customResource.d.ts +0 -7
- package/dist/lib/patterns/aws/customResource.js +0 -28
- package/dist/lib/patterns/aws/multiEnvironmentOrganisation.d.ts +0 -33
- package/dist/lib/patterns/aws/multiEnvironmentOrganisation.js +0 -107
- package/dist/lib/patterns/aws/webApp.d.ts +0 -17
- package/dist/lib/patterns/aws/webApp.js +0 -36
- package/dist/lib/resources/aws/compute/__tests__/fargate.test.d.ts +0 -1
- package/dist/lib/resources/aws/compute/__tests__/fargate.test.js +0 -21
- package/dist/lib/resources/aws/compute/fargate.d.ts +0 -23
- package/dist/lib/resources/aws/compute/fargate.js +0 -50
- package/dist/lib/resources/aws/constant/__tests__/vpc.test.d.ts +0 -1
- package/dist/lib/resources/aws/constant/__tests__/vpc.test.js +0 -13
- package/dist/lib/resources/aws/iam/assignment.js +0 -13
- package/dist/lib/resources/aws/iam/group.js +0 -15
- package/dist/lib/resources/aws/iam/iamRole.d.ts +0 -5
- package/dist/lib/resources/aws/iam/iamRole.js +0 -18
- package/dist/lib/resources/aws/iam/permissionSet.js +0 -13
- /package/dist/lib/resources/aws/iam/{assignment.d.ts → identityCenter/assignment.d.ts} +0 -0
- /package/dist/lib/resources/aws/iam/{group.d.ts → identityCenter/group.d.ts} +0 -0
- /package/dist/lib/resources/aws/iam/{permissionSet.d.ts → identityCenter/permissionSet.d.ts} +0 -0
|
@@ -4,12 +4,14 @@ exports.Vpc = void 0;
|
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const ec2 = require("aws-cdk-lib/aws-ec2");
|
|
6
6
|
const logGroup_1 = require("../logging/logGroup");
|
|
7
|
+
const getStackOutput_1 = require("../../../utils/getStackOutput");
|
|
8
|
+
const AVAILABILITY_ZONES = ["us-east-1a", "us-east-1b", "us-east-1c"];
|
|
7
9
|
class Vpc extends ec2.Vpc {
|
|
8
10
|
constructor(scope, id, props) {
|
|
9
11
|
super(scope, `vpc-${id}`, {
|
|
10
12
|
...props,
|
|
11
13
|
vpcName: `vpc-${id}`,
|
|
12
|
-
availabilityZones:
|
|
14
|
+
availabilityZones: AVAILABILITY_ZONES,
|
|
13
15
|
flowLogs: {
|
|
14
16
|
[`${id}VpcFlowLogs`]: {
|
|
15
17
|
destination: ec2.FlowLogDestination.toCloudWatchLogs(new logGroup_1.LogGroup(scope, `${id}FlowLogGroup`, {
|
|
@@ -18,13 +20,21 @@ class Vpc extends ec2.Vpc {
|
|
|
18
20
|
}))
|
|
19
21
|
}
|
|
20
22
|
},
|
|
21
|
-
ipAddresses:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
ipAddresses: Vpc.ipAddresses(props)
|
|
24
|
+
});
|
|
25
|
+
// Required for the VPC to use the IPAM Pool to provsion IP addresses
|
|
26
|
+
aws_cdk_lib_1.Tags.of(this).add("fjall:operations:pool", `${props?.environment}`);
|
|
27
|
+
}
|
|
28
|
+
static ipAddresses(props) {
|
|
29
|
+
const ipv4IpamPoolId = (0, getStackOutput_1.default)("IpamPool", `${props?.environment}IpamPoolId`);
|
|
30
|
+
// Default to unspecified ipAddresses if unable to read from stack output
|
|
31
|
+
if (!ipv4IpamPoolId)
|
|
32
|
+
return undefined;
|
|
33
|
+
return ec2.IpAddresses.awsIpamAllocation({
|
|
34
|
+
ipv4IpamPoolId: ipv4IpamPoolId,
|
|
35
|
+
ipv4NetmaskLength: 20,
|
|
36
|
+
defaultSubnetIpv4NetmaskLength: 23
|
|
26
37
|
});
|
|
27
|
-
aws_cdk_lib_1.Tags.of(this).add("Pool", "Production");
|
|
28
38
|
}
|
|
29
39
|
static build(id, props) {
|
|
30
40
|
return (sb) => {
|
|
@@ -50,4 +60,4 @@ class Vpc extends ec2.Vpc {
|
|
|
50
60
|
}
|
|
51
61
|
}
|
|
52
62
|
exports.Vpc = Vpc;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29uc3RhbnQvdnBjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDZDQUFrRDtBQUNsRCwyQ0FBMkM7QUFHM0Msa0RBQStDO0FBQy9DLGtFQUEyRDtBQVMzRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztBQUV0RSxNQUFhLEdBQUksU0FBUSxHQUFHLENBQUMsR0FBRztJQUM5QixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQ3hELEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtZQUN4QixHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDcEIsaUJBQWlCLEVBQUUsa0JBQWtCO1lBQ3JDLFFBQVEsRUFBRTtnQkFDUixDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsRUFBRTtvQkFDcEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FDbEQsSUFBSSxtQkFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFO3dCQUN2QyxZQUFZLEVBQUUscUJBQXFCLEVBQUUsR0FBRzt3QkFDeEMsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztxQkFDckMsQ0FBQyxDQUNIO2lCQUNGO2FBQ0Y7WUFDRCxXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7U0FDcEMsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLGtCQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWdCO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLElBQUEsd0JBQWMsRUFDbkMsVUFBVSxFQUNWLEdBQUcsS0FBSyxFQUFFLFdBQVcsWUFBWSxDQUNsQyxDQUFDO1FBRUYseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFdEMsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDO1lBQ3ZDLGNBQWMsRUFBRSxjQUFjO1lBQzlCLGlCQUFpQixFQUFFLEVBQUU7WUFDckIsOEJBQThCLEVBQUUsRUFBRTtTQUNuQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBZ0I7UUFDdkMsT0FBTyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtZQUMxQixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQ1gsRUFBVSxFQUNWLFlBQW9CO1FBRXBCLE9BQU8sQ0FBQyxFQUFnQixFQUFFLEVBQUU7WUFDMUIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUMzQyxPQUFPLEVBQUUsR0FBRyxZQUFZLElBQUksRUFBRSxFQUFFO2FBQ2pDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWhFRCxrQkFnRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVGFncywgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5cbmltcG9ydCB7IFN0YWNrQnVpbGRlciB9IGZyb20gXCIuLi9hd3NTdGFja1wiO1xuaW1wb3J0IHsgTG9nR3JvdXAgfSBmcm9tIFwiLi4vbG9nZ2luZy9sb2dHcm91cFwiO1xuaW1wb3J0IGdldFN0YWNrT3V0cHV0IGZyb20gXCIuLi8uLi8uLi91dGlscy9nZXRTdGFja091dHB1dFwiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vY29tcHV0ZS9lY3NcIjtcblxuaW50ZXJmYWNlIFZwY1Byb3BzIGV4dGVuZHMgZWMyLlZwY1Byb3BzIHtcbiAgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG4gIGF2YWlsYWJpbGl0eVpvbmVzPzogc3RyaW5nW107XG4gIHRhZ3M6IEtleVZhbHVlO1xufVxuXG5jb25zdCBBVkFJTEFCSUxJVFlfWk9ORVMgPSBbXCJ1cy1lYXN0LTFhXCIsIFwidXMtZWFzdC0xYlwiLCBcInVzLWVhc3QtMWNcIl07XG5cbmV4cG9ydCBjbGFzcyBWcGMgZXh0ZW5kcyBlYzIuVnBjIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBWcGNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBgdnBjLSR7aWR9YCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB2cGNOYW1lOiBgdnBjLSR7aWR9YCxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBBVkFJTEFCSUxJVFlfWk9ORVMsXG4gICAgICBmbG93TG9nczoge1xuICAgICAgICBbYCR7aWR9VnBjRmxvd0xvZ3NgXToge1xuICAgICAgICAgIGRlc3RpbmF0aW9uOiBlYzIuRmxvd0xvZ0Rlc3RpbmF0aW9uLnRvQ2xvdWRXYXRjaExvZ3MoXG4gICAgICAgICAgICBuZXcgTG9nR3JvdXAoc2NvcGUsIGAke2lkfUZsb3dMb2dHcm91cGAsIHtcbiAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL3ZwYy9mbG93bG9ncy92cGMtJHtpZH0vYCxcbiAgICAgICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlwQWRkcmVzc2VzOiBWcGMuaXBBZGRyZXNzZXMocHJvcHMpXG4gICAgfSk7XG5cbiAgICAvLyBSZXF1aXJlZCBmb3IgdGhlIFZQQyB0byB1c2UgdGhlIElQQU0gUG9vbCB0byBwcm92c2lvbiBJUCBhZGRyZXNzZXNcbiAgICBUYWdzLm9mKHRoaXMpLmFkZChcImZqYWxsOm9wZXJhdGlvbnM6cG9vbFwiLCBgJHtwcm9wcz8uZW52aXJvbm1lbnR9YCk7XG4gIH1cblxuICBzdGF0aWMgaXBBZGRyZXNzZXMocHJvcHM/OiBWcGNQcm9wcykge1xuICAgIGNvbnN0IGlwdjRJcGFtUG9vbElkID0gZ2V0U3RhY2tPdXRwdXQoXG4gICAgICBcIklwYW1Qb29sXCIsXG4gICAgICBgJHtwcm9wcz8uZW52aXJvbm1lbnR9SXBhbVBvb2xJZGBcbiAgICApO1xuXG4gICAgLy8gRGVmYXVsdCB0byB1bnNwZWNpZmllZCBpcEFkZHJlc3NlcyBpZiB1bmFibGUgdG8gcmVhZCBmcm9tIHN0YWNrIG91dHB1dFxuICAgIGlmICghaXB2NElwYW1Qb29sSWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gZWMyLklwQWRkcmVzc2VzLmF3c0lwYW1BbGxvY2F0aW9uKHtcbiAgICAgIGlwdjRJcGFtUG9vbElkOiBpcHY0SXBhbVBvb2xJZCxcbiAgICAgIGlwdjROZXRtYXNrTGVuZ3RoOiAyMCxcbiAgICAgIGRlZmF1bHRTdWJuZXRJcHY0TmV0bWFza0xlbmd0aDogMjNcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wcz86IFZwY1Byb3BzKTogKHNiOiBTdGFja0J1aWxkZXIpID0+IENvbnN0cnVjdCB7XG4gICAgcmV0dXJuIChzYjogU3RhY2tCdWlsZGVyKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoc2IuZ2V0U3RhY2soKSwgaWQsIHByb3BzKTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBJbXBvcnRzIGEgcHJlLWV4aXN0aW5nIFZQQyBSZXNvdXJjZSBpbnRvIHlvdXIgU3RhY2tcbiAgICpcbiAgICogQmVmb3JlIHVzaW5nIGFuIGltcG9ydCBtZXRob2QgZW5zdXJlIHlvdSBoYXZlIHNldCB0aGUgYWNjb3VudCBhbmQgcmVnaW9uIHByb3BzXG4gICAqICB3aGVuIGNyZWF0aW5nIHlvdXIgQXdzU3RhY2suXG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gdnBjU3RhY2tOYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgaW1wb3J0KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgdnBjU3RhY2tOYW1lOiBzdHJpbmdcbiAgKTogKHNiOiBTdGFja0J1aWxkZXIpID0+IENvbnN0cnVjdCB7XG4gICAgcmV0dXJuIChzYjogU3RhY2tCdWlsZGVyKSA9PiB7XG4gICAgICByZXR1cm4gZWMyLlZwYy5mcm9tTG9va3VwKHNiLmdldFN0YWNrKCksIGlkLCB7XG4gICAgICAgIHZwY05hbWU6IGAke3ZwY1N0YWNrTmFtZX0vJHtpZH1gXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Connections, IConnectable, Vpc } from "aws-cdk-lib/aws-ec2";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { StackBuilder } from "../awsStack";
|
|
4
|
+
import { KeyValue } from "../../../types";
|
|
5
|
+
interface DatabaseProps {
|
|
6
|
+
vpc: Vpc;
|
|
7
|
+
tags: KeyValue | undefined;
|
|
8
|
+
}
|
|
9
|
+
export default class Database extends Construct implements IConnectable {
|
|
10
|
+
private readonly resource;
|
|
11
|
+
connections: Connections;
|
|
12
|
+
databaseSecretName: string;
|
|
13
|
+
constructor(scope: Construct, id: string, props: DatabaseProps);
|
|
14
|
+
static build(id: string, props?: Partial<DatabaseProps>): (sb: StackBuilder) => Construct;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const constructs_1 = require("constructs");
|
|
4
|
+
const rds_1 = require("./rds");
|
|
5
|
+
class Database extends constructs_1.Construct {
|
|
6
|
+
constructor(scope, id, props) {
|
|
7
|
+
super(scope, id);
|
|
8
|
+
this.resource = new rds_1.default(scope, `${id}Rds`, {
|
|
9
|
+
vpc: props.vpc,
|
|
10
|
+
databaseName: id.replace("Database", ""),
|
|
11
|
+
tags: props.tags || {}
|
|
12
|
+
});
|
|
13
|
+
this.connections = this.resource.connections;
|
|
14
|
+
}
|
|
15
|
+
//todo: move to generic 'resource' class
|
|
16
|
+
static build(id, props) {
|
|
17
|
+
return (sb) => {
|
|
18
|
+
const newProps = {
|
|
19
|
+
...props,
|
|
20
|
+
...{
|
|
21
|
+
vpc: sb.getNetwork() || props?.vpc,
|
|
22
|
+
tags: props?.tags
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
return new this(sb.getStack(), id, newProps);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.default = Database;
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9kYXRhYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDJDQUF1QztBQUd2QywrQkFBd0I7QUFReEIsTUFBcUIsUUFBUyxTQUFRLHNCQUFTO0lBSzdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksYUFBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ3pDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDeEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRTtTQUN2QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQy9DLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsTUFBTSxDQUFDLEtBQUssQ0FDVixFQUFVLEVBQ1YsS0FBOEI7UUFFOUIsT0FBTyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtZQUMxQixNQUFNLFFBQVEsR0FBa0I7Z0JBQzlCLEdBQUcsS0FBSztnQkFDUixHQUFHO29CQUNELEdBQUcsRUFBRyxFQUFFLENBQUMsVUFBVSxFQUFVLElBQUksS0FBSyxFQUFFLEdBQUc7b0JBQzNDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSTtpQkFDbEI7YUFDRixDQUFDO1lBRUYsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWxDRCwyQkFrQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0aW9ucywgSUNvbm5lY3RhYmxlLCBWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgU3RhY2tCdWlsZGVyIH0gZnJvbSBcIi4uL2F3c1N0YWNrXCI7XG5pbXBvcnQgUmRzIGZyb20gXCIuL3Jkc1wiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuaW50ZXJmYWNlIERhdGFiYXNlUHJvcHMge1xuICB2cGM6IFZwYztcbiAgdGFnczogS2V5VmFsdWUgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogUmRzO1xuICBwdWJsaWMgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuICBwdWJsaWMgZGF0YWJhc2VTZWNyZXROYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFiYXNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBSZHMoc2NvcGUsIGAke2lkfVJkc2AsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGF0YWJhc2VOYW1lOiBpZC5yZXBsYWNlKFwiRGF0YWJhc2VcIiwgXCJcIiksXG4gICAgICB0YWdzOiBwcm9wcy50YWdzIHx8IHt9XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5yZXNvdXJjZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIC8vdG9kbzogbW92ZSB0byBnZW5lcmljICdyZXNvdXJjZScgY2xhc3NcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM/OiBQYXJ0aWFsPERhdGFiYXNlUHJvcHM+XG4gICk6IChzYjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3Qge1xuICAgIHJldHVybiAoc2I6IFN0YWNrQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgbmV3UHJvcHM6IERhdGFiYXNlUHJvcHMgPSB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjOiAoc2IuZ2V0TmV0d29yaygpIGFzIFZwYykgfHwgcHJvcHM/LnZwYyxcbiAgICAgICAgICB0YWdzOiBwcm9wcz8udGFnc1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gbmV3IHRoaXMoc2IuZ2V0U3RhY2soKSwgaWQsIG5ld1Byb3BzKTtcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Connections, IConnectable, SecurityGroup, Vpc } from "aws-cdk-lib/aws-ec2";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { StackBuilder } from "../awsStack";
|
|
4
|
+
import { KeyValue } from "../../../types";
|
|
5
|
+
interface DatabaseProps {
|
|
6
|
+
vpc: Vpc;
|
|
7
|
+
tags: KeyValue | undefined;
|
|
8
|
+
}
|
|
9
|
+
export default class Database extends Construct implements IConnectable {
|
|
10
|
+
private readonly resource;
|
|
11
|
+
connections: Connections;
|
|
12
|
+
databaseSecurityGroup: SecurityGroup;
|
|
13
|
+
databaseSecretName: string;
|
|
14
|
+
constructor(scope: Construct, id: string, props: DatabaseProps);
|
|
15
|
+
static build(id: string, props?: Partial<DatabaseProps>): (sb: StackBuilder) => Construct;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const constructs_1 = require("constructs");
|
|
4
|
+
const rdsFreeTier_1 = require("./rdsFreeTier");
|
|
5
|
+
class Database extends constructs_1.Construct {
|
|
6
|
+
constructor(scope, id, props) {
|
|
7
|
+
super(scope, id);
|
|
8
|
+
this.resource = new rdsFreeTier_1.default(scope, `${id}Rds`, {
|
|
9
|
+
vpc: props.vpc,
|
|
10
|
+
databaseName: id.replace("Database", ""),
|
|
11
|
+
tags: props.tags || {}
|
|
12
|
+
});
|
|
13
|
+
this.connections = this.resource.connections;
|
|
14
|
+
this.databaseSecurityGroup = this.resource.databaseSecurityGroup;
|
|
15
|
+
}
|
|
16
|
+
//todo: move to generic 'resource' class
|
|
17
|
+
static build(id, props) {
|
|
18
|
+
return (sb) => {
|
|
19
|
+
const newProps = {
|
|
20
|
+
...props,
|
|
21
|
+
...{
|
|
22
|
+
vpc: sb.getNetwork() || props?.vpc,
|
|
23
|
+
tags: props?.tags
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
return new this(sb.getStack(), id, newProps);
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.default = Database;
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2VGcmVlVGllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2RhdGFiYXNlRnJlZVRpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSwyQ0FBdUM7QUFHdkMsK0NBQWdDO0FBUWhDLE1BQXFCLFFBQVMsU0FBUSxzQkFBUztJQU03QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHFCQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDekMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUN4QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO1NBQ3ZCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDN0MsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUM7SUFDbkUsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxNQUFNLENBQUMsS0FBSyxDQUNWLEVBQVUsRUFDVixLQUE4QjtRQUU5QixPQUFPLENBQUMsRUFBZ0IsRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFrQjtnQkFDOUIsR0FBRyxLQUFLO2dCQUNSLEdBQUc7b0JBQ0QsR0FBRyxFQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQVUsSUFBSSxLQUFLLEVBQUUsR0FBRztvQkFDM0MsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJO2lCQUNsQjthQUNGLENBQUM7WUFFRixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBcENELDJCQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbm5lY3Rpb25zLFxuICBJQ29ubmVjdGFibGUsXG4gIFNlY3VyaXR5R3JvdXAsXG4gIFZwY1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgU3RhY2tCdWlsZGVyIH0gZnJvbSBcIi4uL2F3c1N0YWNrXCI7XG5pbXBvcnQgUmRzIGZyb20gXCIuL3Jkc0ZyZWVUaWVyXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5pbnRlcmZhY2UgRGF0YWJhc2VQcm9wcyB7XG4gIHZwYzogVnBjO1xuICB0YWdzOiBLZXlWYWx1ZSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBSZHM7XG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG4gIHB1YmxpYyBkYXRhYmFzZVNlY3VyaXR5R3JvdXA6IFNlY3VyaXR5R3JvdXA7XG4gIHB1YmxpYyBkYXRhYmFzZVNlY3JldE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IFJkcyhzY29wZSwgYCR7aWR9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IGlkLnJlcGxhY2UoXCJEYXRhYmFzZVwiLCBcIlwiKSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MgfHwge31cbiAgICB9KTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLnJlc291cmNlLmNvbm5lY3Rpb25zO1xuICAgIHRoaXMuZGF0YWJhc2VTZWN1cml0eUdyb3VwID0gdGhpcy5yZXNvdXJjZS5kYXRhYmFzZVNlY3VyaXR5R3JvdXA7XG4gIH1cblxuICAvL3RvZG86IG1vdmUgdG8gZ2VuZXJpYyAncmVzb3VyY2UnIGNsYXNzXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzPzogUGFydGlhbDxEYXRhYmFzZVByb3BzPlxuICApOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld1Byb3BzOiBEYXRhYmFzZVByb3BzID0ge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwYzogKHNiLmdldE5ldHdvcmsoKSBhcyBWcGMpIHx8IHByb3BzPy52cGMsXG4gICAgICAgICAgdGFnczogcHJvcHM/LnRhZ3NcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyB0aGlzKHNiLmdldFN0YWNrKCksIGlkLCBuZXdQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Connections, IConnectable, SecurityGroup, Vpc } from "aws-cdk-lib/aws-ec2";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { StackBuilder } from "../awsStack";
|
|
4
|
+
import { KeyValue } from "../../../types";
|
|
5
|
+
interface DatabaseProps {
|
|
6
|
+
vpc: Vpc;
|
|
7
|
+
tags: KeyValue | undefined;
|
|
8
|
+
}
|
|
9
|
+
export default class Database extends Construct implements IConnectable {
|
|
10
|
+
private readonly resource;
|
|
11
|
+
connections: Connections;
|
|
12
|
+
databaseSecurityGroup: SecurityGroup;
|
|
13
|
+
databaseSecretName: string;
|
|
14
|
+
constructor(scope: Construct, id: string, props: DatabaseProps);
|
|
15
|
+
static build(id: string, props?: Partial<DatabaseProps>): (sb: StackBuilder) => Construct;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const constructs_1 = require("constructs");
|
|
4
|
+
const rdsInstance_1 = require("./rdsInstance");
|
|
5
|
+
class Database extends constructs_1.Construct {
|
|
6
|
+
constructor(scope, id, props) {
|
|
7
|
+
super(scope, id);
|
|
8
|
+
this.resource = new rdsInstance_1.default(scope, `${id}Rds`, {
|
|
9
|
+
vpc: props.vpc,
|
|
10
|
+
databaseName: id.replace("Database", ""),
|
|
11
|
+
readReplica: true,
|
|
12
|
+
tags: props.tags || {}
|
|
13
|
+
});
|
|
14
|
+
this.connections = this.resource.connections;
|
|
15
|
+
this.databaseSecurityGroup = this.resource.databaseSecurityGroup;
|
|
16
|
+
}
|
|
17
|
+
//todo: move to generic 'resource' class
|
|
18
|
+
static build(id, props) {
|
|
19
|
+
return (sb) => {
|
|
20
|
+
const newProps = {
|
|
21
|
+
...props,
|
|
22
|
+
...{
|
|
23
|
+
vpc: sb.getNetwork() || props?.vpc,
|
|
24
|
+
tags: props?.tags
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
return new this(sb.getStack(), id, newProps);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.default = Database;
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2VJbnN0YW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2RhdGFiYXNlSW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSwyQ0FBdUM7QUFHdkMsK0NBQWdDO0FBUWhDLE1BQXFCLFFBQVMsU0FBUSxzQkFBUztJQU03QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHFCQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDekMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUN4QyxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO1NBQ3ZCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDN0MsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUM7SUFDbkUsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxNQUFNLENBQUMsS0FBSyxDQUNWLEVBQVUsRUFDVixLQUE4QjtRQUU5QixPQUFPLENBQUMsRUFBZ0IsRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFrQjtnQkFDOUIsR0FBRyxLQUFLO2dCQUNSLEdBQUc7b0JBQ0QsR0FBRyxFQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQVUsSUFBSSxLQUFLLEVBQUUsR0FBRztvQkFDM0MsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJO2lCQUNsQjthQUNGLENBQUM7WUFFRixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBckNELDJCQXFDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbm5lY3Rpb25zLFxuICBJQ29ubmVjdGFibGUsXG4gIFNlY3VyaXR5R3JvdXAsXG4gIFZwY1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgU3RhY2tCdWlsZGVyIH0gZnJvbSBcIi4uL2F3c1N0YWNrXCI7XG5pbXBvcnQgUmRzIGZyb20gXCIuL3Jkc0luc3RhbmNlXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5pbnRlcmZhY2UgRGF0YWJhc2VQcm9wcyB7XG4gIHZwYzogVnBjO1xuICB0YWdzOiBLZXlWYWx1ZSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBSZHM7XG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG4gIHB1YmxpYyBkYXRhYmFzZVNlY3VyaXR5R3JvdXA6IFNlY3VyaXR5R3JvdXA7XG4gIHB1YmxpYyBkYXRhYmFzZVNlY3JldE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IFJkcyhzY29wZSwgYCR7aWR9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IGlkLnJlcGxhY2UoXCJEYXRhYmFzZVwiLCBcIlwiKSxcbiAgICAgIHJlYWRSZXBsaWNhOiB0cnVlLFxuICAgICAgdGFnczogcHJvcHMudGFncyB8fCB7fVxuICAgIH0pO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMucmVzb3VyY2UuY29ubmVjdGlvbnM7XG4gICAgdGhpcy5kYXRhYmFzZVNlY3VyaXR5R3JvdXAgPSB0aGlzLnJlc291cmNlLmRhdGFiYXNlU2VjdXJpdHlHcm91cDtcbiAgfVxuXG4gIC8vdG9kbzogbW92ZSB0byBnZW5lcmljICdyZXNvdXJjZScgY2xhc3NcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM/OiBQYXJ0aWFsPERhdGFiYXNlUHJvcHM+XG4gICk6IChzYjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3Qge1xuICAgIHJldHVybiAoc2I6IFN0YWNrQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgbmV3UHJvcHM6IERhdGFiYXNlUHJvcHMgPSB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjOiAoc2IuZ2V0TmV0d29yaygpIGFzIFZwYykgfHwgcHJvcHM/LnZwYyxcbiAgICAgICAgICB0YWdzOiBwcm9wcz8udGFnc1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gbmV3IHRoaXMoc2IuZ2V0U3RhY2soKSwgaWQsIG5ld1Byb3BzKTtcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
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("../database"), exports);
|
|
18
|
+
__exportStar(require("./rds"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQTRCO0FBQzVCLHdDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuLi9kYXRhYmFzZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmRzXCI7XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Duration } from "aws-cdk-lib";
|
|
2
|
+
import { Connections, IConnectable, Vpc } from "aws-cdk-lib/aws-ec2";
|
|
3
|
+
import { BackupProps, ClusterInstance, IClusterEngine } from "aws-cdk-lib/aws-rds";
|
|
4
|
+
import { Construct } from "constructs";
|
|
5
|
+
import { KeyValue } from "../../../types";
|
|
6
|
+
interface RdsProps {
|
|
7
|
+
vpc: Vpc;
|
|
8
|
+
databaseName?: string;
|
|
9
|
+
engine?: IClusterEngine;
|
|
10
|
+
backup?: BackupProps;
|
|
11
|
+
clusterIdentifier?: string;
|
|
12
|
+
monitoringInterval?: Duration;
|
|
13
|
+
preferredMaintenanceWindow?: string;
|
|
14
|
+
port?: number;
|
|
15
|
+
writer?: ClusterInstance;
|
|
16
|
+
readers?: ClusterInstance[];
|
|
17
|
+
tags: KeyValue;
|
|
18
|
+
}
|
|
19
|
+
export default class Rds extends Construct implements IConnectable {
|
|
20
|
+
connections: Connections;
|
|
21
|
+
constructor(scope: Construct, id: string, props: RdsProps);
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
4
|
+
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
5
|
+
const aws_rds_1 = require("aws-cdk-lib/aws-rds");
|
|
6
|
+
const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
|
|
7
|
+
const constructs_1 = require("constructs");
|
|
8
|
+
const iam_1 = require("../iam");
|
|
9
|
+
const secrets_1 = require("../secrets");
|
|
10
|
+
class Rds extends constructs_1.Construct {
|
|
11
|
+
constructor(scope, id, props) {
|
|
12
|
+
super(scope, id);
|
|
13
|
+
// Database Credentials
|
|
14
|
+
const databaseCredentials = new secrets_1.Secret(this, `${props.databaseName}Credentials`, {
|
|
15
|
+
secretName: `${props.databaseName}Credentials`,
|
|
16
|
+
generateSecretString: {
|
|
17
|
+
secretStringTemplate: JSON.stringify({
|
|
18
|
+
username: "postgres"
|
|
19
|
+
}),
|
|
20
|
+
excludePunctuation: true,
|
|
21
|
+
includeSpace: false,
|
|
22
|
+
generateStringKey: "password"
|
|
23
|
+
},
|
|
24
|
+
tags: props.tags
|
|
25
|
+
});
|
|
26
|
+
// Customer Managed Keys
|
|
27
|
+
const encryptionKey = new secrets_1.CustomerManagedKey(this, `${props.databaseName}ClusterEncryptionKey`, {
|
|
28
|
+
aliasName: `cmk/rds/${props.databaseName}/encryptionKey`,
|
|
29
|
+
tags: props.tags
|
|
30
|
+
});
|
|
31
|
+
const primaryReaderInsightsKey = new secrets_1.CustomerManagedKey(this, `${props.databaseName}PrimaryReaderInsightsKey`, {
|
|
32
|
+
aliasName: `cmk/rds/${props.databaseName}/PrimaryReaderInsightsKey`,
|
|
33
|
+
tags: props.tags
|
|
34
|
+
});
|
|
35
|
+
const secondaryReaderInsightsKey = new secrets_1.CustomerManagedKey(this, `${props.databaseName}SecondaryReaderInsightsKey`, {
|
|
36
|
+
aliasName: `cmk/rds/${props.databaseName}/SecondaryReaderInsightsKey`,
|
|
37
|
+
tags: props.tags
|
|
38
|
+
});
|
|
39
|
+
const primaryWriterPerformanceInsightsKey = new secrets_1.CustomerManagedKey(this, `${props.databaseName}PrimaryWriterPerformanceInsightsKey`, {
|
|
40
|
+
aliasName: `cmk/rds/${props.databaseName}/PrimaryWriterInsightsKey`,
|
|
41
|
+
tags: props.tags
|
|
42
|
+
});
|
|
43
|
+
const clusterSecurityGroup = new iam_1.SecurityGroup(this, `${id}SecurityGroup`, {
|
|
44
|
+
vpc: props.vpc,
|
|
45
|
+
description: `Security group that allows inbound access to the postgres cluster for ${props.databaseName}`
|
|
46
|
+
});
|
|
47
|
+
//TODO: Remove this line, that allows the proxy to connect to the database. Replace with seperated security groups
|
|
48
|
+
clusterSecurityGroup.addIngressRule(clusterSecurityGroup, aws_ec2_1.Port.tcp(5432));
|
|
49
|
+
this.connections = clusterSecurityGroup.connections;
|
|
50
|
+
// Database Cluster
|
|
51
|
+
const databaseCluster = new aws_rds_1.DatabaseCluster(scope, `${id}Database`, {
|
|
52
|
+
vpc: props.vpc,
|
|
53
|
+
vpcSubnets: {
|
|
54
|
+
subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS
|
|
55
|
+
},
|
|
56
|
+
securityGroups: [clusterSecurityGroup],
|
|
57
|
+
engine: props.engine ||
|
|
58
|
+
aws_rds_1.DatabaseClusterEngine.auroraPostgres({
|
|
59
|
+
//TODO: Do we update these when we release a new version? Or try to keep them constantly updated?
|
|
60
|
+
version: aws_rds_1.AuroraPostgresEngineVersion.VER_15_6
|
|
61
|
+
}),
|
|
62
|
+
backup: props.backup || {
|
|
63
|
+
retention: aws_cdk_lib_1.Duration.days(14)
|
|
64
|
+
},
|
|
65
|
+
storageEncrypted: true,
|
|
66
|
+
storageEncryptionKey: encryptionKey.key,
|
|
67
|
+
clusterIdentifier: props.clusterIdentifier || `${props.databaseName}-cluster`,
|
|
68
|
+
credentials: aws_rds_1.Credentials.fromSecret(databaseCredentials.secret),
|
|
69
|
+
defaultDatabaseName: props.databaseName || `${id.replace("Rds", "")}`,
|
|
70
|
+
monitoringInterval: props.monitoringInterval || aws_cdk_lib_1.Duration.minutes(1),
|
|
71
|
+
preferredMaintenanceWindow: props.preferredMaintenanceWindow || "Sat:12:30-Sat:20:30",
|
|
72
|
+
port: props.port || 5432,
|
|
73
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.SNAPSHOT,
|
|
74
|
+
writer: props.writer ||
|
|
75
|
+
aws_rds_1.ClusterInstance.serverlessV2(`${props.databaseName}Writer`, {
|
|
76
|
+
enablePerformanceInsights: true,
|
|
77
|
+
performanceInsightEncryptionKey: primaryWriterPerformanceInsightsKey.key,
|
|
78
|
+
instanceIdentifier: `${props.databaseName}-primary-writer`,
|
|
79
|
+
//TODO: Do we update these when we release a new version? Or try to keep them constantly updated?
|
|
80
|
+
caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1
|
|
81
|
+
}),
|
|
82
|
+
readers: props.readers || [
|
|
83
|
+
aws_rds_1.ClusterInstance.serverlessV2(`${props.databaseName}PrimaryReader`, {
|
|
84
|
+
scaleWithWriter: true,
|
|
85
|
+
enablePerformanceInsights: true,
|
|
86
|
+
performanceInsightEncryptionKey: primaryReaderInsightsKey.key,
|
|
87
|
+
instanceIdentifier: `${props.databaseName}-primary-reader`,
|
|
88
|
+
caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1
|
|
89
|
+
}),
|
|
90
|
+
aws_rds_1.ClusterInstance.serverlessV2(`${props.databaseName}SecondaryReader`, {
|
|
91
|
+
scaleWithWriter: false,
|
|
92
|
+
enablePerformanceInsights: true,
|
|
93
|
+
performanceInsightEncryptionKey: secondaryReaderInsightsKey.key,
|
|
94
|
+
instanceIdentifier: `${props.databaseName}-secondary-reader`,
|
|
95
|
+
caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1
|
|
96
|
+
})
|
|
97
|
+
]
|
|
98
|
+
});
|
|
99
|
+
const databaseProxy = new aws_rds_1.DatabaseProxy(this, `${props.databaseName}DatabaseProxy`, {
|
|
100
|
+
proxyTarget: aws_rds_1.ProxyTarget.fromCluster(databaseCluster),
|
|
101
|
+
secrets: [databaseCredentials.secret],
|
|
102
|
+
securityGroups: [clusterSecurityGroup],
|
|
103
|
+
vpc: props.vpc,
|
|
104
|
+
vpcSubnets: {
|
|
105
|
+
subnetType: aws_ec2_1.SubnetType.PUBLIC
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
new aws_cdk_lib_1.CfnOutput(this, `${props.databaseName}ProxyEndpointOutput`, {
|
|
109
|
+
key: `${props.databaseName}ProxyEndpoint`,
|
|
110
|
+
exportName: `${props.databaseName}ProxyEndpoint`,
|
|
111
|
+
value: databaseProxy.endpoint
|
|
112
|
+
});
|
|
113
|
+
// Rotate the Secret every 30 days
|
|
114
|
+
const masterSecret = new secrets_1.Secret(this, `${props.databaseName}MasterSecret`, {
|
|
115
|
+
secretName: `${props.databaseName}MasterSecret`,
|
|
116
|
+
tags: props.tags
|
|
117
|
+
});
|
|
118
|
+
new aws_secretsmanager_1.SecretRotation(this, `${props.databaseName}SecretRotation`, {
|
|
119
|
+
application: new aws_secretsmanager_1.SecretRotationApplication("SecretsManagerRDSPostgreSQLRotationMultiUser", "1.1.367", {
|
|
120
|
+
isMultiUser: true
|
|
121
|
+
}),
|
|
122
|
+
secret: databaseCredentials.secret,
|
|
123
|
+
masterSecret: masterSecret.secret,
|
|
124
|
+
target: databaseCluster,
|
|
125
|
+
vpc: databaseCluster.vpc
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.default = Rds;
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQWlFO0FBQ2pFLGlEQU02QjtBQUM3QixpREFXNkI7QUFDN0IsdUVBR3dDO0FBQ3hDLDJDQUF1QztBQUN2QyxnQ0FBdUM7QUFDdkMsd0NBQXdEO0FBaUJ4RCxNQUFxQixHQUFJLFNBQVEsc0JBQVM7SUFHeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFlO1FBQ3ZELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsdUJBQXVCO1FBQ3ZCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxnQkFBTSxDQUNwQyxJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsWUFBWSxhQUFhLEVBQ2xDO1lBQ0UsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksYUFBYTtZQUM5QyxvQkFBb0IsRUFBRTtnQkFDcEIsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDbkMsUUFBUSxFQUFFLFVBQVU7aUJBQ3JCLENBQUM7Z0JBQ0Ysa0JBQWtCLEVBQUUsSUFBSTtnQkFDeEIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLGlCQUFpQixFQUFFLFVBQVU7YUFDOUI7WUFDRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FDRixDQUFDO1FBRUYsd0JBQXdCO1FBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksNEJBQWtCLENBQzFDLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxZQUFZLHNCQUFzQixFQUMzQztZQUNFLFNBQVMsRUFBRSxXQUFXLEtBQUssQ0FBQyxZQUFZLGdCQUFnQjtZQUN4RCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FDRixDQUFDO1FBRUYsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLDRCQUFrQixDQUNyRCxJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsWUFBWSwwQkFBMEIsRUFDL0M7WUFDRSxTQUFTLEVBQUUsV0FBVyxLQUFLLENBQUMsWUFBWSwyQkFBMkI7WUFDbkUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQ0YsQ0FBQztRQUVGLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSw0QkFBa0IsQ0FDdkQsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFlBQVksNEJBQTRCLEVBQ2pEO1lBQ0UsU0FBUyxFQUFFLFdBQVcsS0FBSyxDQUFDLFlBQVksNkJBQTZCO1lBQ3JFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUNGLENBQUM7UUFFRixNQUFNLG1DQUFtQyxHQUFHLElBQUksNEJBQWtCLENBQ2hFLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxZQUFZLHFDQUFxQyxFQUMxRDtZQUNFLFNBQVMsRUFBRSxXQUFXLEtBQUssQ0FBQyxZQUFZLDJCQUEyQjtZQUNuRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FDRixDQUFDO1FBRUYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLG1CQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUU7WUFDekUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsV0FBVyxFQUFFLHlFQUF5RSxLQUFLLENBQUMsWUFBWSxFQUFFO1NBQzNHLENBQUMsQ0FBQztRQUVILGtIQUFrSDtRQUNsSCxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsY0FBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTFFLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxDQUFDO1FBRXBELG1CQUFtQjtRQUNuQixNQUFNLGVBQWUsR0FBRyxJQUFJLHlCQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7WUFDbEUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsVUFBVSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxvQkFBVSxDQUFDLG1CQUFtQjthQUMzQztZQUNELGNBQWMsRUFBRSxDQUFDLG9CQUFvQixDQUFDO1lBQ3RDLE1BQU0sRUFDSixLQUFLLENBQUMsTUFBTTtnQkFDWiwrQkFBcUIsQ0FBQyxjQUFjLENBQUM7b0JBQ25DLGlHQUFpRztvQkFDakcsT0FBTyxFQUFFLHFDQUEyQixDQUFDLFFBQVE7aUJBQzlDLENBQUM7WUFDSixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSTtnQkFDdEIsU0FBUyxFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzthQUM3QjtZQUNELGdCQUFnQixFQUFFLElBQUk7WUFDdEIsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLEdBQUc7WUFDdkMsaUJBQWlCLEVBQ2YsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksVUFBVTtZQUM1RCxXQUFXLEVBQUUscUJBQVcsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1lBQy9ELG1CQUFtQixFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNyRSxrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLElBQUksc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ25FLDBCQUEwQixFQUN4QixLQUFLLENBQUMsMEJBQTBCLElBQUkscUJBQXFCO1lBQzNELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUk7WUFDeEIsYUFBYSxFQUFFLDJCQUFhLENBQUMsUUFBUTtZQUNyQyxNQUFNLEVBQ0osS0FBSyxDQUFDLE1BQU07Z0JBQ1oseUJBQWUsQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxRQUFRLEVBQUU7b0JBQzFELHlCQUF5QixFQUFFLElBQUk7b0JBQy9CLCtCQUErQixFQUM3QixtQ0FBbUMsQ0FBQyxHQUFHO29CQUN6QyxrQkFBa0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLGlCQUFpQjtvQkFDMUQsaUdBQWlHO29CQUNqRyxhQUFhLEVBQUUsdUJBQWEsQ0FBQyxpQkFBaUI7aUJBQy9DLENBQUM7WUFDSixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSTtnQkFDeEIseUJBQWUsQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxlQUFlLEVBQUU7b0JBQ2pFLGVBQWUsRUFBRSxJQUFJO29CQUNyQix5QkFBeUIsRUFBRSxJQUFJO29CQUMvQiwrQkFBK0IsRUFBRSx3QkFBd0IsQ0FBQyxHQUFHO29CQUM3RCxrQkFBa0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLGlCQUFpQjtvQkFDMUQsYUFBYSxFQUFFLHVCQUFhLENBQUMsaUJBQWlCO2lCQUMvQyxDQUFDO2dCQUNGLHlCQUFlLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLFlBQVksaUJBQWlCLEVBQUU7b0JBQ25FLGVBQWUsRUFBRSxLQUFLO29CQUN0Qix5QkFBeUIsRUFBRSxJQUFJO29CQUMvQiwrQkFBK0IsRUFBRSwwQkFBMEIsQ0FBQyxHQUFHO29CQUMvRCxrQkFBa0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLG1CQUFtQjtvQkFDNUQsYUFBYSxFQUFFLHVCQUFhLENBQUMsaUJBQWlCO2lCQUMvQyxDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBRyxJQUFJLHVCQUFhLENBQ3JDLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxZQUFZLGVBQWUsRUFDcEM7WUFDRSxXQUFXLEVBQUUscUJBQVcsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO1lBQ3JELE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztZQUNyQyxjQUFjLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztZQUN0QyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLG9CQUFVLENBQUMsTUFBTTthQUM5QjtTQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsWUFBWSxxQkFBcUIsRUFBRTtZQUM5RCxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsWUFBWSxlQUFlO1lBQ3pDLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLGVBQWU7WUFDaEQsS0FBSyxFQUFFLGFBQWEsQ0FBQyxRQUFRO1NBQzlCLENBQUMsQ0FBQztRQUVILGtDQUFrQztRQUNsQyxNQUFNLFlBQVksR0FBRyxJQUFJLGdCQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksY0FBYyxFQUFFO1lBQ3pFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLGNBQWM7WUFDL0MsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksbUNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsWUFBWSxnQkFBZ0IsRUFBRTtZQUM5RCxXQUFXLEVBQUUsSUFBSSw4Q0FBeUIsQ0FDeEMsOENBQThDLEVBQzlDLFNBQVMsRUFDVDtnQkFDRSxXQUFXLEVBQUUsSUFBSTthQUNsQixDQUNGO1lBQ0QsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE1BQU07WUFDbEMsWUFBWSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQ2pDLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLEdBQUcsRUFBRSxlQUFlLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF0S0Qsc0JBc0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuT3V0cHV0LCBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbnMsXG4gIElDb25uZWN0YWJsZSxcbiAgUG9ydCxcbiAgU3VibmV0VHlwZSxcbiAgVnBjXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24sXG4gIEJhY2t1cFByb3BzLFxuICBDYUNlcnRpZmljYXRlLFxuICBDbHVzdGVySW5zdGFuY2UsXG4gIENyZWRlbnRpYWxzLFxuICBEYXRhYmFzZUNsdXN0ZXIsXG4gIERhdGFiYXNlQ2x1c3RlckVuZ2luZSxcbiAgRGF0YWJhc2VQcm94eSxcbiAgSUNsdXN0ZXJFbmdpbmUsXG4gIFByb3h5VGFyZ2V0XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCI7XG5pbXBvcnQge1xuICBTZWNyZXRSb3RhdGlvbixcbiAgU2VjcmV0Um90YXRpb25BcHBsaWNhdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuLi9pYW1cIjtcbmltcG9ydCB7IEN1c3RvbWVyTWFuYWdlZEtleSwgU2VjcmV0IH0gZnJvbSBcIi4uL3NlY3JldHNcIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmludGVyZmFjZSBSZHNQcm9wcyB7XG4gIHZwYzogVnBjO1xuICBkYXRhYmFzZU5hbWU/OiBzdHJpbmc7XG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xuICBiYWNrdXA/OiBCYWNrdXBQcm9wcztcbiAgY2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmc7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgd3JpdGVyPzogQ2x1c3Rlckluc3RhbmNlO1xuICByZWFkZXJzPzogQ2x1c3Rlckluc3RhbmNlW107XG4gIHRhZ3M6IEtleVZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZHMgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwdWJsaWMgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSZHNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBEYXRhYmFzZSBDcmVkZW50aWFsc1xuICAgIGNvbnN0IGRhdGFiYXNlQ3JlZGVudGlhbHMgPSBuZXcgU2VjcmV0KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1DcmVkZW50aWFsc2AsXG4gICAgICB7XG4gICAgICAgIHNlY3JldE5hbWU6IGAke3Byb3BzLmRhdGFiYXNlTmFtZX1DcmVkZW50aWFsc2AsXG4gICAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiBcInBvc3RncmVzXCJcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgICAgaW5jbHVkZVNwYWNlOiBmYWxzZSxcbiAgICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogXCJwYXNzd29yZFwiXG4gICAgICAgIH0sXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQ3VzdG9tZXIgTWFuYWdlZCBLZXlzXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IG5ldyBDdXN0b21lck1hbmFnZWRLZXkoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfUNsdXN0ZXJFbmNyeXB0aW9uS2V5YCxcbiAgICAgIHtcbiAgICAgICAgYWxpYXNOYW1lOiBgY21rL3Jkcy8ke3Byb3BzLmRhdGFiYXNlTmFtZX0vZW5jcnlwdGlvbktleWAsXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcHJpbWFyeVJlYWRlckluc2lnaHRzS2V5ID0gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UHJpbWFyeVJlYWRlckluc2lnaHRzS2V5YCxcbiAgICAgIHtcbiAgICAgICAgYWxpYXNOYW1lOiBgY21rL3Jkcy8ke3Byb3BzLmRhdGFiYXNlTmFtZX0vUHJpbWFyeVJlYWRlckluc2lnaHRzS2V5YCxcbiAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBzZWNvbmRhcnlSZWFkZXJJbnNpZ2h0c0tleSA9IG5ldyBDdXN0b21lck1hbmFnZWRLZXkoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVNlY29uZGFyeVJlYWRlckluc2lnaHRzS2V5YCxcbiAgICAgIHtcbiAgICAgICAgYWxpYXNOYW1lOiBgY21rL3Jkcy8ke3Byb3BzLmRhdGFiYXNlTmFtZX0vU2Vjb25kYXJ5UmVhZGVySW5zaWdodHNLZXlgLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHByaW1hcnlXcml0ZXJQZXJmb3JtYW5jZUluc2lnaHRzS2V5ID0gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UHJpbWFyeVdyaXRlclBlcmZvcm1hbmNlSW5zaWdodHNLZXlgLFxuICAgICAge1xuICAgICAgICBhbGlhc05hbWU6IGBjbWsvcmRzLyR7cHJvcHMuZGF0YWJhc2VOYW1lfS9QcmltYXJ5V3JpdGVySW5zaWdodHNLZXlgLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGNsdXN0ZXJTZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgYCR7aWR9U2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCB0aGF0IGFsbG93cyBpbmJvdW5kIGFjY2VzcyB0byB0aGUgcG9zdGdyZXMgY2x1c3RlciBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgLy9UT0RPOiBSZW1vdmUgdGhpcyBsaW5lLCB0aGF0IGFsbG93cyB0aGUgcHJveHkgdG8gY29ubmVjdCB0byB0aGUgZGF0YWJhc2UuIFJlcGxhY2Ugd2l0aCBzZXBlcmF0ZWQgc2VjdXJpdHkgZ3JvdXBzXG4gICAgY2x1c3RlclNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoY2x1c3RlclNlY3VyaXR5R3JvdXAsIFBvcnQudGNwKDU0MzIpKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSBjbHVzdGVyU2VjdXJpdHlHcm91cC5jb25uZWN0aW9ucztcblxuICAgIC8vIERhdGFiYXNlIENsdXN0ZXJcbiAgICBjb25zdCBkYXRhYmFzZUNsdXN0ZXIgPSBuZXcgRGF0YWJhc2VDbHVzdGVyKHNjb3BlLCBgJHtpZH1EYXRhYmFzZWAsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NcbiAgICAgIH0sXG4gICAgICBzZWN1cml0eUdyb3VwczogW2NsdXN0ZXJTZWN1cml0eUdyb3VwXSxcbiAgICAgIGVuZ2luZTpcbiAgICAgICAgcHJvcHMuZW5naW5lIHx8XG4gICAgICAgIERhdGFiYXNlQ2x1c3RlckVuZ2luZS5hdXJvcmFQb3N0Z3Jlcyh7XG4gICAgICAgICAgLy9UT0RPOiBEbyB3ZSB1cGRhdGUgdGhlc2Ugd2hlbiB3ZSByZWxlYXNlIGEgbmV3IHZlcnNpb24/IE9yIHRyeSB0byBrZWVwIHRoZW0gY29uc3RhbnRseSB1cGRhdGVkP1xuICAgICAgICAgIHZlcnNpb246IEF1cm9yYVBvc3RncmVzRW5naW5lVmVyc2lvbi5WRVJfMTVfNlxuICAgICAgICB9KSxcbiAgICAgIGJhY2t1cDogcHJvcHMuYmFja3VwIHx8IHtcbiAgICAgICAgcmV0ZW50aW9uOiBEdXJhdGlvbi5kYXlzKDE0KVxuICAgICAgfSxcbiAgICAgIHN0b3JhZ2VFbmNyeXB0ZWQ6IHRydWUsXG4gICAgICBzdG9yYWdlRW5jcnlwdGlvbktleTogZW5jcnlwdGlvbktleS5rZXksXG4gICAgICBjbHVzdGVySWRlbnRpZmllcjpcbiAgICAgICAgcHJvcHMuY2x1c3RlcklkZW50aWZpZXIgfHwgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfS1jbHVzdGVyYCxcbiAgICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscy5mcm9tU2VjcmV0KGRhdGFiYXNlQ3JlZGVudGlhbHMuc2VjcmV0KSxcbiAgICAgIGRlZmF1bHREYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSB8fCBgJHtpZC5yZXBsYWNlKFwiUmRzXCIsIFwiXCIpfWAsXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCB8fCBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6XG4gICAgICAgIHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93IHx8IFwiU2F0OjEyOjMwLVNhdDoyMDozMFwiLFxuICAgICAgcG9ydDogcHJvcHMucG9ydCB8fCA1NDMyLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5TTkFQU0hPVCxcbiAgICAgIHdyaXRlcjpcbiAgICAgICAgcHJvcHMud3JpdGVyIHx8XG4gICAgICAgIENsdXN0ZXJJbnN0YW5jZS5zZXJ2ZXJsZXNzVjIoYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVdyaXRlcmAsIHtcbiAgICAgICAgICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzOiB0cnVlLFxuICAgICAgICAgIHBlcmZvcm1hbmNlSW5zaWdodEVuY3J5cHRpb25LZXk6XG4gICAgICAgICAgICBwcmltYXJ5V3JpdGVyUGVyZm9ybWFuY2VJbnNpZ2h0c0tleS5rZXksXG4gICAgICAgICAgaW5zdGFuY2VJZGVudGlmaWVyOiBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9LXByaW1hcnktd3JpdGVyYCxcbiAgICAgICAgICAvL1RPRE86IERvIHdlIHVwZGF0ZSB0aGVzZSB3aGVuIHdlIHJlbGVhc2UgYSBuZXcgdmVyc2lvbj8gT3IgdHJ5IHRvIGtlZXAgdGhlbSBjb25zdGFudGx5IHVwZGF0ZWQ/XG4gICAgICAgICAgY2FDZXJ0aWZpY2F0ZTogQ2FDZXJ0aWZpY2F0ZS5SRFNfQ0FfUlNBNDA5Nl9HMVxuICAgICAgICB9KSxcbiAgICAgIHJlYWRlcnM6IHByb3BzLnJlYWRlcnMgfHwgW1xuICAgICAgICBDbHVzdGVySW5zdGFuY2Uuc2VydmVybGVzc1YyKGAke3Byb3BzLmRhdGFiYXNlTmFtZX1QcmltYXJ5UmVhZGVyYCwge1xuICAgICAgICAgIHNjYWxlV2l0aFdyaXRlcjogdHJ1ZSxcbiAgICAgICAgICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzOiB0cnVlLFxuICAgICAgICAgIHBlcmZvcm1hbmNlSW5zaWdodEVuY3J5cHRpb25LZXk6IHByaW1hcnlSZWFkZXJJbnNpZ2h0c0tleS5rZXksXG4gICAgICAgICAgaW5zdGFuY2VJZGVudGlmaWVyOiBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9LXByaW1hcnktcmVhZGVyYCxcbiAgICAgICAgICBjYUNlcnRpZmljYXRlOiBDYUNlcnRpZmljYXRlLlJEU19DQV9SU0E0MDk2X0cxXG4gICAgICAgIH0pLFxuICAgICAgICBDbHVzdGVySW5zdGFuY2Uuc2VydmVybGVzc1YyKGAke3Byb3BzLmRhdGFiYXNlTmFtZX1TZWNvbmRhcnlSZWFkZXJgLCB7XG4gICAgICAgICAgc2NhbGVXaXRoV3JpdGVyOiBmYWxzZSxcbiAgICAgICAgICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzOiB0cnVlLFxuICAgICAgICAgIHBlcmZvcm1hbmNlSW5zaWdodEVuY3J5cHRpb25LZXk6IHNlY29uZGFyeVJlYWRlckluc2lnaHRzS2V5LmtleSxcbiAgICAgICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IGAke3Byb3BzLmRhdGFiYXNlTmFtZX0tc2Vjb25kYXJ5LXJlYWRlcmAsXG4gICAgICAgICAgY2FDZXJ0aWZpY2F0ZTogQ2FDZXJ0aWZpY2F0ZS5SRFNfQ0FfUlNBNDA5Nl9HMVxuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YWJhc2VQcm94eSA9IG5ldyBEYXRhYmFzZVByb3h5KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1EYXRhYmFzZVByb3h5YCxcbiAgICAgIHtcbiAgICAgICAgcHJveHlUYXJnZXQ6IFByb3h5VGFyZ2V0LmZyb21DbHVzdGVyKGRhdGFiYXNlQ2x1c3RlciksXG4gICAgICAgIHNlY3JldHM6IFtkYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldF0sXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbY2x1c3RlclNlY3VyaXR5R3JvdXBdLFxuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UHJveHlFbmRwb2ludE91dHB1dGAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVByb3h5RW5kcG9pbnRgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVByb3h5RW5kcG9pbnRgLFxuICAgICAgdmFsdWU6IGRhdGFiYXNlUHJveHkuZW5kcG9pbnRcbiAgICB9KTtcblxuICAgIC8vIFJvdGF0ZSB0aGUgU2VjcmV0IGV2ZXJ5IDMwIGRheXNcbiAgICBjb25zdCBtYXN0ZXJTZWNyZXQgPSBuZXcgU2VjcmV0KHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1NYXN0ZXJTZWNyZXRgLCB7XG4gICAgICBzZWNyZXROYW1lOiBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9TWFzdGVyU2VjcmV0YCxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICB9KTtcblxuICAgIG5ldyBTZWNyZXRSb3RhdGlvbih0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9U2VjcmV0Um90YXRpb25gLCB7XG4gICAgICBhcHBsaWNhdGlvbjogbmV3IFNlY3JldFJvdGF0aW9uQXBwbGljYXRpb24oXG4gICAgICAgIFwiU2VjcmV0c01hbmFnZXJSRFNQb3N0Z3JlU1FMUm90YXRpb25NdWx0aVVzZXJcIixcbiAgICAgICAgXCIxLjEuMzY3XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpc011bHRpVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgc2VjcmV0OiBkYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldCxcbiAgICAgIG1hc3RlclNlY3JldDogbWFzdGVyU2VjcmV0LnNlY3JldCxcbiAgICAgIHRhcmdldDogZGF0YWJhc2VDbHVzdGVyLFxuICAgICAgdnBjOiBkYXRhYmFzZUNsdXN0ZXIudnBjXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Duration, StackProps } from "aws-cdk-lib";
|
|
2
|
+
import { Connections, IConnectable, InstanceType } from "aws-cdk-lib/aws-ec2";
|
|
3
|
+
import { IInstanceEngine } from "aws-cdk-lib/aws-rds";
|
|
4
|
+
import { Construct } from "constructs";
|
|
5
|
+
import { SecurityGroup } from "../iam";
|
|
6
|
+
import { KeyValue } from "../../../types";
|
|
7
|
+
import { Vpc } from "../networking/vpc";
|
|
8
|
+
interface RdsProps extends StackProps {
|
|
9
|
+
vpc?: Vpc;
|
|
10
|
+
databaseName?: string;
|
|
11
|
+
engine?: IInstanceEngine;
|
|
12
|
+
instanceType?: InstanceType;
|
|
13
|
+
maxAllocatedStorage?: number;
|
|
14
|
+
allocatedStorage?: number;
|
|
15
|
+
backupRetention?: Duration;
|
|
16
|
+
clusterIdentifier?: string;
|
|
17
|
+
monitoringInterval?: Duration;
|
|
18
|
+
preferredMaintenanceWindow?: string;
|
|
19
|
+
port?: number;
|
|
20
|
+
enablePerformanceInsights?: boolean;
|
|
21
|
+
databaseProxy?: boolean;
|
|
22
|
+
readReplica?: boolean;
|
|
23
|
+
tags: KeyValue;
|
|
24
|
+
}
|
|
25
|
+
export default class Rds extends Construct implements IConnectable {
|
|
26
|
+
connections: Connections;
|
|
27
|
+
databaseSecurityGroup: SecurityGroup;
|
|
28
|
+
private databaseCredentials;
|
|
29
|
+
private encryptionKey;
|
|
30
|
+
private database;
|
|
31
|
+
private vpc;
|
|
32
|
+
constructor(scope: Construct, id: string, props: RdsProps);
|
|
33
|
+
addVpc(props: RdsProps): void;
|
|
34
|
+
addDatabase(props: RdsProps): void;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
4
|
+
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
5
|
+
const aws_rds_1 = require("aws-cdk-lib/aws-rds");
|
|
6
|
+
const constructs_1 = require("constructs");
|
|
7
|
+
const iam_1 = require("../iam");
|
|
8
|
+
const secrets_1 = require("../secrets");
|
|
9
|
+
const tagResource_1 = require("../../../utils/tagResource");
|
|
10
|
+
const vpc_1 = require("../networking/vpc");
|
|
11
|
+
class Rds extends constructs_1.Construct {
|
|
12
|
+
constructor(scope, id, props) {
|
|
13
|
+
super(scope, id);
|
|
14
|
+
this.addVpc(props);
|
|
15
|
+
this.addDatabase(props);
|
|
16
|
+
}
|
|
17
|
+
addVpc(props) {
|
|
18
|
+
this.vpc = props.vpc
|
|
19
|
+
? props.vpc
|
|
20
|
+
: new vpc_1.Vpc(this, `${props.databaseName}Vpc`, {
|
|
21
|
+
tags: props.tags,
|
|
22
|
+
environment: aws_cdk_lib_1.Fn.importValue("Environment")
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
addDatabase(props) {
|
|
26
|
+
// Database Credentials
|
|
27
|
+
this.databaseCredentials = new secrets_1.Secret(this, `${props.databaseName}Credentials`, {
|
|
28
|
+
secretName: `${props.databaseName}Credentials`,
|
|
29
|
+
generateSecretString: {
|
|
30
|
+
secretStringTemplate: JSON.stringify({
|
|
31
|
+
username: "postgres"
|
|
32
|
+
}),
|
|
33
|
+
excludePunctuation: true,
|
|
34
|
+
includeSpace: false,
|
|
35
|
+
generateStringKey: "password"
|
|
36
|
+
},
|
|
37
|
+
tags: props.tags
|
|
38
|
+
});
|
|
39
|
+
// Customer Managed Keys
|
|
40
|
+
this.encryptionKey = new secrets_1.CustomerManagedKey(this, `${props.databaseName}ClusterEncryptionKey`, {
|
|
41
|
+
aliasName: `cmk/rds/${props.databaseName}/encryptionKey`,
|
|
42
|
+
tags: props.tags
|
|
43
|
+
});
|
|
44
|
+
this.databaseSecurityGroup = new iam_1.SecurityGroup(this, `${props.databaseName}SecurityGroup`, {
|
|
45
|
+
vpc: this.vpc,
|
|
46
|
+
description: `Security group that allows inbound access to the postgres cluster for ${props.databaseName}`
|
|
47
|
+
});
|
|
48
|
+
// Database Cluster
|
|
49
|
+
this.database = new aws_rds_1.DatabaseInstance(this, `${props.databaseName}Database`, {
|
|
50
|
+
vpc: this.vpc,
|
|
51
|
+
vpcSubnets: {
|
|
52
|
+
subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS
|
|
53
|
+
},
|
|
54
|
+
securityGroups: [this.databaseSecurityGroup],
|
|
55
|
+
engine: props.engine ||
|
|
56
|
+
aws_rds_1.DatabaseInstanceEngine.postgres({
|
|
57
|
+
version: aws_rds_1.PostgresEngineVersion.VER_16_3
|
|
58
|
+
}),
|
|
59
|
+
allocatedStorage: props.allocatedStorage,
|
|
60
|
+
backupRetention: props.backupRetention || aws_cdk_lib_1.Duration.days(14),
|
|
61
|
+
storageEncrypted: true,
|
|
62
|
+
storageEncryptionKey: this.encryptionKey.key,
|
|
63
|
+
storageType: aws_rds_1.StorageType.GP3,
|
|
64
|
+
caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1,
|
|
65
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.SNAPSHOT,
|
|
66
|
+
deleteAutomatedBackups: false,
|
|
67
|
+
databaseName: props.databaseName || `${this.node.id.replace("Rds", "")}`,
|
|
68
|
+
instanceIdentifier: props.databaseName,
|
|
69
|
+
instanceType: props.instanceType ||
|
|
70
|
+
aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.BURSTABLE3, aws_ec2_1.InstanceSize.MICRO),
|
|
71
|
+
multiAz: false,
|
|
72
|
+
port: props.port,
|
|
73
|
+
preferredMaintenanceWindow: props.preferredMaintenanceWindow || "Sat:12:30-Sat:20:30",
|
|
74
|
+
credentials: aws_rds_1.Credentials.fromSecret(this.databaseCredentials.secret)
|
|
75
|
+
});
|
|
76
|
+
(0, tagResource_1.default)(this.database, props.tags);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.default = Rds;
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzRnJlZVRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9yZHNGcmVlVGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUFzRTtBQUN0RSxpREFRNkI7QUFDN0IsaURBUTZCO0FBQzdCLDJDQUF1QztBQUN2QyxnQ0FBdUM7QUFDdkMsd0NBQXdEO0FBRXhELDREQUFxRDtBQUNyRCwyQ0FBd0M7QUFxQnhDLE1BQXFCLEdBQUksU0FBUSxzQkFBUztJQVV4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWU7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFlO1FBQ3BCLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUc7WUFDbEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQ1gsQ0FBQyxDQUFDLElBQUksU0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLEtBQUssRUFBRTtnQkFDeEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNoQixXQUFXLEVBQUUsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO2FBQzNDLENBQUMsQ0FBQztJQUNULENBQUM7SUFDRCxXQUFXLENBQUMsS0FBZTtRQUN6Qix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksZ0JBQU0sQ0FDbkMsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFlBQVksYUFBYSxFQUNsQztZQUNFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLGFBQWE7WUFDOUMsb0JBQW9CLEVBQUU7Z0JBQ3BCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25DLFFBQVEsRUFBRSxVQUFVO2lCQUNyQixDQUFDO2dCQUNGLGtCQUFrQixFQUFFLElBQUk7Z0JBQ3hCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixpQkFBaUIsRUFBRSxVQUFVO2FBQzlCO1lBQ0QsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQ0YsQ0FBQztRQUVGLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksNEJBQWtCLENBQ3pDLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxZQUFZLHNCQUFzQixFQUMzQztZQUNFLFNBQVMsRUFBRSxXQUFXLEtBQUssQ0FBQyxZQUFZLGdCQUFnQjtZQUN4RCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksbUJBQWEsQ0FDNUMsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFlBQVksZUFBZSxFQUNwQztZQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFdBQVcsRUFBRSx5RUFBeUUsS0FBSyxDQUFDLFlBQVksRUFBRTtTQUMzRyxDQUNGLENBQUM7UUFFRixtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDBCQUFnQixDQUNsQyxJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsWUFBWSxVQUFVLEVBQy9CO1lBQ0UsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsVUFBVSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxvQkFBVSxDQUFDLG1CQUFtQjthQUMzQztZQUNELGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUM1QyxNQUFNLEVBQ0osS0FBSyxDQUFDLE1BQU07Z0JBQ1osZ0NBQXNCLENBQUMsUUFBUSxDQUFDO29CQUM5QixPQUFPLEVBQUUsK0JBQXFCLENBQUMsUUFBUTtpQkFDeEMsQ0FBQztZQUNKLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLElBQUksc0JBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNELGdCQUFnQixFQUFFLElBQUk7WUFDdEIsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHO1lBQzVDLFdBQVcsRUFBRSxxQkFBVyxDQUFDLEdBQUc7WUFDNUIsYUFBYSxFQUFFLHVCQUFhLENBQUMsaUJBQWlCO1lBQzlDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLFFBQVE7WUFDckMsc0JBQXNCLEVBQUUsS0FBSztZQUM3QixZQUFZLEVBQ1YsS0FBSyxDQUFDLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDNUQsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDdEMsWUFBWSxFQUNWLEtBQUssQ0FBQyxZQUFZO2dCQUNsQixzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLFVBQVUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQztZQUMvRCxPQUFPLEVBQUUsS0FBSztZQUNkLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQiwwQkFBMEIsRUFDeEIsS0FBSyxDQUFDLDBCQUEwQixJQUFJLHFCQUFxQjtZQUMzRCxXQUFXLEVBQUUscUJBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztTQUNyRSxDQUNGLENBQUM7UUFDRixJQUFBLHFCQUFXLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBcEdELHNCQW9HQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBGbiwgUmVtb3ZhbFBvbGljeSwgU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbnMsXG4gIElDb25uZWN0YWJsZSxcbiAgSW5zdGFuY2VDbGFzcyxcbiAgSW5zdGFuY2VTaXplLFxuICBJbnN0YW5jZVR5cGUsXG4gIElWcGMsXG4gIFN1Ym5ldFR5cGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7XG4gIENhQ2VydGlmaWNhdGUsXG4gIENyZWRlbnRpYWxzLFxuICBEYXRhYmFzZUluc3RhbmNlLFxuICBEYXRhYmFzZUluc3RhbmNlRW5naW5lLFxuICBJSW5zdGFuY2VFbmdpbmUsXG4gIFBvc3RncmVzRW5naW5lVmVyc2lvbixcbiAgU3RvcmFnZVR5cGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBTZWN1cml0eUdyb3VwIH0gZnJvbSBcIi4uL2lhbVwiO1xuaW1wb3J0IHsgQ3VzdG9tZXJNYW5hZ2VkS2V5LCBTZWNyZXQgfSBmcm9tIFwiLi4vc2VjcmV0c1wiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB0YWdSZXNvdXJjZSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdGFnUmVzb3VyY2VcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi9uZXR3b3JraW5nL3ZwY1wiO1xuXG5pbnRlcmZhY2UgUmRzUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgdnBjPzogVnBjO1xuICBkYXRhYmFzZU5hbWU/OiBzdHJpbmc7XG4gIGVuZ2luZT86IElJbnN0YW5jZUVuZ2luZTtcbiAgaW5zdGFuY2VUeXBlPzogSW5zdGFuY2VUeXBlO1xuICBtYXhBbGxvY2F0ZWRTdG9yYWdlPzogbnVtYmVyO1xuICBhbGxvY2F0ZWRTdG9yYWdlPzogbnVtYmVyO1xuICBiYWNrdXBSZXRlbnRpb24/OiBEdXJhdGlvbjtcbiAgY2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmc7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cz86IGJvb2xlYW47XG4gIGRhdGFiYXNlUHJveHk/OiBib29sZWFuO1xuICAvLyBUT0RPOiBUaGUgYmVsb3cgY291bGQgYmUgYSBudW1iZXIsIHRoZW4gaXQgc2NhbGVzIGJhc2VkIG9uIHRoZSBhbW91bnRcbiAgcmVhZFJlcGxpY2E/OiBib29sZWFuO1xuICB0YWdzOiBLZXlWYWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmRzIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcbiAgcHVibGljIGRhdGFiYXNlU2VjdXJpdHlHcm91cDogU2VjdXJpdHlHcm91cDtcblxuICBwcml2YXRlIGRhdGFiYXNlQ3JlZGVudGlhbHM6IFNlY3JldDtcbiAgcHJpdmF0ZSBlbmNyeXB0aW9uS2V5OiBDdXN0b21lck1hbmFnZWRLZXk7XG4gIC8vIHByaXZhdGUgZGF0YWJhc2VTZWN1cml0eUdyb3VwOiBTZWN1cml0eUdyb3VwO1xuICBwcml2YXRlIGRhdGFiYXNlOiBEYXRhYmFzZUluc3RhbmNlO1xuICBwcml2YXRlIHZwYzogSVZwYztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuYWRkVnBjKHByb3BzKTtcbiAgICB0aGlzLmFkZERhdGFiYXNlKHByb3BzKTtcbiAgfVxuXG4gIGFkZFZwYyhwcm9wczogUmRzUHJvcHMpIHtcbiAgICB0aGlzLnZwYyA9IHByb3BzLnZwY1xuICAgICAgPyBwcm9wcy52cGNcbiAgICAgIDogbmV3IFZwYyh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9VnBjYCwge1xuICAgICAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IEZuLmltcG9ydFZhbHVlKFwiRW52aXJvbm1lbnRcIilcbiAgICAgICAgfSk7XG4gIH1cbiAgYWRkRGF0YWJhc2UocHJvcHM6IFJkc1Byb3BzKSB7XG4gICAgLy8gRGF0YWJhc2UgQ3JlZGVudGlhbHNcbiAgICB0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHMgPSBuZXcgU2VjcmV0KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1DcmVkZW50aWFsc2AsXG4gICAgICB7XG4gICAgICAgIHNlY3JldE5hbWU6IGAke3Byb3BzLmRhdGFiYXNlTmFtZX1DcmVkZW50aWFsc2AsXG4gICAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiBcInBvc3RncmVzXCJcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgICAgaW5jbHVkZVNwYWNlOiBmYWxzZSxcbiAgICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogXCJwYXNzd29yZFwiXG4gICAgICAgIH0sXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQ3VzdG9tZXIgTWFuYWdlZCBLZXlzXG4gICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9Q2x1c3RlckVuY3J5cHRpb25LZXlgLFxuICAgICAge1xuICAgICAgICBhbGlhc05hbWU6IGBjbWsvcmRzLyR7cHJvcHMuZGF0YWJhc2VOYW1lfS9lbmNyeXB0aW9uS2V5YCxcbiAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRhdGFiYXNlU2VjdXJpdHlHcm91cCA9IG5ldyBTZWN1cml0eUdyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1TZWN1cml0eUdyb3VwYCxcbiAgICAgIHtcbiAgICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCB0aGF0IGFsbG93cyBpbmJvdW5kIGFjY2VzcyB0byB0aGUgcG9zdGdyZXMgY2x1c3RlciBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBEYXRhYmFzZSBDbHVzdGVyXG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBEYXRhYmFzZUluc3RhbmNlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1EYXRhYmFzZWAsXG4gICAgICB7XG4gICAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NcbiAgICAgICAgfSxcbiAgICAgICAgc2VjdXJpdHlHcm91cHM6IFt0aGlzLmRhdGFiYXNlU2VjdXJpdHlHcm91cF0sXG4gICAgICAgIGVuZ2luZTpcbiAgICAgICAgICBwcm9wcy5lbmdpbmUgfHxcbiAgICAgICAgICBEYXRhYmFzZUluc3RhbmNlRW5naW5lLnBvc3RncmVzKHtcbiAgICAgICAgICAgIHZlcnNpb246IFBvc3RncmVzRW5naW5lVmVyc2lvbi5WRVJfMTZfM1xuICAgICAgICAgIH0pLFxuICAgICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBwcm9wcy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgICBiYWNrdXBSZXRlbnRpb246IHByb3BzLmJhY2t1cFJldGVudGlvbiB8fCBEdXJhdGlvbi5kYXlzKDE0KSxcbiAgICAgICAgc3RvcmFnZUVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgICAgc3RvcmFnZUVuY3J5cHRpb25LZXk6IHRoaXMuZW5jcnlwdGlvbktleS5rZXksXG4gICAgICAgIHN0b3JhZ2VUeXBlOiBTdG9yYWdlVHlwZS5HUDMsXG4gICAgICAgIGNhQ2VydGlmaWNhdGU6IENhQ2VydGlmaWNhdGUuUkRTX0NBX1JTQTQwOTZfRzEsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuU05BUFNIT1QsXG4gICAgICAgIGRlbGV0ZUF1dG9tYXRlZEJhY2t1cHM6IGZhbHNlLFxuICAgICAgICBkYXRhYmFzZU5hbWU6XG4gICAgICAgICAgcHJvcHMuZGF0YWJhc2VOYW1lIHx8IGAke3RoaXMubm9kZS5pZC5yZXBsYWNlKFwiUmRzXCIsIFwiXCIpfWAsXG4gICAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBpbnN0YW5jZVR5cGU6XG4gICAgICAgICAgcHJvcHMuaW5zdGFuY2VUeXBlIHx8XG4gICAgICAgICAgSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuQlVSU1RBQkxFMywgSW5zdGFuY2VTaXplLk1JQ1JPKSxcbiAgICAgICAgbXVsdGlBejogZmFsc2UsXG4gICAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OlxuICAgICAgICAgIHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93IHx8IFwiU2F0OjEyOjMwLVNhdDoyMDozMFwiLFxuICAgICAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMuZnJvbVNlY3JldCh0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHMuc2VjcmV0KVxuICAgICAgfVxuICAgICk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5kYXRhYmFzZSwgcHJvcHMudGFncyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Duration, Stack } from "aws-cdk-lib";
|
|
2
|
+
import { Connections, IConnectable, InstanceType, Vpc } from "aws-cdk-lib/aws-ec2";
|
|
3
|
+
import { IInstanceEngine } from "aws-cdk-lib/aws-rds";
|
|
4
|
+
import { Construct } from "constructs";
|
|
5
|
+
import { SecurityGroup } from "../iam";
|
|
6
|
+
import { KeyValue } from "../../../types";
|
|
7
|
+
import { StackBuilder } from "../awsStack";
|
|
8
|
+
interface RdsProps {
|
|
9
|
+
vpc: Vpc;
|
|
10
|
+
databaseName?: string;
|
|
11
|
+
engine?: IInstanceEngine;
|
|
12
|
+
instanceType?: InstanceType;
|
|
13
|
+
maxAllocatedStorage?: number;
|
|
14
|
+
allocatedStorage?: number;
|
|
15
|
+
backupRetention?: Duration;
|
|
16
|
+
clusterIdentifier?: string;
|
|
17
|
+
monitoringInterval?: Duration;
|
|
18
|
+
preferredMaintenanceWindow?: string;
|
|
19
|
+
port?: number;
|
|
20
|
+
enablePerformanceInsights?: boolean;
|
|
21
|
+
databaseProxy?: boolean;
|
|
22
|
+
readReplica?: boolean;
|
|
23
|
+
tags: KeyValue;
|
|
24
|
+
securityGroupIds?: string[];
|
|
25
|
+
}
|
|
26
|
+
export default class Rds extends Stack implements IConnectable {
|
|
27
|
+
connections: Connections;
|
|
28
|
+
databaseSecurityGroup: SecurityGroup;
|
|
29
|
+
private databaseCredentials;
|
|
30
|
+
private encryptionKey;
|
|
31
|
+
private databasePerformanceInsightsKey;
|
|
32
|
+
private database;
|
|
33
|
+
private masterSecret;
|
|
34
|
+
private databaseProxy;
|
|
35
|
+
constructor(scope: Construct, id: string, props: RdsProps);
|
|
36
|
+
addDatabase(props: RdsProps): void;
|
|
37
|
+
rotateSecret(props: RdsProps): void;
|
|
38
|
+
addProxy(props: RdsProps): void;
|
|
39
|
+
addReadReplica(props: RdsProps): void;
|
|
40
|
+
static build(id: string, props: RdsProps): (sb: StackBuilder) => Construct;
|
|
41
|
+
}
|
|
42
|
+
export {};
|