@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
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SecureStringParameter = exports.StringParameter = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
6
|
+
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
|
|
7
|
+
const constructs_1 = require("constructs");
|
|
8
|
+
const store_1 = require("../store");
|
|
9
|
+
const awsCustomResource_1 = require("../utilities/awsCustomResource");
|
|
10
|
+
class StringParameter extends aws_cdk_lib_1.aws_ssm.StringParameter {
|
|
11
|
+
constructor(scope, id, props) {
|
|
12
|
+
super(scope, id, {
|
|
13
|
+
...props,
|
|
14
|
+
description: props.description || `${id} SSM Parameter`,
|
|
15
|
+
tier: aws_cdk_lib_1.aws_ssm.ParameterTier.INTELLIGENT_TIERING
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.StringParameter = StringParameter;
|
|
20
|
+
class SecureStringParameter extends constructs_1.Construct {
|
|
21
|
+
constructor(scope, id, props) {
|
|
22
|
+
super(scope, id);
|
|
23
|
+
this.name = props.name;
|
|
24
|
+
if (props.cmk) {
|
|
25
|
+
this.cmk = props.cmk;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this.cmk = new store_1.CustomerManagedKey(this, `${id}Key`, {
|
|
29
|
+
description: props.description || `${id} KMS Key`,
|
|
30
|
+
aliasName: props.aliasName,
|
|
31
|
+
tags: props.tags
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
this.parameter = new awsCustomResource_1.AwsCustomResource(this, `${id}SecureStringParameter`, {
|
|
35
|
+
resourceType: "Custom::SecureStringParameter",
|
|
36
|
+
functionName: `${id}SecureStringParameter`,
|
|
37
|
+
onCreate: {
|
|
38
|
+
service: "@aws-sdk/client-ssm",
|
|
39
|
+
action: "PutParameter",
|
|
40
|
+
parameters: {
|
|
41
|
+
Name: props.name,
|
|
42
|
+
Description: props.description || `${id} secure parameter`,
|
|
43
|
+
Value: props.value || process.env.CDK_SECURE_STRING || "placeholderValue",
|
|
44
|
+
Type: "SecureString",
|
|
45
|
+
KeyId: this.cmk.alias.keyId
|
|
46
|
+
// TODO: Add tags to the parameter
|
|
47
|
+
},
|
|
48
|
+
physicalResourceId: custom_resources_1.PhysicalResourceId.of("createSecureStringParameter")
|
|
49
|
+
},
|
|
50
|
+
onUpdate: {
|
|
51
|
+
service: "@aws-sdk/client-ssm",
|
|
52
|
+
action: "PutParameter",
|
|
53
|
+
parameters: {
|
|
54
|
+
Name: props.name,
|
|
55
|
+
Description: props.description || `${id} secure parameter`,
|
|
56
|
+
Value: props.value ||
|
|
57
|
+
`process.env.CDK_SECURE_STRING_${id}` ||
|
|
58
|
+
"placeholderValue",
|
|
59
|
+
Overwrite: props.overwrite,
|
|
60
|
+
Type: "SecureString",
|
|
61
|
+
KeyId: this.cmk.alias.keyId
|
|
62
|
+
// TODO: Add tags to the parameter
|
|
63
|
+
},
|
|
64
|
+
physicalResourceId: custom_resources_1.PhysicalResourceId.of("updateSecureStringParameter")
|
|
65
|
+
},
|
|
66
|
+
onDelete: {
|
|
67
|
+
service: "@aws-sdk/client-ssm",
|
|
68
|
+
action: "DeleteParameter",
|
|
69
|
+
parameters: {
|
|
70
|
+
Name: props.name
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
policy: custom_resources_1.AwsCustomResourcePolicy.fromStatements([
|
|
74
|
+
new aws_iam_1.PolicyStatement({
|
|
75
|
+
actions: ["kms:Encrypt"],
|
|
76
|
+
resources: [
|
|
77
|
+
`arn:aws:kms:${props.region}:${props.accountId}:key/${this.cmk.key.keyId}`
|
|
78
|
+
]
|
|
79
|
+
}),
|
|
80
|
+
new aws_iam_1.PolicyStatement({
|
|
81
|
+
actions: [
|
|
82
|
+
"ssm:DeleteParameter",
|
|
83
|
+
"ssm:PutParameter",
|
|
84
|
+
"ssm:AddTagsToResource",
|
|
85
|
+
"logs:DeleteRetentionPolicy",
|
|
86
|
+
"logs:PutRetentionPolicy"
|
|
87
|
+
],
|
|
88
|
+
resources: [
|
|
89
|
+
`arn:aws:ssm:${props.region}:${props.accountId}:parameter${props.name}`
|
|
90
|
+
]
|
|
91
|
+
})
|
|
92
|
+
])
|
|
93
|
+
});
|
|
94
|
+
if (!props.cmk) {
|
|
95
|
+
this.parameter.node.addDependency(this.cmk);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.SecureStringParameter = SecureStringParameter;
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc3RvcmUvcGFyYW1ldGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE2QztBQUM3QyxpREFBc0Q7QUFDdEQsbUVBR3NDO0FBQ3RDLDJDQUF1QztBQUV2QyxvQ0FBOEM7QUFDOUMsc0VBQW1FO0FBRW5FLE1BQWEsZUFBZ0IsU0FBUSxxQkFBRyxDQUFDLGVBQWU7SUFDdEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLEdBQUcsRUFBRSxnQkFBZ0I7WUFDdkQsSUFBSSxFQUFFLHFCQUFHLENBQUMsYUFBYSxDQUFDLG1CQUFtQjtTQUM1QyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFSRCwwQ0FRQztBQWNELE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFLbEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUV2QixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDdEI7YUFBTTtZQUNMLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSwwQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtnQkFDbEQsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksR0FBRyxFQUFFLFVBQVU7Z0JBQ2pELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2FBQ2pCLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsdUJBQXVCLEVBQUU7WUFDekUsWUFBWSxFQUFFLCtCQUErQjtZQUM3QyxZQUFZLEVBQUUsR0FBRyxFQUFFLHVCQUF1QjtZQUMxQyxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7b0JBQ2hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLEdBQUcsRUFBRSxtQkFBbUI7b0JBQzFELEtBQUssRUFDSCxLQUFLLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksa0JBQWtCO29CQUNwRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUs7b0JBQzNCLGtDQUFrQztpQkFDbkM7Z0JBQ0Qsa0JBQWtCLEVBQUUscUNBQWtCLENBQUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDO2FBQ3pFO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxxQkFBcUI7Z0JBQzlCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO29CQUNoQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxHQUFHLEVBQUUsbUJBQW1CO29CQUMxRCxLQUFLLEVBQ0gsS0FBSyxDQUFDLEtBQUs7d0JBQ1gsaUNBQWlDLEVBQUUsRUFBRTt3QkFDckMsa0JBQWtCO29CQUNwQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7b0JBQzFCLElBQUksRUFBRSxjQUFjO29CQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSztvQkFDM0Isa0NBQWtDO2lCQUNuQztnQkFDRCxrQkFBa0IsRUFBRSxxQ0FBa0IsQ0FBQyxFQUFFLENBQUMsNkJBQTZCLENBQUM7YUFDekU7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsTUFBTSxFQUFFLGlCQUFpQjtnQkFDekIsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtpQkFDakI7YUFDRjtZQUNELE1BQU0sRUFBRSwwQ0FBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzdDLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO29CQUN4QixTQUFTLEVBQUU7d0JBQ1QsZUFBZSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO3FCQUMzRTtpQkFDRixDQUFDO2dCQUNGLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFO3dCQUNQLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQix1QkFBdUI7d0JBQ3ZCLDRCQUE0Qjt3QkFDNUIseUJBQXlCO3FCQUMxQjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsZUFBZSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLGFBQWEsS0FBSyxDQUFDLElBQUksRUFBRTtxQkFDeEU7aUJBQ0YsQ0FBQzthQUNILENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0NBQ0Y7QUF2RkQsc0RBdUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzX3NzbSBhcyBzc20gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBBd3NDdXN0b21SZXNvdXJjZVBvbGljeSxcbiAgUGh5c2ljYWxSZXNvdXJjZUlkXG59IGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vY29tcHV0ZS9lY3NcIjtcbmltcG9ydCB7IEN1c3RvbWVyTWFuYWdlZEtleSB9IGZyb20gXCIuLi9zdG9yZVwiO1xuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdQYXJhbWV0ZXIgZXh0ZW5kcyBzc20uU3RyaW5nUGFyYW1ldGVyIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IHNzbS5TdHJpbmdQYXJhbWV0ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24gfHwgYCR7aWR9IFNTTSBQYXJhbWV0ZXJgLFxuICAgICAgdGllcjogc3NtLlBhcmFtZXRlclRpZXIuSU5URUxMSUdFTlRfVElFUklOR1xuICAgIH0pO1xuICB9XG59XG5cbmludGVyZmFjZSBTZWN1cmVTdHJpbmdQYXJhbWV0ZXJQcm9wcyB7XG4gIGFjY291bnRJZDogc3RyaW5nO1xuICBhbGlhc05hbWU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG92ZXJ3cml0ZT86IGJvb2xlYW47XG4gIHJlZ2lvbjogc3RyaW5nO1xuICB0YWdzOiBLZXlWYWx1ZTtcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIGNtaz86IEN1c3RvbWVyTWFuYWdlZEtleTtcbn1cblxuZXhwb3J0IGNsYXNzIFNlY3VyZVN0cmluZ1BhcmFtZXRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBjbWs6IEN1c3RvbWVyTWFuYWdlZEtleTtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlcjogQXdzQ3VzdG9tUmVzb3VyY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNlY3VyZVN0cmluZ1BhcmFtZXRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMubmFtZSA9IHByb3BzLm5hbWU7XG5cbiAgICBpZiAocHJvcHMuY21rKSB7XG4gICAgICB0aGlzLmNtayA9IHByb3BzLmNtaztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbWsgPSBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KHRoaXMsIGAke2lkfUtleWAsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uIHx8IGAke2lkfSBLTVMgS2V5YCxcbiAgICAgICAgYWxpYXNOYW1lOiBwcm9wcy5hbGlhc05hbWUsXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucGFyYW1ldGVyID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIGAke2lkfVNlY3VyZVN0cmluZ1BhcmFtZXRlcmAsIHtcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlNlY3VyZVN0cmluZ1BhcmFtZXRlclwiLFxuICAgICAgZnVuY3Rpb25OYW1lOiBgJHtpZH1TZWN1cmVTdHJpbmdQYXJhbWV0ZXJgLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJAYXdzLXNkay9jbGllbnQtc3NtXCIsXG4gICAgICAgIGFjdGlvbjogXCJQdXRQYXJhbWV0ZXJcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIE5hbWU6IHByb3BzLm5hbWUsXG4gICAgICAgICAgRGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uIHx8IGAke2lkfSBzZWN1cmUgcGFyYW1ldGVyYCxcbiAgICAgICAgICBWYWx1ZTpcbiAgICAgICAgICAgIHByb3BzLnZhbHVlIHx8IHByb2Nlc3MuZW52LkNES19TRUNVUkVfU1RSSU5HIHx8IFwicGxhY2Vob2xkZXJWYWx1ZVwiLFxuICAgICAgICAgIFR5cGU6IFwiU2VjdXJlU3RyaW5nXCIsXG4gICAgICAgICAgS2V5SWQ6IHRoaXMuY21rLmFsaWFzLmtleUlkXG4gICAgICAgICAgLy8gVE9ETzogQWRkIHRhZ3MgdG8gdGhlIHBhcmFtZXRlclxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihcImNyZWF0ZVNlY3VyZVN0cmluZ1BhcmFtZXRlclwiKVxuICAgICAgfSxcbiAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQGF3cy1zZGsvY2xpZW50LXNzbVwiLFxuICAgICAgICBhY3Rpb246IFwiUHV0UGFyYW1ldGVyXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBOYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgICAgIERlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbiB8fCBgJHtpZH0gc2VjdXJlIHBhcmFtZXRlcmAsXG4gICAgICAgICAgVmFsdWU6XG4gICAgICAgICAgICBwcm9wcy52YWx1ZSB8fFxuICAgICAgICAgICAgYHByb2Nlc3MuZW52LkNES19TRUNVUkVfU1RSSU5HXyR7aWR9YCB8fFxuICAgICAgICAgICAgXCJwbGFjZWhvbGRlclZhbHVlXCIsXG4gICAgICAgICAgT3ZlcndyaXRlOiBwcm9wcy5vdmVyd3JpdGUsXG4gICAgICAgICAgVHlwZTogXCJTZWN1cmVTdHJpbmdcIixcbiAgICAgICAgICBLZXlJZDogdGhpcy5jbWsuYWxpYXMua2V5SWRcbiAgICAgICAgICAvLyBUT0RPOiBBZGQgdGFncyB0byB0aGUgcGFyYW1ldGVyXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFwidXBkYXRlU2VjdXJlU3RyaW5nUGFyYW1ldGVyXCIpXG4gICAgICB9LFxuICAgICAgb25EZWxldGU6IHtcbiAgICAgICAgc2VydmljZTogXCJAYXdzLXNkay9jbGllbnQtc3NtXCIsXG4gICAgICAgIGFjdGlvbjogXCJEZWxldGVQYXJhbWV0ZXJcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIE5hbWU6IHByb3BzLm5hbWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHBvbGljeTogQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVN0YXRlbWVudHMoW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RW5jcnlwdFwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOmttczoke3Byb3BzLnJlZ2lvbn06JHtwcm9wcy5hY2NvdW50SWR9OmtleS8ke3RoaXMuY21rLmtleS5rZXlJZH1gXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJzc206RGVsZXRlUGFyYW1ldGVyXCIsXG4gICAgICAgICAgICBcInNzbTpQdXRQYXJhbWV0ZXJcIixcbiAgICAgICAgICAgIFwic3NtOkFkZFRhZ3NUb1Jlc291cmNlXCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVsZXRlUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICBcImxvZ3M6UHV0UmV0ZW50aW9uUG9saWN5XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMucmVnaW9ufToke3Byb3BzLmFjY291bnRJZH06cGFyYW1ldGVyJHtwcm9wcy5uYW1lfWBcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICBdKVxuICAgIH0pO1xuXG4gICAgaWYgKCFwcm9wcy5jbWspIHtcbiAgICAgIHRoaXMucGFyYW1ldGVyLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmNtayk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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";
|
|
3
4
|
import { Construct } from "constructs";
|
|
5
|
+
import { KeyValue } from "../compute/ecs";
|
|
4
6
|
interface RdsProps {
|
|
5
7
|
vpc: Vpc;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
defaultDatabaseName?: string;
|
|
9
|
+
engine?: IClusterEngine;
|
|
10
|
+
backup?: BackupProps;
|
|
11
|
+
clusterIdentifier?: string;
|
|
12
|
+
monitoringInterval?: Duration;
|
|
13
|
+
preferredMaintenanceWindow?: string;
|
|
8
14
|
port?: number;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
writer?: ClusterInstance;
|
|
16
|
+
readers?: ClusterInstance[];
|
|
17
|
+
tags: KeyValue;
|
|
18
|
+
securityGroupIds?: string[];
|
|
19
|
+
buildkiteRoleArn?: string;
|
|
13
20
|
}
|
|
14
21
|
export default class Rds extends Construct implements IConnectable {
|
|
15
|
-
private databaseInstance;
|
|
16
|
-
private outputs;
|
|
17
|
-
private secret;
|
|
18
|
-
private securityGroup;
|
|
19
22
|
connections: Connections;
|
|
20
23
|
constructor(scope: Construct, id: string, props: RdsProps);
|
|
21
|
-
private addDatabaseInstance;
|
|
22
|
-
private addSecretResource;
|
|
23
|
-
private addSecurityGroup;
|
|
24
24
|
}
|
|
25
25
|
export {};
|
|
@@ -1,58 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
4
|
-
const aws_rds_1 = require("aws-cdk-lib/aws-rds");
|
|
5
4
|
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
6
|
-
const
|
|
5
|
+
const aws_rds_1 = require("aws-cdk-lib/aws-rds");
|
|
7
6
|
const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
|
|
8
7
|
const constructs_1 = require("constructs");
|
|
8
|
+
const iam_1 = require("../iam");
|
|
9
|
+
const kms_1 = require("./kms");
|
|
10
|
+
const secret_1 = require("./secret");
|
|
9
11
|
class Rds extends constructs_1.Construct {
|
|
10
12
|
constructor(scope, id, props) {
|
|
11
13
|
super(scope, id);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const instanceSize = props.instanceSize || aws_ec2_1.InstanceSize.MICRO;
|
|
16
|
-
const databaseName = props.databaseName || `${id}Database`;
|
|
17
|
-
const port = props.port || 5432;
|
|
18
|
-
const snapshotRetentionInDays = props.snapshotRetentionInDays || 14;
|
|
19
|
-
const retainSnapshotsOnDeletion = props.retainSnapshotsOnDeletion || true;
|
|
20
|
-
const engine = aws_rds_1.DatabaseInstanceEngine.postgres({
|
|
21
|
-
version: props.version ||
|
|
22
|
-
aws_rds_1.PostgresEngineVersion.VER_14_5
|
|
23
|
-
});
|
|
24
|
-
//todo: validate engine & version are an acceptable combination
|
|
25
|
-
this.addSecretResource(id);
|
|
26
|
-
this.addSecurityGroup(id, props.vpc, port);
|
|
27
|
-
this.addDatabaseInstance(scope, `${id}Instance`, props, engine, instanceClass, instanceSize, port, databaseName, snapshotRetentionInDays, retainSnapshotsOnDeletion);
|
|
28
|
-
this.connections = this.securityGroup.connections;
|
|
29
|
-
//todo: multiAz
|
|
30
|
-
//todo: reserved instance families
|
|
31
|
-
//todo: security group
|
|
32
|
-
//todo: cluster
|
|
33
|
-
//todo: automatic rotating credentials
|
|
34
|
-
//todo: database proxy
|
|
35
|
-
//todo: cfn outputs (url)
|
|
36
|
-
//todo: database cname?
|
|
37
|
-
}
|
|
38
|
-
addDatabaseInstance(scope, id, props, engine, instanceClass, instanceSize, port, databaseName, snapshotRetentionInDays, retainSnapshotsOnDeletion) {
|
|
39
|
-
this.databaseInstance = new aws_rds_1.DatabaseInstance(scope, id, {
|
|
40
|
-
vpc: props.vpc,
|
|
41
|
-
// vpcSubnets: { subnetType: SubnetType.PRIVATE_ISOLATED },
|
|
42
|
-
engine: engine,
|
|
43
|
-
instanceType: aws_ec2_1.InstanceType.of(instanceClass, instanceSize),
|
|
44
|
-
credentials: aws_rds_1.Credentials.fromSecret(this.secret),
|
|
45
|
-
port: port,
|
|
46
|
-
securityGroups: [this.securityGroup],
|
|
47
|
-
databaseName: databaseName,
|
|
48
|
-
backupRetention: aws_cdk_lib_1.Duration.days(snapshotRetentionInDays),
|
|
49
|
-
deleteAutomatedBackups: retainSnapshotsOnDeletion,
|
|
50
|
-
removalPolicy: aws_cdk_lib_1.RemovalPolicy.SNAPSHOT
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
addSecretResource(id) {
|
|
54
|
-
this.secret = new aws_secretsmanager_1.Secret(this, `${id}Secret`, {
|
|
55
|
-
secretName: `${id}-credentials`,
|
|
14
|
+
// Database Credentials
|
|
15
|
+
const databaseCredentials = new secret_1.default(this, `${props.defaultDatabaseName}Credentials`, {
|
|
16
|
+
secretName: `${props.defaultDatabaseName}Credentials`,
|
|
56
17
|
generateSecretString: {
|
|
57
18
|
secretStringTemplate: JSON.stringify({
|
|
58
19
|
username: "postgres"
|
|
@@ -60,31 +21,112 @@ class Rds extends constructs_1.Construct {
|
|
|
60
21
|
excludePunctuation: true,
|
|
61
22
|
includeSpace: false,
|
|
62
23
|
generateStringKey: "password"
|
|
24
|
+
},
|
|
25
|
+
tags: props.tags,
|
|
26
|
+
buildkiteRoleArn: props.buildkiteRoleArn
|
|
27
|
+
});
|
|
28
|
+
// Customer Managed Keys
|
|
29
|
+
const encryptionKey = new kms_1.CustomerManagedKey(this, `${props.defaultDatabaseName}ClusterEncryptionKey`, {
|
|
30
|
+
aliasName: `cmk/rds/${props.defaultDatabaseName}/encryptionKey`,
|
|
31
|
+
tags: props.tags
|
|
32
|
+
});
|
|
33
|
+
const primaryReaderInsightsKey = new kms_1.CustomerManagedKey(this, `${props.defaultDatabaseName}PrimaryReaderInsightsKey`, {
|
|
34
|
+
aliasName: `cmk/rds/${props.defaultDatabaseName}/PrimaryReaderInsightsKey`,
|
|
35
|
+
tags: props.tags
|
|
36
|
+
});
|
|
37
|
+
const secondaryReaderInsightsKey = new kms_1.CustomerManagedKey(this, `${props.defaultDatabaseName}SecondaryReaderInsightsKey`, {
|
|
38
|
+
aliasName: `cmk/rds/${props.defaultDatabaseName}/SecondaryReaderInsightsKey`,
|
|
39
|
+
tags: props.tags
|
|
40
|
+
});
|
|
41
|
+
const primaryWriterPerformanceInsightsKey = new kms_1.CustomerManagedKey(this, `${props.defaultDatabaseName}PrimaryWriterPerformanceInsightsKey`, {
|
|
42
|
+
aliasName: `cmk/rds/${props.defaultDatabaseName}/PrimaryWriterInsightsKey`,
|
|
43
|
+
tags: props.tags
|
|
44
|
+
});
|
|
45
|
+
const clusterSecurityGroup = new iam_1.SecurityGroup(this, `${id}SecurityGroup`, {
|
|
46
|
+
vpc: props.vpc,
|
|
47
|
+
description: `Security group that allows inbound access to the postgres cluster for ${props.defaultDatabaseName}`
|
|
48
|
+
});
|
|
49
|
+
//TODO: Remove this line, that allows the proxy to connect to the database. Replace with seperated security groups
|
|
50
|
+
clusterSecurityGroup.addIngressRule(clusterSecurityGroup, aws_ec2_1.Port.tcp(5432));
|
|
51
|
+
this.connections = clusterSecurityGroup.connections;
|
|
52
|
+
// Database Cluster
|
|
53
|
+
const databaseCluster = new aws_rds_1.DatabaseCluster(scope, `${id}Database`, {
|
|
54
|
+
vpc: props.vpc,
|
|
55
|
+
vpcSubnets: {
|
|
56
|
+
subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS
|
|
57
|
+
},
|
|
58
|
+
securityGroups: [clusterSecurityGroup],
|
|
59
|
+
engine: props.engine ||
|
|
60
|
+
aws_rds_1.DatabaseClusterEngine.auroraPostgres({
|
|
61
|
+
//TODO: Do we update these when we release a new version? Or try to keep them constantly updated?
|
|
62
|
+
version: aws_rds_1.AuroraPostgresEngineVersion.VER_15_6
|
|
63
|
+
}),
|
|
64
|
+
backup: props.backup || {
|
|
65
|
+
retention: aws_cdk_lib_1.Duration.days(14)
|
|
66
|
+
},
|
|
67
|
+
storageEncrypted: true,
|
|
68
|
+
storageEncryptionKey: encryptionKey.key,
|
|
69
|
+
clusterIdentifier: props.clusterIdentifier || `${props.defaultDatabaseName}-cluster`,
|
|
70
|
+
credentials: aws_rds_1.Credentials.fromSecret(databaseCredentials.secret),
|
|
71
|
+
defaultDatabaseName: props.defaultDatabaseName || `${id.replace("Rds", "")}`,
|
|
72
|
+
monitoringInterval: props.monitoringInterval || aws_cdk_lib_1.Duration.minutes(1),
|
|
73
|
+
preferredMaintenanceWindow: props.preferredMaintenanceWindow || "Sat:12:30-Sat:20:30",
|
|
74
|
+
port: props.port || 5432,
|
|
75
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.SNAPSHOT,
|
|
76
|
+
writer: props.writer ||
|
|
77
|
+
aws_rds_1.ClusterInstance.serverlessV2(`${props.defaultDatabaseName}Writer`, {
|
|
78
|
+
enablePerformanceInsights: true,
|
|
79
|
+
performanceInsightEncryptionKey: primaryWriterPerformanceInsightsKey.key,
|
|
80
|
+
instanceIdentifier: `${props.defaultDatabaseName}-primary-writer`,
|
|
81
|
+
//TODO: Do we update these when we release a new version? Or try to keep them constantly updated?
|
|
82
|
+
caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1
|
|
83
|
+
}),
|
|
84
|
+
readers: props.readers || [
|
|
85
|
+
aws_rds_1.ClusterInstance.serverlessV2(`${props.defaultDatabaseName}PrimaryReader`, {
|
|
86
|
+
scaleWithWriter: true,
|
|
87
|
+
enablePerformanceInsights: true,
|
|
88
|
+
performanceInsightEncryptionKey: primaryReaderInsightsKey.key,
|
|
89
|
+
instanceIdentifier: `${props.defaultDatabaseName}-primary-reader`,
|
|
90
|
+
caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1
|
|
91
|
+
}),
|
|
92
|
+
aws_rds_1.ClusterInstance.serverlessV2(`${props.defaultDatabaseName}SecondaryReader`, {
|
|
93
|
+
scaleWithWriter: false,
|
|
94
|
+
enablePerformanceInsights: true,
|
|
95
|
+
performanceInsightEncryptionKey: secondaryReaderInsightsKey.key,
|
|
96
|
+
instanceIdentifier: `${props.defaultDatabaseName}-secondary-reader`,
|
|
97
|
+
caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1
|
|
98
|
+
})
|
|
99
|
+
]
|
|
100
|
+
});
|
|
101
|
+
const databaseProxy = new aws_rds_1.DatabaseProxy(this, `${props.defaultDatabaseName}DatabaseProxy`, {
|
|
102
|
+
proxyTarget: aws_rds_1.ProxyTarget.fromCluster(databaseCluster),
|
|
103
|
+
secrets: [databaseCredentials.secret],
|
|
104
|
+
securityGroups: [clusterSecurityGroup],
|
|
105
|
+
vpc: props.vpc,
|
|
106
|
+
vpcSubnets: {
|
|
107
|
+
subnetType: aws_ec2_1.SubnetType.PUBLIC
|
|
63
108
|
}
|
|
64
109
|
});
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
110
|
+
new aws_cdk_lib_1.CfnOutput(this, `${props.defaultDatabaseName}ProxyEndpointOutput`, {
|
|
111
|
+
key: `${props.defaultDatabaseName}ProxyEndpoint`,
|
|
112
|
+
exportName: `${props.defaultDatabaseName}ProxyEndpoint`,
|
|
113
|
+
value: databaseProxy.endpoint
|
|
114
|
+
});
|
|
115
|
+
// Rotate the Secret every 30 days
|
|
116
|
+
const masterSecret = new secret_1.default(this, `${props.defaultDatabaseName}MasterSecret`, {
|
|
117
|
+
secretName: `${props.defaultDatabaseName}MasterSecret`,
|
|
118
|
+
tags: props.tags
|
|
119
|
+
});
|
|
120
|
+
new aws_secretsmanager_1.SecretRotation(this, `${props.defaultDatabaseName}SecretRotation`, {
|
|
121
|
+
application: new aws_secretsmanager_1.SecretRotationApplication("SecretsManagerRDSPostgreSQLRotationMultiUser", "1.1.367", {
|
|
122
|
+
isMultiUser: true
|
|
123
|
+
}),
|
|
124
|
+
secret: databaseCredentials.secret,
|
|
125
|
+
masterSecret: masterSecret.secret,
|
|
126
|
+
target: databaseCluster,
|
|
127
|
+
vpc: databaseCluster.vpc
|
|
76
128
|
});
|
|
77
|
-
//todo: retrieve from service not hardcoded vpc?
|
|
78
|
-
// this.securityGroup.connections.allowFrom(ecsService.service, Port.tcp(3306), 'Inbound');
|
|
79
|
-
// Create basic ingress rule to allow access to database through default port
|
|
80
|
-
// this.securityGroup.addIngressRule(
|
|
81
|
-
// Peer.ipv4(vpc.vpcCidrBlock),
|
|
82
|
-
// Port.tcp(port),
|
|
83
|
-
// `Allow port ${port} for database connection from only within the VPC (${vpc.vpcId})`
|
|
84
|
-
// );
|
|
85
|
-
// todo: Double check egress rules with Paul.
|
|
86
|
-
// - What is the default (CDK Diff implies it might be 'everyone'?)
|
|
87
129
|
}
|
|
88
130
|
}
|
|
89
131
|
exports.default = Rds;
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc3RvcmUvcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQXNEO0FBQ3RELGlEQU82QjtBQUM3QixpREFRNkI7QUFFN0IsNkNBQXdDO0FBQ3hDLHVFQUF3RDtBQUN4RCwyQ0FBdUM7QUFjdkMsTUFBcUIsR0FBSSxTQUFRLHNCQUFTO0lBT3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZTtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTlgsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFRaEMsK0RBQStEO1FBQy9ELE1BQU0sYUFBYSxHQUNqQixLQUFLLENBQUMsYUFBYSxJQUFJLHVCQUFhLENBQUMsbUJBQW1CLENBQUM7UUFDM0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxzQkFBWSxDQUFDLEtBQUssQ0FBQztRQUU5RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUM7UUFDM0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7UUFDaEMsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDO1FBQ3BFLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQztRQUUxRSxNQUFNLE1BQU0sR0FBRyxnQ0FBc0IsQ0FBQyxRQUFRLENBQUM7WUFDN0MsT0FBTyxFQUNKLEtBQUssQ0FBQyxPQUFpQztnQkFDeEMsK0JBQXFCLENBQUMsUUFBUTtTQUNqQyxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFFL0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxF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UUFFTCw2Q0FBNkM7UUFDN0Msb0VBQW9FO0lBQ3RFLENBQUM7Q0FDRjtBQTlIRCxzQkE4SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ3JlZGVudGlhbHMsXG4gIERhdGFiYXNlSW5zdGFuY2UsXG4gIERhdGFiYXNlSW5zdGFuY2VFbmdpbmUsXG4gIFBvc3RncmVzRW5naW5lVmVyc2lvbixcbiAgTXlzcWxFbmdpbmVWZXJzaW9uLFxuICBJSW5zdGFuY2VFbmdpbmVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7XG4gIEluc3RhbmNlQ2xhc3MsXG4gIEluc3RhbmNlU2l6ZSxcbiAgSW5zdGFuY2VUeXBlLFxuICBTZWN1cml0eUdyb3VwLFxuICBWcGMsXG4gIElDb25uZWN0YWJsZSxcbiAgQ29ubmVjdGlvbnNcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcblxuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbnRlcmZhY2UgUmRzUHJvcHMge1xuICB2cGM6IFZwYztcbiAgZGF0YWJhc2VOYW1lPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogUG9zdGdyZXNFbmdpbmVWZXJzaW9uIHwgTXlzcWxFbmdpbmVWZXJzaW9uO1xuICBwb3J0PzogbnVtYmVyO1xuICBpbnN0YW5jZUNsYXNzPzogSW5zdGFuY2VDbGFzcztcbiAgaW5zdGFuY2VTaXplPzogSW5zdGFuY2VTaXplO1xuICAvLyBEYXRhYmFzZSBJbnN0YW5jZSBDb25maWd1cmF0aW9uXG4gIHNuYXBzaG90UmV0ZW50aW9uSW5EYXlzPzogbnVtYmVyO1xuICByZXRhaW5TbmFwc2hvdHNPbkRlbGV0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmRzIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHJpdmF0ZSBkYXRhYmFzZUluc3RhbmNlOiBEYXRhYmFzZUluc3RhbmNlO1xuICBwcml2YXRlIG91dHB1dHM6IENmbk91dHB1dFtdID0gW107XG4gIHByaXZhdGUgc2VjcmV0OiBTZWNyZXQ7XG4gIHByaXZhdGUgc2VjdXJpdHlHcm91cDogU2VjdXJpdHlHcm91cDtcbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gdG9kbzogYXV0b21hdGljYWxseSBjaGFuZ2UgY2xhc3MgJiBzaXplIGJhc2VkIG9uIGVudmlyb25tZW50XG4gICAgY29uc3QgaW5zdGFuY2VDbGFzcyA9XG4gICAgICBwcm9wcy5pbnN0YW5jZUNsYXNzIHx8IEluc3RhbmNlQ2xhc3MuQlVSU1RBQkxFNF9HUkFWSVRPTjtcbiAgICBjb25zdCBpbnN0YW5jZVNpemUgPSBwcm9wcy5pbnN0YW5jZVNpemUgfHwgSW5zdGFuY2VTaXplLk1JQ1JPO1xuXG4gICAgY29uc3QgZGF0YWJhc2VOYW1lID0gcHJvcHMuZGF0YWJhc2VOYW1lIHx8IGAke2lkfURhdGFiYXNlYDtcbiAgICBjb25zdCBwb3J0ID0gcHJvcHMucG9ydCB8fCA1NDMyO1xuICAgIGNvbnN0IHNuYXBzaG90UmV0ZW50aW9uSW5EYXlzID0gcHJvcHMuc25hcHNob3RSZXRlbnRpb25JbkRheXMgfHwgMTQ7XG4gICAgY29uc3QgcmV0YWluU25hcHNob3RzT25EZWxldGlvbiA9IHByb3BzLnJldGFpblNuYXBzaG90c09uRGVsZXRpb24gfHwgdHJ1ZTtcblxuICAgIGNvbnN0IGVuZ2luZSA9IERhdGFiYXNlSW5zdGFuY2VFbmdpbmUucG9zdGdyZXMoe1xuICAgICAgdmVyc2lvbjpcbiAgICAgICAgKHByb3BzLnZlcnNpb24gYXMgUG9zdGdyZXNFbmdpbmVWZXJzaW9uKSB8fFxuICAgICAgICBQb3N0Z3Jlc0VuZ2luZVZlcnNpb24uVkVSXzE0XzVcbiAgICB9KTtcblxuICAgIC8vdG9kbzogdmFsaWRhdGUgZW5naW5lICYgdmVyc2lvbiBhcmUgYW4gYWNjZXB0YWJsZSBjb21iaW5hdGlvblxuXG4gICAgdGhpcy5hZGRTZWNyZXRSZXNvdXJjZShpZCk7XG4gICAgdGhpcy5hZGRTZWN1cml0eUdyb3VwKGlkLCBwcm9wcy52cGMsIHBvcnQpO1xuICAgIHRoaXMuYWRkRGF0YWJhc2VJbnN0YW5jZShcbiAgICAgIHNjb3BlLFxuICAgICAgYCR7aWR9SW5zdGFuY2VgLFxuICAgICAgcHJvcHMsXG4gICAgICBlbmdpbmUsXG4gICAgICBpbnN0YW5jZUNsYXNzLFxuICAgICAgaW5zdGFuY2VTaXplLFxuICAgICAgcG9ydCxcbiAgICAgIGRhdGFiYXNlTmFtZSxcbiAgICAgIHNuYXBzaG90UmV0ZW50aW9uSW5EYXlzLFxuICAgICAgcmV0YWluU25hcHNob3RzT25EZWxldGlvblxuICAgICk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5zZWN1cml0eUdyb3VwLmNvbm5lY3Rpb25zO1xuXG4gICAgLy90b2RvOiBtdWx0aUF6XG4gICAgLy90b2RvOiByZXNlcnZlZCBpbnN0YW5jZSBmYW1pbGllc1xuICAgIC8vdG9kbzogc2VjdXJpdHkgZ3JvdXBcbiAgICAvL3RvZG86IGNsdXN0ZXJcbiAgICAvL3RvZG86IGF1dG9tYXRpYyByb3RhdGluZyBjcmVkZW50aWFsc1xuICAgIC8vdG9kbzogZGF0YWJhc2UgcHJveHlcbiAgICAvL3RvZG86IGNmbiBvdXRwdXRzICh1cmwpXG4gICAgLy90b2RvOiBkYXRhYmFzZSBjbmFtZT9cbiAgfVxuXG4gIHByaXZhdGUgYWRkRGF0YWJhc2VJbnN0YW5jZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFJkc1Byb3BzLFxuICAgIGVuZ2luZTogSUluc3RhbmNlRW5naW5lLFxuICAgIGluc3RhbmNlQ2xhc3M6IEluc3RhbmNlQ2xhc3MsXG4gICAgaW5zdGFuY2VTaXplOiBJbnN0YW5jZVNpemUsXG4gICAgcG9ydDogbnVtYmVyLFxuICAgIGRhdGFiYXNlTmFtZTogc3RyaW5nLFxuICAgIHNuYXBzaG90UmV0ZW50aW9uSW5EYXlzOiBudW1iZXIsXG4gICAgcmV0YWluU25hcHNob3RzT25EZWxldGlvbjogYm9vbGVhblxuICApIHtcbiAgICB0aGlzLmRhdGFiYXNlSW5zdGFuY2UgPSBuZXcgRGF0YWJhc2VJbnN0YW5jZShzY29wZSwgaWQsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgLy8gdnBjU3VibmV0czogeyBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQgfSxcbiAgICAgIGVuZ2luZTogZW5naW5lLFxuICAgICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoaW5zdGFuY2VDbGFzcywgaW5zdGFuY2VTaXplKSxcbiAgICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscy5mcm9tU2VjcmV0KHRoaXMuc2VjcmV0KSxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBzZWN1cml0eUdyb3VwczogW3RoaXMuc2VjdXJpdHlHcm91cF0sXG4gICAgICBkYXRhYmFzZU5hbWU6IGRhdGFiYXNlTmFtZSxcbiAgICAgIGJhY2t1cFJldGVudGlvbjogRHVyYXRpb24uZGF5cyhzbmFwc2hvdFJldGVudGlvbkluRGF5cyksXG4gICAgICBkZWxldGVBdXRvbWF0ZWRCYWNrdXBzOiByZXRhaW5TbmFwc2hvdHNPbkRlbGV0aW9uLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5TTkFQU0hPVFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZWNyZXRSZXNvdXJjZShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWNyZXQgPSBuZXcgU2VjcmV0KHRoaXMsIGAke2lkfVNlY3JldGAsIHtcbiAgICAgIHNlY3JldE5hbWU6IGAke2lkfS1jcmVkZW50aWFsc2AsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHVzZXJuYW1lOiBcInBvc3RncmVzXCJcbiAgICAgICAgfSksXG4gICAgICAgIGV4Y2x1ZGVQdW5jdHVhdGlvbjogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZVNwYWNlOiBmYWxzZSxcbiAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwicGFzc3dvcmRcIlxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRwdXRzLnB1c2goXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiU2VjcmV0IE5hbWVcIiwge1xuICAgICAgICB2YWx1ZTogdGhpcy5zZWNyZXQuc2VjcmV0TmFtZVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMub3V0cHV0cy5wdXNoKFxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIlNlY3JldCBBUk5cIiwge1xuICAgICAgICB2YWx1ZTogdGhpcy5zZWNyZXQuc2VjcmV0QXJuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZFNlY3VyaXR5R3JvdXAoaWQ6IHN0cmluZywgdnBjOiBWcGMsIHBvcnQ6IG51bWJlcikge1xuICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBTZWN1cml0eUdyb3VwKHRoaXMsIGAke2lkfURCU2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lOiBcIkRhdGFiYXNlLVNHXCIsXG4gICAgICB2cGM6IHZwY1xuICAgIH0pO1xuXG4gICAgLy90b2RvOiByZXRyaWV2ZSBmcm9tIHNlcnZpY2Ugbm90IGhhcmRjb2RlZCB2cGM/XG4gICAgLy8gdGhpcy5zZWN1cml0eUdyb3VwLmNvbm5lY3Rpb25zLmFsbG93RnJvbShlY3NTZXJ2aWNlLnNlcnZpY2UsIFBvcnQudGNwKDMzMDYpLCAnSW5ib3VuZCcpO1xuXG4gICAgLy8gQ3JlYXRlIGJhc2ljIGluZ3Jlc3MgcnVsZSB0byBhbGxvdyBhY2Nlc3MgdG8gZGF0YWJhc2UgdGhyb3VnaCBkZWZhdWx0IHBvcnRcbiAgICAvLyB0aGlzLnNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgLy8gICBQZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksXG4gICAgLy8gICBQb3J0LnRjcChwb3J0KSxcbiAgICAvLyAgIGBBbGxvdyBwb3J0ICR7cG9ydH0gZm9yIGRhdGFiYXNlIGNvbm5lY3Rpb24gZnJvbSBvbmx5IHdpdGhpbiB0aGUgVlBDICgke3ZwYy52cGNJZH0pYFxuICAgIC8vICk7XG5cbiAgICAvLyB0b2RvOiBEb3VibGUgY2hlY2sgZWdyZXNzIHJ1bGVzIHdpdGggUGF1bC5cbiAgICAvLyAgLSBXaGF0IGlzIHRoZSBkZWZhdWx0IChDREsgRGlmZiBpbXBsaWVzIGl0IG1pZ2h0IGJlICdldmVyeW9uZSc/KVxuICB9XG59XG4iXX0=
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc3RvcmUvcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQWlFO0FBQ2pFLGlEQU02QjtBQUM3QixpREFXNkI7QUFDN0IsdUVBR3dDO0FBQ3hDLDJDQUF1QztBQUV2QyxnQ0FBdUM7QUFDdkMsK0JBQTJDO0FBQzNDLHFDQUE4QjtBQWtCOUIsTUFBcUIsR0FBSSxTQUFRLHNCQUFTO0lBR3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZTtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLHVCQUF1QjtRQUN2QixNQUFNLG1CQUFtQixHQUFHLElBQUksZ0JBQU0sQ0FDcEMsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixhQUFhLEVBQ3pDO1lBQ0UsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixhQUFhO1lBQ3JELG9CQUFvQixFQUFFO2dCQUNwQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNuQyxRQUFRLEVBQUUsVUFBVTtpQkFDckIsQ0FBQztnQkFDRixrQkFBa0IsRUFBRSxJQUFJO2dCQUN4QixZQUFZLEVBQUUsS0FBSztnQkFDbkIsaUJBQWlCLEVBQUUsVUFBVTthQUM5QjtZQUNELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1NBQ3pDLENBQ0YsQ0FBQztRQUVGLHdCQUF3QjtRQUN4QixNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFrQixDQUMxQyxJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsbUJBQW1CLHNCQUFzQixFQUNsRDtZQUNFLFNBQVMsRUFBRSxXQUFXLEtBQUssQ0FBQyxtQkFBbUIsZ0JBQWdCO1lBQy9ELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNq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QUM7WUFDdEMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsVUFBVSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxvQkFBVSxDQUFDLE1BQU07YUFDOUI7U0FDRixDQUNGLENBQUM7UUFFRixJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixxQkFBcUIsRUFBRTtZQUNyRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsbUJBQW1CLGVBQWU7WUFDaEQsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixlQUFlO1lBQ3ZELEtBQUssRUFBRSxhQUFhLENBQUMsUUFBUTtTQUM5QixDQUFDLENBQUM7UUFFSCxrQ0FBa0M7UUFDbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxnQkFBTSxDQUM3QixJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsbUJBQW1CLGNBQWMsRUFDMUM7WUFDRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsbUJBQW1CLGNBQWM7WUFDdEQsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQ0YsQ0FBQztRQUVGLElBQUksbUNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsbUJBQW1CLGdCQUFnQixFQUFFO1lBQ3JFLFdBQVcsRUFBRSxJQUFJLDhDQUF5QixDQUN4Qyw4Q0FBOEMsRUFDOUMsU0FBUyxFQUNUO2dCQUNFLFdBQVcsRUFBRSxJQUFJO2FBQ2xCLENBQ0Y7WUFDRCxNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtZQUNsQyxZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU07WUFDakMsTUFBTSxFQUFFLGVBQWU7WUFDdkIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxMRCxzQkFrTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBDb25uZWN0aW9ucyxcbiAgSUNvbm5lY3RhYmxlLFxuICBQb3J0LFxuICBTdWJuZXRUeXBlLFxuICBWcGNcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7XG4gIEF1cm9yYVBvc3RncmVzRW5naW5lVmVyc2lvbixcbiAgQmFja3VwUHJvcHMsXG4gIENhQ2VydGlmaWNhdGUsXG4gIENsdXN0ZXJJbnN0YW5jZSxcbiAgQ3JlZGVudGlhbHMsXG4gIERhdGFiYXNlQ2x1c3RlcixcbiAgRGF0YWJhc2VDbHVzdGVyRW5naW5lLFxuICBEYXRhYmFzZVByb3h5LFxuICBJQ2x1c3RlckVuZ2luZSxcbiAgUHJveHlUYXJnZXRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7XG4gIFNlY3JldFJvdGF0aW9uLFxuICBTZWNyZXRSb3RhdGlvbkFwcGxpY2F0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuLi9pYW1cIjtcbmltcG9ydCB7IEN1c3RvbWVyTWFuYWdlZEtleSB9IGZyb20gXCIuL2ttc1wiO1xuaW1wb3J0IFNlY3JldCBmcm9tIFwiLi9zZWNyZXRcIjtcblxuaW50ZXJmYWNlIFJkc1Byb3BzIHtcbiAgdnBjOiBWcGM7XG4gIGRlZmF1bHREYXRhYmFzZU5hbWU/OiBzdHJpbmc7XG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xuICBiYWNrdXA/OiBCYWNrdXBQcm9wcztcbiAgY2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmc7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgd3JpdGVyPzogQ2x1c3Rlckluc3RhbmNlO1xuICByZWFkZXJzPzogQ2x1c3Rlckluc3RhbmNlW107XG4gIHRhZ3M6IEtleVZhbHVlO1xuICBzZWN1cml0eUdyb3VwSWRzPzogc3RyaW5nW107XG4gIGJ1aWxka2l0ZVJvbGVBcm4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJkcyBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJkc1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIERhdGFiYXNlIENyZWRlbnRpYWxzXG4gICAgY29uc3QgZGF0YWJhc2VDcmVkZW50aWFscyA9IG5ldyBTZWNyZXQoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1DcmVkZW50aWFsc2AsXG4gICAgICB7XG4gICAgICAgIHNlY3JldE5hbWU6IGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9Q3JlZGVudGlhbHNgLFxuICAgICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB1c2VybmFtZTogXCJwb3N0Z3Jlc1wiXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZXhjbHVkZVB1bmN0dWF0aW9uOiB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVTcGFjZTogZmFsc2UsXG4gICAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwicGFzc3dvcmRcIlxuICAgICAgICB9LFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgICBidWlsZGtpdGVSb2xlQXJuOiBwcm9wcy5idWlsZGtpdGVSb2xlQXJuXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEN1c3RvbWVyIE1hbmFnZWQgS2V5c1xuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9Q2x1c3RlckVuY3J5cHRpb25LZXlgLFxuICAgICAge1xuICAgICAgICBhbGlhc05hbWU6IGBjbWsvcmRzLyR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX0vZW5jcnlwdGlvbktleWAsXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcHJpbWFyeVJlYWRlckluc2lnaHRzS2V5ID0gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfVByaW1hcnlSZWFkZXJJbnNpZ2h0c0tleWAsXG4gICAgICB7XG4gICAgICAgIGFsaWFzTmFtZTogYGNtay9yZHMvJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfS9QcmltYXJ5UmVhZGVySW5zaWdodHNLZXlgLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHNlY29uZGFyeVJlYWRlckluc2lnaHRzS2V5ID0gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfVNlY29uZGFyeVJlYWRlckluc2lnaHRzS2V5YCxcbiAgICAgIHtcbiAgICAgICAgYWxpYXNOYW1lOiBgY21rL3Jkcy8ke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9L1NlY29uZGFyeVJlYWRlckluc2lnaHRzS2V5YCxcbiAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBwcmltYXJ5V3JpdGVyUGVyZm9ybWFuY2VJbnNpZ2h0c0tleSA9IG5ldyBDdXN0b21lck1hbmFnZWRLZXkoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1QcmltYXJ5V3JpdGVyUGVyZm9ybWFuY2VJbnNpZ2h0c0tleWAsXG4gICAgICB7XG4gICAgICAgIGFsaWFzTmFtZTogYGNtay9yZHMvJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfS9QcmltYXJ5V3JpdGVySW5zaWdodHNLZXlgLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGNsdXN0ZXJTZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgYCR7aWR9U2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCB0aGF0IGFsbG93cyBpbmJvdW5kIGFjY2VzcyB0byB0aGUgcG9zdGdyZXMgY2x1c3RlciBmb3IgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfWBcbiAgICB9KTtcblxuICAgIC8vVE9ETzogUmVtb3ZlIHRoaXMgbGluZSwgdGhhdCBhbGxvd3MgdGhlIHByb3h5IHRvIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlLiBSZXBsYWNlIHdpdGggc2VwZXJhdGVkIHNlY3VyaXR5IGdyb3Vwc1xuICAgIGNsdXN0ZXJTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKGNsdXN0ZXJTZWN1cml0eUdyb3VwLCBQb3J0LnRjcCg1NDMyKSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gY2x1c3RlclNlY3VyaXR5R3JvdXAuY29ubmVjdGlvbnM7XG5cbiAgICAvLyBEYXRhYmFzZSBDbHVzdGVyXG4gICAgY29uc3QgZGF0YWJhc2VDbHVzdGVyID0gbmV3IERhdGFiYXNlQ2x1c3RlcihzY29wZSwgYCR7aWR9RGF0YWJhc2VgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXG4gICAgICB9LFxuICAgICAgc2VjdXJpdHlHcm91cHM6IFtjbHVzdGVyU2VjdXJpdHlHcm91cF0sXG4gICAgICBlbmdpbmU6XG4gICAgICAgIHByb3BzLmVuZ2luZSB8fFxuICAgICAgICBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUuYXVyb3JhUG9zdGdyZXMoe1xuICAgICAgICAgIC8vVE9ETzogRG8gd2UgdXBkYXRlIHRoZXNlIHdoZW4gd2UgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uPyBPciB0cnkgdG8ga2VlcCB0aGVtIGNvbnN0YW50bHkgdXBkYXRlZD9cbiAgICAgICAgICB2ZXJzaW9uOiBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24uVkVSXzE1XzZcbiAgICAgICAgfSksXG4gICAgICBiYWNrdXA6IHByb3BzLmJhY2t1cCB8fCB7XG4gICAgICAgIHJldGVudGlvbjogRHVyYXRpb24uZGF5cygxNClcbiAgICAgIH0sXG4gICAgICBzdG9yYWdlRW5jcnlwdGVkOiB0cnVlLFxuICAgICAgc3RvcmFnZUVuY3J5cHRpb25LZXk6IGVuY3J5cHRpb25LZXkua2V5LFxuICAgICAgY2x1c3RlcklkZW50aWZpZXI6XG4gICAgICAgIHByb3BzLmNsdXN0ZXJJZGVudGlmaWVyIHx8IGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9LWNsdXN0ZXJgLFxuICAgICAgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzLmZyb21TZWNyZXQoZGF0YWJhc2VDcmVkZW50aWFscy5zZWNyZXQpLFxuICAgICAgZGVmYXVsdERhdGFiYXNlTmFtZTpcbiAgICAgICAgcHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZSB8fCBgJHtpZC5yZXBsYWNlKFwiUmRzXCIsIFwiXCIpfWAsXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCB8fCBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6XG4gICAgICAgIHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93IHx8IFwiU2F0OjEyOjMwLVNhdDoyMDozMFwiLFxuICAgICAgcG9ydDogcHJvcHMucG9ydCB8fCA1NDMyLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5TTkFQU0hPVCxcbiAgICAgIHdyaXRlcjpcbiAgICAgICAgcHJvcHMud3JpdGVyIHx8XG4gICAgICAgIENsdXN0ZXJJbnN0YW5jZS5zZXJ2ZXJsZXNzVjIoYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1Xcml0ZXJgLCB7XG4gICAgICAgICAgZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0czogdHJ1ZSxcbiAgICAgICAgICBwZXJmb3JtYW5jZUluc2lnaHRFbmNyeXB0aW9uS2V5OlxuICAgICAgICAgICAgcHJpbWFyeVdyaXRlclBlcmZvcm1hbmNlSW5zaWdodHNLZXkua2V5LFxuICAgICAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX0tcHJpbWFyeS13cml0ZXJgLFxuICAgICAgICAgIC8vVE9ETzogRG8gd2UgdXBkYXRlIHRoZXNlIHdoZW4gd2UgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uPyBPciB0cnkgdG8ga2VlcCB0aGVtIGNvbnN0YW50bHkgdXBkYXRlZD9cbiAgICAgICAgICBjYUNlcnRpZmljYXRlOiBDYUNlcnRpZmljYXRlLlJEU19DQV9SU0E0MDk2X0cxXG4gICAgICAgIH0pLFxuICAgICAgcmVhZGVyczogcHJvcHMucmVhZGVycyB8fCBbXG4gICAgICAgIENsdXN0ZXJJbnN0YW5jZS5zZXJ2ZXJsZXNzVjIoXG4gICAgICAgICAgYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1QcmltYXJ5UmVhZGVyYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZVdpdGhXcml0ZXI6IHRydWUsXG4gICAgICAgICAgICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzOiB0cnVlLFxuICAgICAgICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0RW5jcnlwdGlvbktleTogcHJpbWFyeVJlYWRlckluc2lnaHRzS2V5LmtleSxcbiAgICAgICAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX0tcHJpbWFyeS1yZWFkZXJgLFxuICAgICAgICAgICAgY2FDZXJ0aWZpY2F0ZTogQ2FDZXJ0aWZpY2F0ZS5SRFNfQ0FfUlNBNDA5Nl9HMVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgQ2x1c3Rlckluc3RhbmNlLnNlcnZlcmxlc3NWMihcbiAgICAgICAgICBgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfVNlY29uZGFyeVJlYWRlcmAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2NhbGVXaXRoV3JpdGVyOiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHM6IHRydWUsXG4gICAgICAgICAgICBwZXJmb3JtYW5jZUluc2lnaHRFbmNyeXB0aW9uS2V5OiBzZWNvbmRhcnlSZWFkZXJJbnNpZ2h0c0tleS5rZXksXG4gICAgICAgICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9LXNlY29uZGFyeS1yZWFkZXJgLFxuICAgICAgICAgICAgY2FDZXJ0aWZpY2F0ZTogQ2FDZXJ0aWZpY2F0ZS5SRFNfQ0FfUlNBNDA5Nl9HMVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YWJhc2VQcm94eSA9IG5ldyBEYXRhYmFzZVByb3h5KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9RGF0YWJhc2VQcm94eWAsXG4gICAgICB7XG4gICAgICAgIHByb3h5VGFyZ2V0OiBQcm94eVRhcmdldC5mcm9tQ2x1c3RlcihkYXRhYmFzZUNsdXN0ZXIpLFxuICAgICAgICBzZWNyZXRzOiBbZGF0YWJhc2VDcmVkZW50aWFscy5zZWNyZXRdLFxuICAgICAgICBzZWN1cml0eUdyb3VwczogW2NsdXN0ZXJTZWN1cml0eUdyb3VwXSxcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBVQkxJQ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1Qcm94eUVuZHBvaW50T3V0cHV0YCwge1xuICAgICAga2V5OiBgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfVByb3h5RW5kcG9pbnRgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1Qcm94eUVuZHBvaW50YCxcbiAgICAgIHZhbHVlOiBkYXRhYmFzZVByb3h5LmVuZHBvaW50XG4gICAgfSk7XG5cbiAgICAvLyBSb3RhdGUgdGhlIFNlY3JldCBldmVyeSAzMCBkYXlzXG4gICAgY29uc3QgbWFzdGVyU2VjcmV0ID0gbmV3IFNlY3JldChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfU1hc3RlclNlY3JldGAsXG4gICAgICB7XG4gICAgICAgIHNlY3JldE5hbWU6IGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9TWFzdGVyU2VjcmV0YCxcbiAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgfVxuICAgICk7XG5cbiAgICBuZXcgU2VjcmV0Um90YXRpb24odGhpcywgYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1TZWNyZXRSb3RhdGlvbmAsIHtcbiAgICAgIGFwcGxpY2F0aW9uOiBuZXcgU2VjcmV0Um90YXRpb25BcHBsaWNhdGlvbihcbiAgICAgICAgXCJTZWNyZXRzTWFuYWdlclJEU1Bvc3RncmVTUUxSb3RhdGlvbk11bHRpVXNlclwiLFxuICAgICAgICBcIjEuMS4zNjdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlzTXVsdGlVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBzZWNyZXQ6IGRhdGFiYXNlQ3JlZGVudGlhbHMuc2VjcmV0LFxuICAgICAgbWFzdGVyU2VjcmV0OiBtYXN0ZXJTZWNyZXQuc2VjcmV0LFxuICAgICAgdGFyZ2V0OiBkYXRhYmFzZUNsdXN0ZXIsXG4gICAgICB2cGM6IGRhdGFiYXNlQ2x1c3Rlci52cGNcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Bucket, BucketProps } from "aws-cdk-lib/aws-s3";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
export declare class S3Bucket extends Bucket {
|
|
4
|
+
constructor(scope: Construct, id: string, props?: BucketProps);
|
|
5
|
+
}
|
|
6
|
+
export declare class S3WebsiteBucket extends S3Bucket {
|
|
7
|
+
constructor(scope: Construct, id: string, props?: BucketProps);
|
|
8
|
+
}
|
|
9
|
+
export declare class S3PublicReadBucket extends S3Bucket {
|
|
10
|
+
constructor(scope: Construct, id: string, props?: BucketProps);
|
|
11
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.S3PublicReadBucket = exports.S3WebsiteBucket = exports.S3Bucket = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_s3_1 = require("aws-cdk-lib/aws-s3");
|
|
6
|
+
class S3Bucket extends aws_s3_1.Bucket {
|
|
7
|
+
constructor(scope, id, props) {
|
|
8
|
+
super(scope, id, {
|
|
9
|
+
...props,
|
|
10
|
+
autoDeleteObjects: true,
|
|
11
|
+
removalPolicy: props?.removalPolicy || aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
12
|
+
versioned: true
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.S3Bucket = S3Bucket;
|
|
17
|
+
class S3WebsiteBucket extends S3Bucket {
|
|
18
|
+
constructor(scope, id, props) {
|
|
19
|
+
super(scope, id, {
|
|
20
|
+
...props,
|
|
21
|
+
websiteErrorDocument: "error.html",
|
|
22
|
+
websiteIndexDocument: "index.html",
|
|
23
|
+
publicReadAccess: true
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.S3WebsiteBucket = S3WebsiteBucket;
|
|
28
|
+
class S3PublicReadBucket extends S3Bucket {
|
|
29
|
+
constructor(scope, id, props) {
|
|
30
|
+
super(scope, id, {
|
|
31
|
+
...props,
|
|
32
|
+
publicReadAccess: true,
|
|
33
|
+
blockPublicAccess: new aws_s3_1.BlockPublicAccess({
|
|
34
|
+
blockPublicAcls: false,
|
|
35
|
+
blockPublicPolicy: false,
|
|
36
|
+
ignorePublicAcls: false,
|
|
37
|
+
restrictPublicBuckets: false
|
|
38
|
+
})
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.S3PublicReadBucket = S3PublicReadBucket;
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9zdG9yZS9zMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBNEM7QUFDNUMsK0NBQTRFO0FBRzVFLE1BQWEsUUFBUyxTQUFRLGVBQU07SUFDbEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFtQjtRQUMzRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLElBQUksMkJBQWEsQ0FBQyxPQUFPO1lBQzVELFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVRELDRCQVNDO0FBRUQsTUFBYSxlQUFnQixTQUFRLFFBQVE7SUFDM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFtQjtRQUMzRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLG9CQUFvQixFQUFFLFlBQVk7WUFDbEMsb0JBQW9CLEVBQUUsWUFBWTtZQUNsQyxnQkFBZ0IsRUFBRSxJQUFJO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVRELDBDQVNDO0FBRUQsTUFBYSxrQkFBbUIsU0FBUSxRQUFRO0lBQzlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBbUI7UUFDM0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLGlCQUFpQixFQUFFLElBQUksMEJBQWlCLENBQUM7Z0JBQ3ZDLGVBQWUsRUFBRSxLQUFLO2dCQUN0QixpQkFBaUIsRUFBRSxLQUFLO2dCQUN4QixnQkFBZ0IsRUFBRSxLQUFLO2dCQUN2QixxQkFBcUIsRUFBRSxLQUFLO2FBQzdCLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFiRCxnREFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEJsb2NrUHVibGljQWNjZXNzLCBCdWNrZXQsIEJ1Y2tldFByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIFMzQnVja2V0IGV4dGVuZHMgQnVja2V0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBCdWNrZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzPy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIHZlcnNpb25lZDogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTM1dlYnNpdGVCdWNrZXQgZXh0ZW5kcyBTM0J1Y2tldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogQnVja2V0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgd2Vic2l0ZUVycm9yRG9jdW1lbnQ6IFwiZXJyb3IuaHRtbFwiLFxuICAgICAgd2Vic2l0ZUluZGV4RG9jdW1lbnQ6IFwiaW5kZXguaHRtbFwiLFxuICAgICAgcHVibGljUmVhZEFjY2VzczogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTM1B1YmxpY1JlYWRCdWNrZXQgZXh0ZW5kcyBTM0J1Y2tldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogQnVja2V0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgcHVibGljUmVhZEFjY2VzczogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBuZXcgQmxvY2tQdWJsaWNBY2Nlc3Moe1xuICAgICAgICBibG9ja1B1YmxpY0FjbHM6IGZhbHNlLFxuICAgICAgICBibG9ja1B1YmxpY1BvbGljeTogZmFsc2UsXG4gICAgICAgIGlnbm9yZVB1YmxpY0FjbHM6IGZhbHNlLFxuICAgICAgICByZXN0cmljdFB1YmxpY0J1Y2tldHM6IGZhbHNlXG4gICAgICB9KVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { SecretValue } from "aws-cdk-lib";
|
|
2
|
+
import { Secret as CdkSecret, SecretStringGenerator } from "aws-cdk-lib/aws-secretsmanager";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
import { StackBuilder } from "../awsStack";
|
|
5
|
+
import { KeyValue } from "../compute/ecs";
|
|
6
|
+
import { CustomerManagedKey } from "./kms";
|
|
7
|
+
interface SecretProps {
|
|
8
|
+
secretName: string;
|
|
9
|
+
secretObjectValue?: {
|
|
10
|
+
[key: string]: SecretValue;
|
|
11
|
+
};
|
|
12
|
+
secretStringValue?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
aliasName?: string;
|
|
15
|
+
generateSecretString?: SecretStringGenerator;
|
|
16
|
+
tags: KeyValue;
|
|
17
|
+
buildkiteRoleArn?: string;
|
|
18
|
+
}
|
|
19
|
+
export default class Secret extends Construct {
|
|
20
|
+
readonly secret: CdkSecret;
|
|
21
|
+
readonly secretsCustomerManagedKey: CustomerManagedKey;
|
|
22
|
+
constructor(scope: Construct, id: string, props: SecretProps);
|
|
23
|
+
static build(id: string, props: SecretProps): (sb: StackBuilder) => Construct;
|
|
24
|
+
private setupBuildkitePermissions;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
4
|
+
const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
|
|
5
|
+
const constructs_1 = require("constructs");
|
|
6
|
+
const tagResource_1 = require("../../../utils/tagResource");
|
|
7
|
+
const kms_1 = require("./kms");
|
|
8
|
+
class Secret extends constructs_1.Construct {
|
|
9
|
+
constructor(scope, id, props) {
|
|
10
|
+
super(scope, id);
|
|
11
|
+
this.secretsCustomerManagedKey = new kms_1.CustomerManagedKey(this, `${id}CustomerManagedKey`, {
|
|
12
|
+
aliasName: `cmk/${id}`,
|
|
13
|
+
tags: props.tags
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* If a secretStringValue is provided, use it to create the secret.
|
|
17
|
+
*/
|
|
18
|
+
const secretStringValue = props.secretStringValue
|
|
19
|
+
? {
|
|
20
|
+
secretStringValue: aws_cdk_lib_1.SecretValue.unsafePlainText(props.secretStringValue || "")
|
|
21
|
+
}
|
|
22
|
+
: {};
|
|
23
|
+
/**
|
|
24
|
+
* If a generateSecretString is provided, use it to create the secret.
|
|
25
|
+
* If a secretStringValue is provided, ignore the generateSecretString.
|
|
26
|
+
*/
|
|
27
|
+
const generateSecretString = !props.secretStringValue && props.generateSecretString
|
|
28
|
+
? { generateSecretString: props.generateSecretString }
|
|
29
|
+
: {};
|
|
30
|
+
// Construct the base options for CdkSecret
|
|
31
|
+
const secretOptions = {
|
|
32
|
+
secretName: props.secretName,
|
|
33
|
+
secretObjectValue: props.secretObjectValue,
|
|
34
|
+
encryptionKey: this.secretsCustomerManagedKey.key,
|
|
35
|
+
description: props.description,
|
|
36
|
+
...secretStringValue,
|
|
37
|
+
...generateSecretString
|
|
38
|
+
};
|
|
39
|
+
this.secret = new aws_secretsmanager_1.Secret(this, `${id}Secret`, secretOptions);
|
|
40
|
+
(0, tagResource_1.default)(this.secret, props.tags);
|
|
41
|
+
}
|
|
42
|
+
static build(id, props) {
|
|
43
|
+
return (sb) => {
|
|
44
|
+
const newProps = {
|
|
45
|
+
...props
|
|
46
|
+
};
|
|
47
|
+
return new this(sb.getStack(), id, newProps);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
setupBuildkitePermissions(buildkiteRole) {
|
|
51
|
+
this.secret.grantRead(buildkiteRole);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.default = Secret;
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc3RvcmUvc2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQTBDO0FBRTFDLHVFQUd3QztBQUN4QywyQ0FBdUM7QUFDdkMsNERBQXFEO0FBR3JELCtCQUEyQztBQWUzQyxNQUFxQixNQUFPLFNBQVEsc0JBQVM7SUFJM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtRQUMxRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLHdCQUFrQixDQUNyRCxJQUFJLEVBQ0osR0FBRyxFQUFFLG9CQUFvQixFQUN6QjtZQUNFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FDRixDQUFDO1FBRUY7O1dBRUc7UUFDSCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUI7WUFDL0MsQ0FBQyxDQUFDO2dCQUNFLGlCQUFpQixFQUFFLHlCQUFXLENBQUMsZUFBZSxDQUM1QyxLQUFLLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUM5QjthQUNGO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQOzs7V0FHRztRQUNILE1BQU0sb0JBQW9CLEdBQ3hCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxvQkFBb0I7WUFDcEQsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFO1lBQ3RELENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFVCwyQ0FBMkM7UUFDM0MsTUFBTSxhQUFhLEdBQUc7WUFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsYUFBYSxFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHO1lBQ2pELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixHQUFHLGlCQUFpQjtZQUNwQixHQUFHLG9CQUFvQjtTQUN4QixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLDJCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEUsSUFBQSxxQkFBVyxFQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUNWLEVBQVUsRUFDVixLQUFrQjtRQUVsQixPQUFPLENBQUMsRUFBZ0IsRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFnQjtnQkFDNUIsR0FBRyxLQUFLO2FBQ1QsQ0FBQztZQUNGLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8seUJBQXlCLENBQUMsYUFBeUI7UUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBbEVELHlCQWtFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlY3JldFZhbHVlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJR3JhbnRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIFNlY3JldCBhcyBDZGtTZWNyZXQsXG4gIFNlY3JldFN0cmluZ0dlbmVyYXRvclxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHRhZ1Jlc291cmNlIGZyb20gXCIuLi8uLi8uLi91dGlscy90YWdSZXNvdXJjZVwiO1xuaW1wb3J0IHsgU3RhY2tCdWlsZGVyIH0gZnJvbSBcIi4uL2F3c1N0YWNrXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IHsgQ3VzdG9tZXJNYW5hZ2VkS2V5IH0gZnJvbSBcIi4va21zXCI7XG5cbmludGVyZmFjZSBTZWNyZXRQcm9wcyB7XG4gIHNlY3JldE5hbWU6IHN0cmluZztcbiAgc2VjcmV0T2JqZWN0VmFsdWU/OiB7XG4gICAgW2tleTogc3RyaW5nXTogU2VjcmV0VmFsdWU7XG4gIH07XG4gIHNlY3JldFN0cmluZ1ZhbHVlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgYWxpYXNOYW1lPzogc3RyaW5nO1xuICBnZW5lcmF0ZVNlY3JldFN0cmluZz86IFNlY3JldFN0cmluZ0dlbmVyYXRvcjtcbiAgdGFnczogS2V5VmFsdWU7XG4gIGJ1aWxka2l0ZVJvbGVBcm4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlY3JldCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXQ6IENka1NlY3JldDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldHNDdXN0b21lck1hbmFnZWRLZXk6IEN1c3RvbWVyTWFuYWdlZEtleTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VjcmV0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5zZWNyZXRzQ3VzdG9tZXJNYW5hZ2VkS2V5ID0gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtpZH1DdXN0b21lck1hbmFnZWRLZXlgLFxuICAgICAge1xuICAgICAgICBhbGlhc05hbWU6IGBjbWsvJHtpZH1gLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIElmIGEgc2VjcmV0U3RyaW5nVmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBpdCB0byBjcmVhdGUgdGhlIHNlY3JldC5cbiAgICAgKi9cbiAgICBjb25zdCBzZWNyZXRTdHJpbmdWYWx1ZSA9IHByb3BzLnNlY3JldFN0cmluZ1ZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBzZWNyZXRTdHJpbmdWYWx1ZTogU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KFxuICAgICAgICAgICAgcHJvcHMuc2VjcmV0U3RyaW5nVmFsdWUgfHwgXCJcIlxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgOiB7fTtcblxuICAgIC8qKlxuICAgICAqIElmIGEgZ2VuZXJhdGVTZWNyZXRTdHJpbmcgaXMgcHJvdmlkZWQsIHVzZSBpdCB0byBjcmVhdGUgdGhlIHNlY3JldC5cbiAgICAgKiBJZiBhIHNlY3JldFN0cmluZ1ZhbHVlIGlzIHByb3ZpZGVkLCBpZ25vcmUgdGhlIGdlbmVyYXRlU2VjcmV0U3RyaW5nLlxuICAgICAqL1xuICAgIGNvbnN0IGdlbmVyYXRlU2VjcmV0U3RyaW5nID1cbiAgICAgICFwcm9wcy5zZWNyZXRTdHJpbmdWYWx1ZSAmJiBwcm9wcy5nZW5lcmF0ZVNlY3JldFN0cmluZ1xuICAgICAgICA/IHsgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IHByb3BzLmdlbmVyYXRlU2VjcmV0U3RyaW5nIH1cbiAgICAgICAgOiB7fTtcblxuICAgIC8vIENvbnN0cnVjdCB0aGUgYmFzZSBvcHRpb25zIGZvciBDZGtTZWNyZXRcbiAgICBjb25zdCBzZWNyZXRPcHRpb25zID0ge1xuICAgICAgc2VjcmV0TmFtZTogcHJvcHMuc2VjcmV0TmFtZSxcbiAgICAgIHNlY3JldE9iamVjdFZhbHVlOiBwcm9wcy5zZWNyZXRPYmplY3RWYWx1ZSxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHRoaXMuc2VjcmV0c0N1c3RvbWVyTWFuYWdlZEtleS5rZXksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAuLi5zZWNyZXRTdHJpbmdWYWx1ZSxcbiAgICAgIC4uLmdlbmVyYXRlU2VjcmV0U3RyaW5nXG4gICAgfTtcblxuICAgIHRoaXMuc2VjcmV0ID0gbmV3IENka1NlY3JldCh0aGlzLCBgJHtpZH1TZWNyZXRgLCBzZWNyZXRPcHRpb25zKTtcblxuICAgIHRhZ1Jlc291cmNlKHRoaXMuc2VjcmV0LCBwcm9wcy50YWdzKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBTZWNyZXRQcm9wc1xuICApOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld1Byb3BzOiBTZWNyZXRQcm9wcyA9IHtcbiAgICAgICAgLi4ucHJvcHNcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IHRoaXMoc2IuZ2V0U3RhY2soKSwgaWQsIG5ld1Byb3BzKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEJ1aWxka2l0ZVBlcm1pc3Npb25zKGJ1aWxka2l0ZVJvbGU6IElHcmFudGFibGUpIHtcbiAgICB0aGlzLnNlY3JldC5ncmFudFJlYWQoYnVpbGRraXRlUm9sZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -7,18 +7,13 @@ class AwsCustomResource extends customResource.AwsCustomResource {
|
|
|
7
7
|
constructor(scope, id, props) {
|
|
8
8
|
super(scope, id, {
|
|
9
9
|
...props,
|
|
10
|
-
functionName: props.functionName,
|
|
11
10
|
logRetention: aws_cdk_lib_1.aws_logs.RetentionDays.ONE_YEAR,
|
|
12
|
-
onCreate: props.onCreate,
|
|
13
|
-
onDelete: props.onDelete,
|
|
14
|
-
onUpdate: props.onUpdate,
|
|
15
11
|
policy: props.policy || customResource.AwsCustomResourcePolicy.fromSdkCalls({
|
|
16
12
|
resources: customResource.AwsCustomResourcePolicy.ANY_RESOURCE
|
|
17
13
|
}),
|
|
18
|
-
resourceType: props.resourceType
|
|
19
14
|
});
|
|
20
15
|
}
|
|
21
16
|
}
|
|
22
17
|
exports.AwsCustomResource = AwsCustomResource;
|
|
23
18
|
;
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzQ3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLCtEQUErRDtBQUcvRCxNQUFhLGlCQUFrQixTQUFRLGNBQWMsQ0FBQyxpQkFBaUI7SUFHckUsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBNEM7UUFFNUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixZQUFZLEVBQUUsc0JBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUTtZQUM3QyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDO2dCQUMxRSxTQUFTLEVBQUUsY0FBYyxDQUFDLHVCQUF1QixDQUFDLFlBQVk7YUFDL0QsQ0FBQztTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FBQztBQWZGLDhDQWVFO0FBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF3c19sb2dzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIEF3c0N1c3RvbVJlc291cmNlIGV4dGVuZHMgY3VzdG9tUmVzb3VyY2UuQXdzQ3VzdG9tUmVzb3VyY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IGN1c3RvbVJlc291cmNlLkF3c0N1c3RvbVJlc291cmNlUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcywgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5jdXN0b21fcmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlXG4gICAgICBsb2dSZXRlbnRpb246IGF3c19sb2dzLlJldGVudGlvbkRheXMuT05FX1lFQVIsXG4gICAgICBwb2xpY3k6IHByb3BzLnBvbGljeSB8fCBjdXN0b21SZXNvdXJjZS5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICByZXNvdXJjZXM6IGN1c3RvbVJlc291cmNlLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LkFOWV9SRVNPVVJDRVxuICAgICAgfSksXG4gIH0pO1xufX07XG4iXX0=
|
|
@@ -5,12 +5,9 @@ const cdk = require("aws-cdk-lib");
|
|
|
5
5
|
class CfnOutput extends cdk.CfnOutput {
|
|
6
6
|
constructor(scope, id, props) {
|
|
7
7
|
super(scope, id, {
|
|
8
|
-
...props,
|
|
9
|
-
value: props.value,
|
|
10
|
-
description: props.description,
|
|
11
|
-
exportName: props.exportName
|
|
8
|
+
...props, // https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnOutput.html
|
|
12
9
|
});
|
|
13
10
|
}
|
|
14
11
|
}
|
|
15
12
|
exports.CfnOutput = CfnOutput;
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2Nmbk91dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFHbkMsTUFBYSxTQUFVLFNBQVEsR0FBRyxDQUFDLFNBQVM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSyxFQUFFLHlFQUF5RTtTQUNwRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFORCw4QkFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBjbGFzcyBDZm5PdXRwdXQgZXh0ZW5kcyBjZGsuQ2ZuT3V0cHV0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGNkay5DZm5PdXRwdXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuQ2ZuT3V0cHV0Lmh0bWxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Stack } from "aws-cdk-lib";
|
|
2
|
+
import { Project, ProjectProps } from "aws-cdk-lib/aws-codebuild";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
import { KeyValue } from "../../../types";
|
|
5
|
+
interface CodeBuildProps extends ProjectProps {
|
|
6
|
+
tags: KeyValue;
|
|
7
|
+
}
|
|
8
|
+
export declare class CodeBuildProject extends Construct {
|
|
9
|
+
readonly project: Project;
|
|
10
|
+
constructor(scope: Construct, id: string, props: CodeBuildProps);
|
|
11
|
+
}
|
|
12
|
+
export declare class CodeBuildProjectStack extends Stack {
|
|
13
|
+
constructor(scope: Construct, id: string, props: CodeBuildProps);
|
|
14
|
+
}
|
|
15
|
+
export {};
|