@fjall/components-infrastructure 0.20.0 → 0.20.1
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/resources/aws/networking/ipamPool.d.ts +6 -0
- package/dist/lib/resources/aws/networking/ipamPool.js +45 -10
- package/dist/lib/resources/aws/utilities/awsCustomResource.js +6 -8
- package/dist/lib/resources/aws/utilities/customResource.js +2 -3
- package/dist/lib/resources/aws/utilities/customResourceProvider.js +2 -6
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +2 -1
- package/dist/lib/utils/standardTagsAspect.d.ts +42 -0
- package/dist/lib/utils/standardTagsAspect.js +50 -0
- package/package.json +5 -5
|
@@ -4,6 +4,12 @@ export interface IpamPoolProps extends StackProps {
|
|
|
4
4
|
orgAccounts: string[];
|
|
5
5
|
ipamScope?: string;
|
|
6
6
|
region: string;
|
|
7
|
+
/**
|
|
8
|
+
* The netmask length (/CIDR) each child IPAM pool should receive.
|
|
9
|
+
* Controls the size of CIDR blocks automatically allocated to VPCs from the pool.
|
|
10
|
+
* Accepted range: /16 (65,536 IPs) – /28 (16 IPs). Defaults to /20 (4,096 IPs).
|
|
11
|
+
*/
|
|
12
|
+
allocationDefaultNetmaskLength?: number;
|
|
7
13
|
}
|
|
8
14
|
interface IpamPoolStackProps extends StackProps {
|
|
9
15
|
orgAccounts: string[];
|
|
@@ -4,7 +4,6 @@ exports.IpamPoolStack = exports.IpamPool = void 0;
|
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const constructs_1 = require("constructs");
|
|
6
6
|
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
7
|
-
const getCidr_1 = require("../../../utils/getCidr");
|
|
8
7
|
const resourceShare_1 = require("../utilities/resourceShare");
|
|
9
8
|
const getAccountId_1 = require("../../../utils/getAccountId");
|
|
10
9
|
class IpamPool extends constructs_1.Construct {
|
|
@@ -15,16 +14,47 @@ class IpamPool extends constructs_1.Construct {
|
|
|
15
14
|
// Prioritise region from props, then from env
|
|
16
15
|
const region = props.region;
|
|
17
16
|
const organisationAccounts = props.orgAccounts.map((account) => account.toLowerCase());
|
|
17
|
+
// Determine the child-pool CIDR size (defaults to /20)
|
|
18
|
+
const defaultNetmaskLength = props.allocationDefaultNetmaskLength ?? 20;
|
|
19
|
+
// Basic validation – /16 to /28 inclusive are considered safe for VPC allocations
|
|
20
|
+
if (defaultNetmaskLength < 16 || defaultNetmaskLength > 28) {
|
|
21
|
+
throw new Error(`allocationDefaultNetmaskLength must be between 16 and 28 (inclusive). Received: ${defaultNetmaskLength}`);
|
|
22
|
+
}
|
|
23
|
+
// Create the top-level pools
|
|
24
|
+
const rootPool = new aws_ec2_1.CfnIPAMPool(this, "TopLevelIpamPool", {
|
|
25
|
+
description: `Root IPAM pool`,
|
|
26
|
+
addressFamily: "ipv4",
|
|
27
|
+
ipamScopeId: IpamPrivateDefaultScopeId,
|
|
28
|
+
locale: region,
|
|
29
|
+
// Explicitly provision the /8 CIDR once at the top-level
|
|
30
|
+
provisionedCidrs: [
|
|
31
|
+
{ cidr: "10.0.0.0/8" },
|
|
32
|
+
{ cidr: "172.16.0.0/12" },
|
|
33
|
+
{ cidr: "192.168.0.0/16" }
|
|
34
|
+
],
|
|
35
|
+
autoImport: true,
|
|
36
|
+
tags: [
|
|
37
|
+
{
|
|
38
|
+
key: "fjall:operations:pool",
|
|
39
|
+
value: "top-level"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
key: "fjall:costAllocation:type",
|
|
43
|
+
value: "root"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
});
|
|
47
|
+
// Create a child pool for each Organisation account
|
|
18
48
|
for (const account of organisationAccounts) {
|
|
19
|
-
const cidrBlock = new getCidr_1.default();
|
|
20
|
-
const freeCidrBlock = cidrBlock.getCidrBlock();
|
|
21
|
-
cidrBlock.updateState(freeCidrBlock, false);
|
|
22
49
|
const accountId = (0, getAccountId_1.default)(account);
|
|
23
|
-
const ipamPool = new aws_ec2_1.CfnIPAMPool(this, `${account}IpamPool
|
|
24
|
-
description: `${account} - IPAM pool - ${region}
|
|
50
|
+
const ipamPool = new aws_ec2_1.CfnIPAMPool(this, `${account}IpamPool`, {
|
|
51
|
+
description: `${account} - IPAM pool - ${region}`,
|
|
25
52
|
addressFamily: "ipv4",
|
|
26
53
|
ipamScopeId: IpamPrivateDefaultScopeId,
|
|
27
54
|
locale: region,
|
|
55
|
+
// Allocate from the root pool automatically
|
|
56
|
+
sourceIpamPoolId: rootPool.attrIpamPoolId,
|
|
57
|
+
allocationDefaultNetmaskLength: defaultNetmaskLength,
|
|
28
58
|
allocationResourceTags: [
|
|
29
59
|
{
|
|
30
60
|
key: "fjall:operations:pool",
|
|
@@ -32,11 +62,10 @@ class IpamPool extends constructs_1.Construct {
|
|
|
32
62
|
}
|
|
33
63
|
],
|
|
34
64
|
autoImport: true,
|
|
35
|
-
provisionedCidrs: [{ cidr: freeCidrBlock }],
|
|
36
65
|
tags: [
|
|
37
66
|
{
|
|
38
67
|
key: "fjall:operations:pool",
|
|
39
|
-
value:
|
|
68
|
+
value: `${accountId}`
|
|
40
69
|
},
|
|
41
70
|
{
|
|
42
71
|
key: "fjall:costAllocation:accountName",
|
|
@@ -44,10 +73,15 @@ class IpamPool extends constructs_1.Construct {
|
|
|
44
73
|
}
|
|
45
74
|
]
|
|
46
75
|
});
|
|
76
|
+
// Allocate an initial CIDR block to the child pool so that VPCs can immediately allocate
|
|
77
|
+
new aws_ec2_1.CfnIPAMPoolCidr(this, `${account}PoolCidr${defaultNetmaskLength}`, {
|
|
78
|
+
ipamPoolId: ipamPool.attrIpamPoolId,
|
|
79
|
+
netmaskLength: defaultNetmaskLength
|
|
80
|
+
});
|
|
81
|
+
// Share the pool with the target account so that VPCs can allocate
|
|
47
82
|
new resourceShare_1.ResourceShare(this, `${account}${region}IpamResourceShare`, {
|
|
48
83
|
name: `${account}IpamResourceShare.${region}`,
|
|
49
84
|
allowExternalPrincipals: false,
|
|
50
|
-
// TODO: getAccountId expects environment as argument
|
|
51
85
|
principals: [accountId],
|
|
52
86
|
resourceArns: [ipamPool.attrArn],
|
|
53
87
|
tags: [
|
|
@@ -57,6 +91,7 @@ class IpamPool extends constructs_1.Construct {
|
|
|
57
91
|
}
|
|
58
92
|
]
|
|
59
93
|
});
|
|
94
|
+
// Expose the pool ID for cross-stack usage (e.g. VPC allocations)
|
|
60
95
|
new aws_cdk_lib_1.CfnOutput(this, `IpamPoolId${accountId}`, {
|
|
61
96
|
key: `IpamPoolId${accountId}`,
|
|
62
97
|
value: ipamPool.attrIpamPoolId,
|
|
@@ -81,4 +116,4 @@ class IpamPoolStack extends aws_cdk_lib_1.Stack {
|
|
|
81
116
|
}
|
|
82
117
|
}
|
|
83
118
|
exports.IpamPoolStack = IpamPoolStack;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbVBvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL2lwYW1Qb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUErRDtBQUMvRCwyQ0FBdUM7QUFDdkMsaURBQW1FO0FBQ25FLG9EQUErQztBQUMvQyw4REFBMkQ7QUFDM0QsOERBQXVEO0FBYXZELE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBQ3JDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwwREFBMEQ7UUFDMUQsTUFBTSx5QkFBeUIsR0FDN0IsS0FBSyxDQUFDLFNBQVMsSUFBSSxnQkFBRSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2pFLDhDQUE4QztRQUM5QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTVCLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUM3RCxPQUFPLENBQUMsV0FBVyxFQUFFLENBQ3RCLENBQUM7UUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBUyxFQUFFLENBQUM7WUFDbEMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQy9DLFNBQVMsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRTVDLE1BQU0sU0FBUyxHQUFHLElBQUEsc0JBQVksRUFBQyxPQUFPLENBQUMsQ0FBQztZQUV4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFhLENBQ2hDLElBQUksRUFDSixHQUFHLE9BQU8sV0FBVyxhQUFhLEVBQUUsRUFDcEM7Z0JBQ0UsV0FBVyxFQUFFLEdBQUcsT0FBTyxrQkFBa0IsTUFBTSxNQUFNLGFBQWEsRUFBRTtnQkFDcEUsYUFBYSxFQUFFLE1BQU07Z0JBQ3JCLFdBQVcsRUFBRSx5QkFBeUI7Z0JBQ3RDLE1BQU0sRUFBRSxNQUFNO2dCQUNkLHNCQUFzQixFQUFFO29CQUN0Qjt3QkFDRSxHQUFHLEVBQUUsdUJBQXVCO3dCQUM1QixLQUFLLEVBQUUsR0FBRyxTQUFTLEVBQUU7cUJBQ3RCO2lCQUNGO2dCQUNELFVBQVUsRUFBRSxJQUFJO2dCQUNoQixnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLEVBQUU7b0JBQ0o7d0JBQ0UsR0FBRyxFQUFFLHVCQUF1Qjt3QkFDNUIsS0FBSyxFQUFFLFdBQVc7cUJBQ25CO29CQUNEO3dCQUNFLEdBQUcsRUFBRSxrQ0FBa0M7d0JBQ3ZDLEtBQUssRUFBRSxHQUFHLE9BQU8sRUFBRTtxQkFDcEI7aUJBQ0Y7YUFDRixDQUNGLENBQUM7WUFFRixJQUFJLDZCQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsT0FBTyxHQUFHLE1BQU0sbUJBQW1CLEVBQUU7Z0JBQzlELElBQUksRUFBRSxHQUFHLE9BQU8scUJBQXFCLE1BQU0sRUFBRTtnQkFDN0MsdUJBQXVCLEVBQUUsS0FBSztnQkFDOUIscURBQXFEO2dCQUNyRCxVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3ZCLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ2hDLElBQUksRUFBRTtvQkFDSjt3QkFDRSxHQUFHLEVBQUUsOEJBQThCO3dCQUNuQyxLQUFLLEVBQUUsR0FBRyxPQUFPLEVBQUU7cUJBQ3BCO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxhQUFhLFNBQVMsRUFBRSxFQUFFO2dCQUM1QyxHQUFHLEVBQUUsYUFBYSxTQUFTLEVBQUU7Z0JBQzdCLEtBQUssRUFBRSxRQUFRLENBQUMsY0FBYztnQkFDOUIsVUFBVSxFQUFFLGFBQWEsU0FBUyxFQUFFO2FBQ3JDLENBQUMsQ0FBQztZQUVILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxTQUFTLEVBQUUsRUFBRTtnQkFDN0MsR0FBRyxFQUFFLGNBQWMsU0FBUyxFQUFFO2dCQUM5QixLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQ3ZCLFVBQVUsRUFBRSxjQUFjLFNBQVMsRUFBRTthQUN0QyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBN0VELDRCQTZFQztBQUVELE1BQWEsYUFBYyxTQUFRLG1CQUFLO0lBQ3RDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzdCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBVEQsc0NBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbiwgQ2ZuT3V0cHV0LCBTdGFja1Byb3BzLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbklQQU1Qb29sIGFzIElwYW1Qb29sQ2xhc3MgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IENpZHJCbG9jayBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZ2V0Q2lkclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VTaGFyZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcmVzb3VyY2VTaGFyZVwiO1xuaW1wb3J0IGdldEFjY291bnRJZCBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZ2V0QWNjb3VudElkXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbVBvb2xQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBvcmdBY2NvdW50czogc3RyaW5nW107XG4gIGlwYW1TY29wZT86IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJcGFtUG9vbFN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgb3JnQWNjb3VudHM6IHN0cmluZ1tdO1xuICByZWdpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIElwYW1Qb29sIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1Qb29sUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gR2V0IHRoZSBkZWZhdWx0IElQQU0gc2NvcGUgSUQgZnJvbSBwcm9wcywgb3IgQ0ZOIGltcG9ydFxuICAgIGNvbnN0IElwYW1Qcml2YXRlRGVmYXVsdFNjb3BlSWQgPVxuICAgICAgcHJvcHMuaXBhbVNjb3BlIHx8IEZuLmltcG9ydFZhbHVlKFwiSXBhbVByaXZhdGVEZWZhdWx0U2NvcGVJZFwiKTtcbiAgICAvLyBQcmlvcml0aXNlIHJlZ2lvbiBmcm9tIHByb3BzLCB0aGVuIGZyb20gZW52XG4gICAgY29uc3QgcmVnaW9uID0gcHJvcHMucmVnaW9uO1xuXG4gICAgY29uc3Qgb3JnYW5pc2F0aW9uQWNjb3VudHMgPSBwcm9wcy5vcmdBY2NvdW50cy5tYXAoKGFjY291bnQpID0+XG4gICAgICBhY2NvdW50LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBhY2NvdW50IG9mIG9yZ2FuaXNhdGlvbkFjY291bnRzKSB7XG4gICAgICBjb25zdCBjaWRyQmxvY2sgPSBuZXcgQ2lkckJsb2NrKCk7XG4gICAgICBjb25zdCBmcmVlQ2lkckJsb2NrID0gY2lkckJsb2NrLmdldENpZHJCbG9jaygpO1xuICAgICAgY2lkckJsb2NrLnVwZGF0ZVN0YXRlKGZyZWVDaWRyQmxvY2ssIGZhbHNlKTtcblxuICAgICAgY29uc3QgYWNjb3VudElkID0gZ2V0QWNjb3VudElkKGFjY291bnQpO1xuXG4gICAgICBjb25zdCBpcGFtUG9vbCA9IG5ldyBJcGFtUG9vbENsYXNzKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHthY2NvdW50fUlwYW1Qb29sJHtmcmVlQ2lkckJsb2NrfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7YWNjb3VudH0gLSBJUEFNIHBvb2wgLSAke3JlZ2lvbn0gLSAke2ZyZWVDaWRyQmxvY2t9YCxcbiAgICAgICAgICBhZGRyZXNzRmFtaWx5OiBcImlwdjRcIixcbiAgICAgICAgICBpcGFtU2NvcGVJZDogSXBhbVByaXZhdGVEZWZhdWx0U2NvcGVJZCxcbiAgICAgICAgICBsb2NhbGU6IHJlZ2lvbixcbiAgICAgICAgICBhbGxvY2F0aW9uUmVzb3VyY2VUYWdzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleTogXCJmamFsbDpvcGVyYXRpb25zOnBvb2xcIixcbiAgICAgICAgICAgICAgdmFsdWU6IGAke2FjY291bnRJZH1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBhdXRvSW1wb3J0OiB0cnVlLFxuICAgICAgICAgIHByb3Zpc2lvbmVkQ2lkcnM6IFt7IGNpZHI6IGZyZWVDaWRyQmxvY2sgfV0sXG4gICAgICAgICAgdGFnczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6IFwiZmphbGw6b3BlcmF0aW9uczpwb29sXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBcInRvcC1sZXZlbFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6IFwiZmphbGw6Y29zdEFsbG9jYXRpb246YWNjb3VudE5hbWVcIixcbiAgICAgICAgICAgICAgdmFsdWU6IGAke2FjY291bnR9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgbmV3IFJlc291cmNlU2hhcmUodGhpcywgYCR7YWNjb3VudH0ke3JlZ2lvbn1JcGFtUmVzb3VyY2VTaGFyZWAsIHtcbiAgICAgICAgbmFtZTogYCR7YWNjb3VudH1JcGFtUmVzb3VyY2VTaGFyZS4ke3JlZ2lvbn1gLFxuICAgICAgICBhbGxvd0V4dGVybmFsUHJpbmNpcGFsczogZmFsc2UsXG4gICAgICAgIC8vIFRPRE86IGdldEFjY291bnRJZCBleHBlY3RzIGVudmlyb25tZW50IGFzIGFyZ3VtZW50XG4gICAgICAgIHByaW5jaXBhbHM6IFthY2NvdW50SWRdLFxuICAgICAgICByZXNvdXJjZUFybnM6IFtpcGFtUG9vbC5hdHRyQXJuXSxcbiAgICAgICAgdGFnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmamFsbDpjb3N0QWxsb2NhdGlvbjphY2NvdW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogYCR7YWNjb3VudH1gXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgSXBhbVBvb2xJZCR7YWNjb3VudElkfWAsIHtcbiAgICAgICAga2V5OiBgSXBhbVBvb2xJZCR7YWNjb3VudElkfWAsXG4gICAgICAgIHZhbHVlOiBpcGFtUG9vbC5hdHRySXBhbVBvb2xJZCxcbiAgICAgICAgZXhwb3J0TmFtZTogYElwYW1Qb29sSWQke2FjY291bnRJZH1gXG4gICAgICB9KTtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgSXBhbVBvb2xBcm4ke2FjY291bnRJZH1gLCB7XG4gICAgICAgIGtleTogYElwYW1Qb29sQXJuJHthY2NvdW50SWR9YCxcbiAgICAgICAgdmFsdWU6IGlwYW1Qb29sLmF0dHJBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6IGBJcGFtUG9vbEFybiR7YWNjb3VudElkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXBhbVBvb2xTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1Qb29sU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBuZXcgSXBhbVBvb2wodGhpcywgXCJJcGFtUG9vbFwiLCB7XG4gICAgICBvcmdBY2NvdW50czogcHJvcHMub3JnQWNjb3VudHMsXG4gICAgICByZWdpb246IHByb3BzLnJlZ2lvblxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbVBvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL2lwYW1Qb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUErRDtBQUMvRCwyQ0FBdUM7QUFDdkMsaURBRzZCO0FBQzdCLDhEQUEyRDtBQUMzRCw4REFBdUQ7QUFtQnZELE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBQ3JDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwwREFBMEQ7UUFDMUQsTUFBTSx5QkFBeUIsR0FDN0IsS0FBSyxDQUFDLFNBQVMsSUFBSSxnQkFBRSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2pFLDhDQUE4QztRQUM5QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTVCLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUM3RCxPQUFPLENBQUMsV0FBVyxFQUFFLENBQ3RCLENBQUM7UUFFRix1REFBdUQ7UUFDdkQsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsOEJBQThCLElBQUksRUFBRSxDQUFDO1FBRXhFLGtGQUFrRjtRQUNsRixJQUFJLG9CQUFvQixHQUFHLEVBQUUsSUFBSSxvQkFBb0IsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLG1GQUFtRixvQkFBb0IsRUFBRSxDQUMxRyxDQUFDO1FBQ0osQ0FBQztRQUVELDZCQUE2QjtRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFhLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQzNELFdBQVcsRUFBRSxnQkFBZ0I7WUFDN0IsYUFBYSxFQUFFLE1BQU07WUFD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Q0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFsSEQsNEJBa0hDO0FBRUQsTUFBYSxhQUFjLFNBQVEsbUJBQUs7SUFDdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDN0IsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFURCxzQ0FTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZuLCBDZm5PdXRwdXQsIFN0YWNrUHJvcHMsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQ2ZuSVBBTVBvb2wgYXMgSXBhbVBvb2xDbGFzcyxcbiAgQ2ZuSVBBTVBvb2xDaWRyXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVNoYXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9yZXNvdXJjZVNoYXJlXCI7XG5pbXBvcnQgZ2V0QWNjb3VudElkIGZyb20gXCIuLi8uLi8uLi91dGlscy9nZXRBY2NvdW50SWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJcGFtUG9vbFByb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIG9yZ0FjY291bnRzOiBzdHJpbmdbXTtcbiAgaXBhbVNjb3BlPzogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuZXRtYXNrIGxlbmd0aCAoL0NJRFIpIGVhY2ggY2hpbGQgSVBBTSBwb29sIHNob3VsZCByZWNlaXZlLlxuICAgKiBDb250cm9scyB0aGUgc2l6ZSBvZiBDSURSIGJsb2NrcyBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlZCB0byBWUENzIGZyb20gdGhlIHBvb2wuXG4gICAqIEFjY2VwdGVkIHJhbmdlOiAvMTYgKDY1LDUzNiBJUHMpIOKAkyAvMjggKDE2IElQcykuIERlZmF1bHRzIHRvIC8yMCAoNCwwOTYgSVBzKS5cbiAgICovXG4gIGFsbG9jYXRpb25EZWZhdWx0TmV0bWFza0xlbmd0aD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElwYW1Qb29sU3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBvcmdBY2NvdW50czogc3RyaW5nW107XG4gIHJlZ2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSXBhbVBvb2wgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSXBhbVBvb2xQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBHZXQgdGhlIGRlZmF1bHQgSVBBTSBzY29wZSBJRCBmcm9tIHByb3BzLCBvciBDRk4gaW1wb3J0XG4gICAgY29uc3QgSXBhbVByaXZhdGVEZWZhdWx0U2NvcGVJZCA9XG4gICAgICBwcm9wcy5pcGFtU2NvcGUgfHwgRm4uaW1wb3J0VmFsdWUoXCJJcGFtUHJpdmF0ZURlZmF1bHRTY29wZUlkXCIpO1xuICAgIC8vIFByaW9yaXRpc2UgcmVnaW9uIGZyb20gcHJvcHMsIHRoZW4gZnJvbSBlbnZcbiAgICBjb25zdCByZWdpb24gPSBwcm9wcy5yZWdpb247XG5cbiAgICBjb25zdCBvcmdhbmlzYXRpb25BY2NvdW50cyA9IHByb3BzLm9yZ0FjY291bnRzLm1hcCgoYWNjb3VudCkgPT5cbiAgICAgIGFjY291bnQudG9Mb3dlckNhc2UoKVxuICAgICk7XG5cbiAgICAvLyBEZXRlcm1pbmUgdGhlIGNoaWxkLXBvb2wgQ0lEUiBzaXplIChkZWZhdWx0cyB0byAvMjApXG4gICAgY29uc3QgZGVmYXVsdE5ldG1hc2tMZW5ndGggPSBwcm9wcy5hbGxvY2F0aW9uRGVmYXVsdE5ldG1hc2tMZW5ndGggPz8gMjA7XG5cbiAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIOKAkyAvMTYgdG8gLzI4IGluY2x1c2l2ZSBhcmUgY29uc2lkZXJlZCBzYWZlIGZvciBWUEMgYWxsb2NhdGlvbnNcbiAgICBpZiAoZGVmYXVsdE5ldG1hc2tMZW5ndGggPCAxNiB8fCBkZWZhdWx0TmV0bWFza0xlbmd0aCA+IDI4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBhbGxvY2F0aW9uRGVmYXVsdE5ldG1hc2tMZW5ndGggbXVzdCBiZSBiZXR3ZWVuIDE2IGFuZCAyOCAoaW5jbHVzaXZlKS4gUmVjZWl2ZWQ6ICR7ZGVmYXVsdE5ldG1hc2tMZW5ndGh9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHRvcC1sZXZlbCBwb29sc1xuICAgIGNvbnN0IHJvb3RQb29sID0gbmV3IElwYW1Qb29sQ2xhc3ModGhpcywgXCJUb3BMZXZlbElwYW1Qb29sXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBgUm9vdCBJUEFNIHBvb2xgLFxuICAgICAgYWRkcmVzc0ZhbWlseTogXCJpcHY0XCIsXG4gICAgICBpcGFtU2NvcGVJZDogSXBhbVByaXZhdGVEZWZhdWx0U2NvcGVJZCxcbiAgICAgIGxvY2FsZTogcmVnaW9uLFxuICAgICAgLy8gRXhwbGljaXRseSBwcm92aXNpb24gdGhlIC84IENJRFIgb25jZSBhdCB0aGUgdG9wLWxldmVsXG4gICAgICBwcm92aXNpb25lZENpZHJzOiBbXG4gICAgICAgIHsgY2lkcjogXCIxMC4wLjAuMC84XCIgfSxcbiAgICAgICAgeyBjaWRyOiBcIjE3Mi4xNi4wLjAvMTJcIiB9LFxuICAgICAgICB7IGNpZHI6IFwiMTkyLjE2OC4wLjAvMTZcIiB9XG4gICAgICBdLFxuICAgICAgYXV0b0ltcG9ydDogdHJ1ZSxcbiAgICAgIHRhZ3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIGtleTogXCJmamFsbDpvcGVyYXRpb25zOnBvb2xcIixcbiAgICAgICAgICB2YWx1ZTogXCJ0b3AtbGV2ZWxcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnR5cGVcIixcbiAgICAgICAgICB2YWx1ZTogXCJyb290XCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgY2hpbGQgcG9vbCBmb3IgZWFjaCBPcmdhbmlzYXRpb24gYWNjb3VudFxuICAgIGZvciAoY29uc3QgYWNjb3VudCBvZiBvcmdhbmlzYXRpb25BY2NvdW50cykge1xuICAgICAgY29uc3QgYWNjb3VudElkID0gZ2V0QWNjb3VudElkKGFjY291bnQpO1xuXG4gICAgICBjb25zdCBpcGFtUG9vbCA9IG5ldyBJcGFtUG9vbENsYXNzKHRoaXMsIGAke2FjY291bnR9SXBhbVBvb2xgLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHthY2NvdW50fSAtIElQQU0gcG9vbCAtICR7cmVnaW9ufWAsXG4gICAgICAgIGFkZHJlc3NGYW1pbHk6IFwiaXB2NFwiLFxuICAgICAgICBpcGFtU2NvcGVJZDogSXBhbVByaXZhdGVEZWZhdWx0U2NvcGVJZCxcbiAgICAgICAgbG9jYWxlOiByZWdpb24sXG4gICAgICAgIC8vIEFsbG9jYXRlIGZyb20gdGhlIHJvb3QgcG9vbCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIHNvdXJjZUlwYW1Qb29sSWQ6IHJvb3RQb29sLmF0dHJJcGFtUG9vbElkLFxuICAgICAgICBhbGxvY2F0aW9uRGVmYXVsdE5ldG1hc2tMZW5ndGg6IGRlZmF1bHROZXRtYXNrTGVuZ3RoLFxuICAgICAgICBhbGxvY2F0aW9uUmVzb3VyY2VUYWdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZqYWxsOm9wZXJhdGlvbnM6cG9vbFwiLFxuICAgICAgICAgICAgdmFsdWU6IGAke2FjY291bnRJZH1gXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBhdXRvSW1wb3J0OiB0cnVlLFxuICAgICAgICB0YWdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZqYWxsOm9wZXJhdGlvbnM6cG9vbFwiLFxuICAgICAgICAgICAgdmFsdWU6IGAke2FjY291bnRJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZmphbGw6Y29zdEFsbG9jYXRpb246YWNjb3VudE5hbWVcIixcbiAgICAgICAgICAgIHZhbHVlOiBgJHthY2NvdW50fWBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBBbGxvY2F0ZSBhbiBpbml0aWFsIENJRFIgYmxvY2sgdG8gdGhlIGNoaWxkIHBvb2wgc28gdGhhdCBWUENzIGNhbiBpbW1lZGlhdGVseSBhbGxvY2F0ZVxuICAgICAgbmV3IENmbklQQU1Qb29sQ2lkcih0aGlzLCBgJHthY2NvdW50fVBvb2xDaWRyJHtkZWZhdWx0TmV0bWFza0xlbmd0aH1gLCB7XG4gICAgICAgIGlwYW1Qb29sSWQ6IGlwYW1Qb29sLmF0dHJJcGFtUG9vbElkLFxuICAgICAgICBuZXRtYXNrTGVuZ3RoOiBkZWZhdWx0TmV0bWFza0xlbmd0aFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNoYXJlIHRoZSBwb29sIHdpdGggdGhlIHRhcmdldCBhY2NvdW50IHNvIHRoYXQgVlBDcyBjYW4gYWxsb2NhdGVcbiAgICAgIG5ldyBSZXNvdXJjZVNoYXJlKHRoaXMsIGAke2FjY291bnR9JHtyZWdpb259SXBhbVJlc291cmNlU2hhcmVgLCB7XG4gICAgICAgIG5hbWU6IGAke2FjY291bnR9SXBhbVJlc291cmNlU2hhcmUuJHtyZWdpb259YCxcbiAgICAgICAgYWxsb3dFeHRlcm5hbFByaW5jaXBhbHM6IGZhbHNlLFxuICAgICAgICBwcmluY2lwYWxzOiBbYWNjb3VudElkXSxcbiAgICAgICAgcmVzb3VyY2VBcm5zOiBbaXBhbVBvb2wuYXR0ckFybl0sXG4gICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZmphbGw6Y29zdEFsbG9jYXRpb246YWNjb3VudFwiLFxuICAgICAgICAgICAgdmFsdWU6IGAke2FjY291bnR9YFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEV4cG9zZSB0aGUgcG9vbCBJRCBmb3IgY3Jvc3Mtc3RhY2sgdXNhZ2UgKGUuZy4gVlBDIGFsbG9jYXRpb25zKVxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgSXBhbVBvb2xJZCR7YWNjb3VudElkfWAsIHtcbiAgICAgICAga2V5OiBgSXBhbVBvb2xJZCR7YWNjb3VudElkfWAsXG4gICAgICAgIHZhbHVlOiBpcGFtUG9vbC5hdHRySXBhbVBvb2xJZCxcbiAgICAgICAgZXhwb3J0TmFtZTogYElwYW1Qb29sSWQke2FjY291bnRJZH1gXG4gICAgICB9KTtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgSXBhbVBvb2xBcm4ke2FjY291bnRJZH1gLCB7XG4gICAgICAgIGtleTogYElwYW1Qb29sQXJuJHthY2NvdW50SWR9YCxcbiAgICAgICAgdmFsdWU6IGlwYW1Qb29sLmF0dHJBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6IGBJcGFtUG9vbEFybiR7YWNjb3VudElkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXBhbVBvb2xTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1Qb29sU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBuZXcgSXBhbVBvb2wodGhpcywgXCJJcGFtUG9vbFwiLCB7XG4gICAgICBvcmdBY2NvdW50czogcHJvcHMub3JnQWNjb3VudHMsXG4gICAgICByZWdpb246IHByb3BzLnJlZ2lvblxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AwsCustomResource = void 0;
|
|
4
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
4
|
const customResource = require("aws-cdk-lib/custom-resources");
|
|
6
5
|
class AwsCustomResource extends customResource.AwsCustomResource {
|
|
7
6
|
constructor(scope, id, props) {
|
|
8
7
|
super(scope, id, {
|
|
9
|
-
...props,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
...props,
|
|
9
|
+
policy: props.policy ||
|
|
10
|
+
customResource.AwsCustomResourcePolicy.fromSdkCalls({
|
|
11
|
+
resources: customResource.AwsCustomResourcePolicy.ANY_RESOURCE
|
|
12
|
+
})
|
|
14
13
|
});
|
|
15
14
|
}
|
|
16
15
|
}
|
|
17
16
|
exports.AwsCustomResource = AwsCustomResource;
|
|
18
|
-
;
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzQ3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLCtEQUErRDtBQUcvRCxNQUFhLGlCQUFrQixTQUFRLGNBQWMsQ0FBQyxpQkFBaUI7SUFHckUsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBNEM7UUFFNUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUssRUFBRSw2RkFBNkY7WUFDdkcsWUFBWSxFQUFFLHNCQUFRLENBQUMsYUFBYSxDQUFDLFFBQVE7WUFDN0MsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQztnQkFDMUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZO2FBQy9ELENBQUM7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQUM7QUFmRiw4Q0FlRTtBQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NfbG9ncyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2UgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBjbGFzcyBBd3NDdXN0b21SZXNvdXJjZSBleHRlbmRzIGN1c3RvbVJlc291cmNlLkF3c0N1c3RvbVJlc291cmNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBjdXN0b21SZXNvdXJjZS5Bd3NDdXN0b21SZXNvdXJjZVByb3BzXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuY3VzdG9tX3Jlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVxuICAgICAgbG9nUmV0ZW50aW9uOiBhd3NfbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9ZRUFSLFxuICAgICAgcG9saWN5OiBwcm9wcy5wb2xpY3kgfHwgY3VzdG9tUmVzb3VyY2UuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVNka0NhbGxzKHtcbiAgICAgICAgcmVzb3VyY2VzOiBjdXN0b21SZXNvdXJjZS5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5BTllfUkVTT1VSQ0VcbiAgICAgIH0pLFxuICB9KTtcbn19O1xuIl19
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzQ3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0RBQStEO0FBRy9ELE1BQWEsaUJBQWtCLFNBQVEsY0FBYyxDQUFDLGlCQUFpQjtJQUdyRSxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUE0QztRQUU1QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLE1BQU0sRUFDSixLQUFLLENBQUMsTUFBTTtnQkFDWixjQUFjLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDO29CQUNsRCxTQUFTLEVBQUUsY0FBYyxDQUFDLHVCQUF1QixDQUFDLFlBQVk7aUJBQy9ELENBQUM7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFqQkQsOENBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2UgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBjbGFzcyBBd3NDdXN0b21SZXNvdXJjZSBleHRlbmRzIGN1c3RvbVJlc291cmNlLkF3c0N1c3RvbVJlc291cmNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBjdXN0b21SZXNvdXJjZS5Bd3NDdXN0b21SZXNvdXJjZVByb3BzXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBwb2xpY3k6XG4gICAgICAgIHByb3BzLnBvbGljeSB8fFxuICAgICAgICBjdXN0b21SZXNvdXJjZS5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICAgIHJlc291cmNlczogY3VzdG9tUmVzb3VyY2UuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuQU5ZX1JFU09VUkNFXG4gICAgICAgIH0pXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -18,8 +18,7 @@ class CustomResource extends constructs_1.Construct {
|
|
|
18
18
|
inlinePolicy: props.inlinePolicy
|
|
19
19
|
});
|
|
20
20
|
const provider = new custom_resources_1.Provider(this, `${id}Provider`, {
|
|
21
|
-
onEventHandler: lambdaFunction
|
|
22
|
-
logRetention: aws_cdk_lib_1.aws_logs.RetentionDays.ONE_YEAR
|
|
21
|
+
onEventHandler: lambdaFunction
|
|
23
22
|
});
|
|
24
23
|
const resource = new aws_cdk_lib_1.CustomResource(this, `${id}Resource`, {
|
|
25
24
|
serviceToken: provider.serviceToken,
|
|
@@ -29,4 +28,4 @@ class CustomResource extends constructs_1.Construct {
|
|
|
29
28
|
}
|
|
30
29
|
}
|
|
31
30
|
exports.CustomResource = CustomResource;
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTZFO0FBQzdFLG1FQUF3RDtBQUV4RCx1REFBdUQ7QUFDdkQsMkNBQXVDO0FBRXZDLDhDQUFzRDtBQWV0RCxNQUFhLGNBQWUsU0FBUSxzQkFBUztJQUczQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxjQUFjLEdBQUcsSUFBSSwwQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtZQUNoRSxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDO1lBQ3hELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVTtZQUN4QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxTQUFTO1lBQzVELGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxJQUFJLEdBQUcsRUFBRSx5QkFBeUI7WUFDeEUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1NBQ2pDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLElBQUksMkJBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRTtZQUNuRCxjQUFjLEVBQUUsY0FBYztTQUMvQixDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7WUFDekQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ25DLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtTQUM3QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekQsQ0FBQztDQUNGO0FBMUJELHdDQTBCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlIGFzIGN1c3RvbVJlc291cmNlLCBBc3NldE9wdGlvbnMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IFBvbGljeURvY3VtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvZGUsIFJ1bnRpbWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgU2luZ2xldG9uRnVuY3Rpb24gfSBmcm9tIFwiLi4vY29tcHV0ZS9sYW1iZGFcIjtcblxuaW50ZXJmYWNlIEN1c3RvbVJlc291cmNlUHJvcHMge1xuICBydW50aW1lOiBSdW50aW1lO1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhbWJkYURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpbmxpbmVQb2xpY3k6IHtcbiAgICBbbmFtZTogc3RyaW5nXTogUG9saWN5RG9jdW1lbnQ7XG4gIH07XG4gIHByb3BlcnRpZXM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nOyAvLyBVc2VkIHRvIGJlIGBba2V5OiBzdHJpbmddOiBhbnlgLCB0aGlzIGNvdWxkIGJyZWFrXG4gIH07XG4gIGNvZGVQYXRoOiBzdHJpbmc7XG4gIGFzc2V0T3B0aW9ucz86IEFzc2V0T3B0aW9ucztcbn1cbmV4cG9ydCBjbGFzcyBDdXN0b21SZXNvdXJjZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDdXN0b21SZXNvdXJjZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gbmV3IFNpbmdsZXRvbkZ1bmN0aW9uKHRoaXMsIGAke2lkfUxhbWJkYWAsIHtcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHByb3BzLmNvZGVQYXRoLCBwcm9wcy5hc3NldE9wdGlvbnMpLFxuICAgICAgaGFuZGxlcjogYCR7aWR9LmhhbmRsZXJgLFxuICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSxcbiAgICAgIGxhbWJkYURlc2NyaXB0aW9uOiBwcm9wcy5sYW1iZGFEZXNjcmlwdGlvbiB8fCBgJHtpZH0gbGFtYmRhYCxcbiAgICAgIHJvbGVEZXNjcmlwdGlvbjogcHJvcHMucm9sZURlc2NyaXB0aW9uIHx8IGAke2lkfSBjdXN0b20gcmVzb3VyY2UgbGFtYmRhYCxcbiAgICAgIGlubGluZVBvbGljeTogcHJvcHMuaW5saW5lUG9saWN5XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCBgJHtpZH1Qcm92aWRlcmAsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBsYW1iZGFGdW5jdGlvblxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgY3VzdG9tUmVzb3VyY2UodGhpcywgYCR7aWR9UmVzb3VyY2VgLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHByb3BzLnByb3BlcnRpZXNcbiAgICB9KTtcblxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNvdXJjZS5nZXRBdHQoXCJSZXNwb25zZVwiKS50b1N0cmluZygpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CustomResourceProvider = void 0;
|
|
4
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
4
|
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
|
|
6
5
|
class CustomResourceProvider extends custom_resources_1.Provider {
|
|
7
6
|
constructor(scope, id, props) {
|
|
8
|
-
super(scope, id,
|
|
9
|
-
...props, // https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CustomResourceProvider.html
|
|
10
|
-
logRetention: aws_cdk_lib_1.aws_logs.RetentionDays.ONE_YEAR,
|
|
11
|
-
});
|
|
7
|
+
super(scope, id, props);
|
|
12
8
|
}
|
|
13
9
|
}
|
|
14
10
|
exports.CustomResourceProvider = CustomResourceProvider;
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2VQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9jdXN0b21SZXNvdXJjZVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1FQUF1RTtBQUd2RSxNQUFhLHNCQUF1QixTQUFRLDJCQUFRO0lBQ2xELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBSkQsd0RBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciwgUHJvdmlkZXJQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgY2xhc3MgQ3VzdG9tUmVzb3VyY2VQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgfVxufVxuIl19
|
package/dist/lib/utils/index.js
CHANGED
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./getConfig"), exports);
|
|
18
|
-
|
|
18
|
+
__exportStar(require("./standardTagsAspect"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QjtBQUM1Qix1REFBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9nZXRDb25maWdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YW5kYXJkVGFnc0FzcGVjdFwiO1xuIl19
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { IAspect } from "aws-cdk-lib";
|
|
2
|
+
import { IConstruct } from "constructs";
|
|
3
|
+
/**
|
|
4
|
+
* Aspect to enforce a standard set of tags on every tag-capable resource in a construct tree.
|
|
5
|
+
*
|
|
6
|
+
* Usage – attach once near the root of your CDK app (or to an individual stack):
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { App, Aspects } from "aws-cdk-lib";
|
|
9
|
+
* import { StandardTagsAspect } from "./utils";
|
|
10
|
+
*
|
|
11
|
+
* const app = new App();
|
|
12
|
+
*
|
|
13
|
+
* // Define the required tags
|
|
14
|
+
* const tags = {
|
|
15
|
+
* "fjall:costAllocation:environment": "production",
|
|
16
|
+
* "fjall:costAllocation:owner": "engineering"
|
|
17
|
+
* };
|
|
18
|
+
*
|
|
19
|
+
* // Add the aspect – CDK will invoke it for every construct during synthesis
|
|
20
|
+
* Aspects.of(app).add(new StandardTagsAspect(tags));
|
|
21
|
+
*
|
|
22
|
+
* // define stacks/constructs after the aspect is attached
|
|
23
|
+
* new MyStack(app, "MyStack");
|
|
24
|
+
*
|
|
25
|
+
* app.synth();
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* How it works:
|
|
29
|
+
* 1. CDK traverses every construct and calls `visit(node)`.
|
|
30
|
+
* 2. For each required tag the aspect adds it to the construct via `Tags.of(node).add()`.
|
|
31
|
+
* 3. Constructs that don't support tagging are silently ignored.
|
|
32
|
+
* 4. The resulting CloudFormation template contains the enforced tags on all resources.
|
|
33
|
+
*
|
|
34
|
+
* If a tag already exists on a construct, CDK de-duplicates by key so no duplication occurs.
|
|
35
|
+
*/
|
|
36
|
+
export declare class StandardTagsAspect implements IAspect {
|
|
37
|
+
private readonly requiredTags;
|
|
38
|
+
constructor(requiredTags: {
|
|
39
|
+
[key: string]: string;
|
|
40
|
+
});
|
|
41
|
+
visit(node: IConstruct): void;
|
|
42
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StandardTagsAspect = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
/**
|
|
6
|
+
* Aspect to enforce a standard set of tags on every tag-capable resource in a construct tree.
|
|
7
|
+
*
|
|
8
|
+
* Usage – attach once near the root of your CDK app (or to an individual stack):
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { App, Aspects } from "aws-cdk-lib";
|
|
11
|
+
* import { StandardTagsAspect } from "./utils";
|
|
12
|
+
*
|
|
13
|
+
* const app = new App();
|
|
14
|
+
*
|
|
15
|
+
* // Define the required tags
|
|
16
|
+
* const tags = {
|
|
17
|
+
* "fjall:costAllocation:environment": "production",
|
|
18
|
+
* "fjall:costAllocation:owner": "engineering"
|
|
19
|
+
* };
|
|
20
|
+
*
|
|
21
|
+
* // Add the aspect – CDK will invoke it for every construct during synthesis
|
|
22
|
+
* Aspects.of(app).add(new StandardTagsAspect(tags));
|
|
23
|
+
*
|
|
24
|
+
* // define stacks/constructs after the aspect is attached
|
|
25
|
+
* new MyStack(app, "MyStack");
|
|
26
|
+
*
|
|
27
|
+
* app.synth();
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* How it works:
|
|
31
|
+
* 1. CDK traverses every construct and calls `visit(node)`.
|
|
32
|
+
* 2. For each required tag the aspect adds it to the construct via `Tags.of(node).add()`.
|
|
33
|
+
* 3. Constructs that don't support tagging are silently ignored.
|
|
34
|
+
* 4. The resulting CloudFormation template contains the enforced tags on all resources.
|
|
35
|
+
*
|
|
36
|
+
* If a tag already exists on a construct, CDK de-duplicates by key so no duplication occurs.
|
|
37
|
+
*/
|
|
38
|
+
class StandardTagsAspect {
|
|
39
|
+
constructor(requiredTags) {
|
|
40
|
+
this.requiredTags = requiredTags;
|
|
41
|
+
}
|
|
42
|
+
visit(node) {
|
|
43
|
+
// Only attempt to tag constructs that support tagging
|
|
44
|
+
for (const [key, value] of Object.entries(this.requiredTags)) {
|
|
45
|
+
aws_cdk_lib_1.Tags.of(node).add(key, value);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.StandardTagsAspect = StandardTagsAspect;
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBNEM7QUFHNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBQ0gsTUFBYSxrQkFBa0I7SUFHN0IsWUFBWSxZQUF1QztRQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQWdCO1FBQ3BCLHNEQUFzRDtRQUN0RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM3RCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFiRCxnREFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElBc3BlY3QsIFRhZ3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFzcGVjdCB0byBlbmZvcmNlIGEgc3RhbmRhcmQgc2V0IG9mIHRhZ3Mgb24gZXZlcnkgdGFnLWNhcGFibGUgcmVzb3VyY2UgaW4gYSBjb25zdHJ1Y3QgdHJlZS5cbiAqXG4gKiBVc2FnZSDigJMgYXR0YWNoIG9uY2UgbmVhciB0aGUgcm9vdCBvZiB5b3VyIENESyBhcHAgKG9yIHRvIGFuIGluZGl2aWR1YWwgc3RhY2spOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IEFwcCwgQXNwZWN0cyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuICogaW1wb3J0IHsgU3RhbmRhcmRUYWdzQXNwZWN0IH0gZnJvbSBcIi4vdXRpbHNcIjtcbiAqXG4gKiBjb25zdCBhcHAgPSBuZXcgQXBwKCk7XG4gKlxuICogLy8gRGVmaW5lIHRoZSByZXF1aXJlZCB0YWdzXG4gKiBjb25zdCB0YWdzID0ge1xuICogICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IFwicHJvZHVjdGlvblwiLFxuICogICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IFwiZW5naW5lZXJpbmdcIlxuICogfTtcbiAqXG4gKiAvLyBBZGQgdGhlIGFzcGVjdCDigJMgQ0RLIHdpbGwgaW52b2tlIGl0IGZvciBldmVyeSBjb25zdHJ1Y3QgZHVyaW5nIHN5bnRoZXNpc1xuICogQXNwZWN0cy5vZihhcHApLmFkZChuZXcgU3RhbmRhcmRUYWdzQXNwZWN0KHRhZ3MpKTtcbiAqXG4gKiAvLyBkZWZpbmUgc3RhY2tzL2NvbnN0cnVjdHMgYWZ0ZXIgdGhlIGFzcGVjdCBpcyBhdHRhY2hlZFxuICogbmV3IE15U3RhY2soYXBwLCBcIk15U3RhY2tcIik7XG4gKlxuICogYXBwLnN5bnRoKCk7XG4gKiBgYGBcbiAqXG4gKiBIb3cgaXQgd29ya3M6XG4gKiAgIDEuIENESyB0cmF2ZXJzZXMgZXZlcnkgY29uc3RydWN0IGFuZCBjYWxscyBgdmlzaXQobm9kZSlgLlxuICogICAyLiBGb3IgZWFjaCByZXF1aXJlZCB0YWcgdGhlIGFzcGVjdCBhZGRzIGl0IHRvIHRoZSBjb25zdHJ1Y3QgdmlhIGBUYWdzLm9mKG5vZGUpLmFkZCgpYC5cbiAqICAgMy4gQ29uc3RydWN0cyB0aGF0IGRvbid0IHN1cHBvcnQgdGFnZ2luZyBhcmUgc2lsZW50bHkgaWdub3JlZC5cbiAqICAgNC4gVGhlIHJlc3VsdGluZyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSBjb250YWlucyB0aGUgZW5mb3JjZWQgdGFncyBvbiBhbGwgcmVzb3VyY2VzLlxuICpcbiAqIElmIGEgdGFnIGFscmVhZHkgZXhpc3RzIG9uIGEgY29uc3RydWN0LCBDREsgZGUtZHVwbGljYXRlcyBieSBrZXkgc28gbm8gZHVwbGljYXRpb24gb2NjdXJzLlxuICovXG5leHBvcnQgY2xhc3MgU3RhbmRhcmRUYWdzQXNwZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWlyZWRUYWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVpcmVkVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMucmVxdWlyZWRUYWdzID0gcmVxdWlyZWRUYWdzO1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIE9ubHkgYXR0ZW1wdCB0byB0YWcgY29uc3RydWN0cyB0aGF0IHN1cHBvcnQgdGFnZ2luZ1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVxdWlyZWRUYWdzKSkge1xuICAgICAgVGFncy5vZihub2RlKS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/components-infrastructure",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.1",
|
|
4
4
|
"bin": {
|
|
5
5
|
"infrastructure": "bin/infrastructure.js"
|
|
6
6
|
},
|
|
@@ -35,10 +35,10 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@aws-sdk/client-cost-explorer": "^3.717.0",
|
|
37
37
|
"@aws-sdk/client-organizations": "^3.716.0",
|
|
38
|
-
"@fjall/util": "^0.20.
|
|
38
|
+
"@fjall/util": "^0.20.1",
|
|
39
39
|
"@pepperize/cdk-organizations": "^0.7.135",
|
|
40
|
-
"aws-cdk": "^2.
|
|
41
|
-
"aws-cdk-lib": "^2.
|
|
40
|
+
"aws-cdk": "^2.204.0",
|
|
41
|
+
"aws-cdk-lib": "^2.204.0",
|
|
42
42
|
"aws-lambda": "^1.0.7",
|
|
43
43
|
"cdk-time-sleep": "^1.0.0",
|
|
44
44
|
"constructs": "^10.0.0",
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"overrides": {
|
|
49
49
|
"@smithy/core": "2.5.5"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "ad9483a84d0dc3707a65c7daf9d1531282bdf995"
|
|
52
52
|
}
|