@fjall/components-infrastructure 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
export declare enum FeatureSet {
|
|
3
|
+
ALL = "ALL",
|
|
4
|
+
CONSOLIDATED_BILLING = "CONSOLIDATED_BILLING"
|
|
5
|
+
}
|
|
6
|
+
export declare enum PolicyType {
|
|
7
|
+
SERVICE_CONTROL_POLICY = "SERVICE_CONTROL_POLICY",
|
|
8
|
+
TAG_POLICY = "TAG_POLICY",
|
|
9
|
+
BACKUP_POLICY = "BACKUP_POLICY",
|
|
10
|
+
AISERVICES_OPT_OUT_POLICY = "AISERVICES_OPT_OUT_POLICY"
|
|
11
|
+
}
|
|
12
|
+
interface OrganizationProps {
|
|
13
|
+
readonly featureSet?: FeatureSet;
|
|
14
|
+
}
|
|
15
|
+
export declare class Root extends Construct {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
constructor(scope: Construct, id: string, rootId: string);
|
|
18
|
+
}
|
|
19
|
+
export declare class Organization extends Construct {
|
|
20
|
+
readonly organizationId: string;
|
|
21
|
+
readonly rootId: string;
|
|
22
|
+
readonly root: Root;
|
|
23
|
+
constructor(scope: Construct, id: string, props?: OrganizationProps);
|
|
24
|
+
enableAwsServiceAccess(servicePrincipal: string): void;
|
|
25
|
+
enablePolicyType(policyType: PolicyType): void;
|
|
26
|
+
}
|
|
27
|
+
interface OrganizationalUnitProps {
|
|
28
|
+
readonly organizationalUnitName: string;
|
|
29
|
+
readonly parent: Root | OrganizationalUnit;
|
|
30
|
+
readonly importOnDuplicate?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare class OrganizationalUnit extends Construct {
|
|
33
|
+
readonly ouId: string;
|
|
34
|
+
constructor(scope: Construct, id: string, props: OrganizationalUnitProps);
|
|
35
|
+
}
|
|
36
|
+
interface AccountProps {
|
|
37
|
+
readonly accountName: string;
|
|
38
|
+
readonly email: string;
|
|
39
|
+
readonly parent: OrganizationalUnit | Root;
|
|
40
|
+
readonly importOnDuplicate?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export declare class Account extends Construct {
|
|
43
|
+
readonly accountId: string;
|
|
44
|
+
readonly accountArn: string;
|
|
45
|
+
constructor(scope: Construct, id: string, props: AccountProps);
|
|
46
|
+
}
|
|
47
|
+
declare const _default: {
|
|
48
|
+
Account: typeof Account;
|
|
49
|
+
Organization: typeof Organization;
|
|
50
|
+
OrganizationalUnit: typeof OrganizationalUnit;
|
|
51
|
+
FeatureSet: typeof FeatureSet;
|
|
52
|
+
PolicyType: typeof PolicyType;
|
|
53
|
+
};
|
|
54
|
+
export default _default;
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Account = exports.OrganizationalUnit = exports.Organization = exports.Root = exports.PolicyType = exports.FeatureSet = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
+
const cr = require("aws-cdk-lib/custom-resources");
|
|
7
|
+
const constructs_1 = require("constructs");
|
|
8
|
+
const awsCustomResource_1 = require("../utilities/awsCustomResource");
|
|
9
|
+
// Feature sets supported by AWS Organizations
|
|
10
|
+
var FeatureSet;
|
|
11
|
+
(function (FeatureSet) {
|
|
12
|
+
FeatureSet["ALL"] = "ALL";
|
|
13
|
+
FeatureSet["CONSOLIDATED_BILLING"] = "CONSOLIDATED_BILLING";
|
|
14
|
+
})(FeatureSet || (exports.FeatureSet = FeatureSet = {}));
|
|
15
|
+
// Policy types supported by AWS Organizations
|
|
16
|
+
var PolicyType;
|
|
17
|
+
(function (PolicyType) {
|
|
18
|
+
PolicyType["SERVICE_CONTROL_POLICY"] = "SERVICE_CONTROL_POLICY";
|
|
19
|
+
PolicyType["TAG_POLICY"] = "TAG_POLICY";
|
|
20
|
+
PolicyType["BACKUP_POLICY"] = "BACKUP_POLICY";
|
|
21
|
+
PolicyType["AISERVICES_OPT_OUT_POLICY"] = "AISERVICES_OPT_OUT_POLICY";
|
|
22
|
+
})(PolicyType || (exports.PolicyType = PolicyType = {}));
|
|
23
|
+
class Root extends constructs_1.Construct {
|
|
24
|
+
constructor(scope, id, rootId) {
|
|
25
|
+
super(scope, id);
|
|
26
|
+
this.id = rootId;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.Root = Root;
|
|
30
|
+
class Organization extends constructs_1.Construct {
|
|
31
|
+
constructor(scope, id, props) {
|
|
32
|
+
super(scope, id);
|
|
33
|
+
const org = new awsCustomResource_1.AwsCustomResource(this, "Organization", {
|
|
34
|
+
functionName: `organization${id}`,
|
|
35
|
+
onCreate: {
|
|
36
|
+
service: "organizations",
|
|
37
|
+
action: "CreateOrganization",
|
|
38
|
+
parameters: {
|
|
39
|
+
FeatureSet: props?.featureSet || FeatureSet.ALL
|
|
40
|
+
},
|
|
41
|
+
physicalResourceId: cr.PhysicalResourceId.of("OrganizationResource"),
|
|
42
|
+
// Ignore error if the organization already exists
|
|
43
|
+
ignoreErrorCodesMatching: "AlreadyInOrganization|DuplicateOrganizationException"
|
|
44
|
+
},
|
|
45
|
+
onUpdate: {
|
|
46
|
+
service: "organizations",
|
|
47
|
+
action: "DescribeOrganization",
|
|
48
|
+
physicalResourceId: cr.PhysicalResourceId.of("OrganizationResource")
|
|
49
|
+
},
|
|
50
|
+
// Leaving organization deletion unmanaged; no-op to keep stack deletions simple
|
|
51
|
+
policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
|
|
52
|
+
resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE
|
|
53
|
+
})
|
|
54
|
+
});
|
|
55
|
+
this.organizationId = org.getResponseField("Organization.Id");
|
|
56
|
+
this.rootId = org.getResponseField("Organization.Roots.0.Id");
|
|
57
|
+
this.root = new Root(this, "Root", this.rootId);
|
|
58
|
+
}
|
|
59
|
+
enableAwsServiceAccess(servicePrincipal) {
|
|
60
|
+
new awsCustomResource_1.AwsCustomResource(this, `EnableServiceAccess${servicePrincipal}`, {
|
|
61
|
+
functionName: `enableServiceAccess${servicePrincipal.replace(/\./g, "")}`,
|
|
62
|
+
onCreate: {
|
|
63
|
+
service: "organizations",
|
|
64
|
+
action: "EnableAWSServiceAccess",
|
|
65
|
+
parameters: { ServicePrincipal: servicePrincipal },
|
|
66
|
+
physicalResourceId: cr.PhysicalResourceId.of(`EnableServiceAccess-${servicePrincipal}`)
|
|
67
|
+
},
|
|
68
|
+
policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
|
|
69
|
+
resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE
|
|
70
|
+
})
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
enablePolicyType(policyType) {
|
|
74
|
+
new awsCustomResource_1.AwsCustomResource(this, `EnablePolicyType${policyType}`, {
|
|
75
|
+
functionName: `enablePolicyType${policyType}`,
|
|
76
|
+
onCreate: {
|
|
77
|
+
service: "organizations",
|
|
78
|
+
action: "EnablePolicyType",
|
|
79
|
+
parameters: {
|
|
80
|
+
RootId: this.rootId,
|
|
81
|
+
PolicyType: policyType
|
|
82
|
+
},
|
|
83
|
+
physicalResourceId: cr.PhysicalResourceId.of(`EnablePolicyType-${policyType}`)
|
|
84
|
+
},
|
|
85
|
+
policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
|
|
86
|
+
resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE
|
|
87
|
+
})
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.Organization = Organization;
|
|
92
|
+
class OrganizationalUnit extends constructs_1.Construct {
|
|
93
|
+
constructor(scope, id, props) {
|
|
94
|
+
super(scope, id);
|
|
95
|
+
const parentId = props.parent.ouId || props.parent.id;
|
|
96
|
+
const createOu = new awsCustomResource_1.AwsCustomResource(this, "OrganizationalUnit", {
|
|
97
|
+
functionName: `organizationalUnit${id}`,
|
|
98
|
+
onCreate: {
|
|
99
|
+
service: "organizations",
|
|
100
|
+
action: "CreateOrganizationalUnit",
|
|
101
|
+
parameters: {
|
|
102
|
+
Name: props.organizationalUnitName,
|
|
103
|
+
ParentId: parentId
|
|
104
|
+
},
|
|
105
|
+
physicalResourceId: cr.PhysicalResourceId.of(`OU-${props.organizationalUnitName}`),
|
|
106
|
+
// Allow importing existing OU by ignoring duplicate error
|
|
107
|
+
ignoreErrorCodesMatching: props.importOnDuplicate
|
|
108
|
+
? "DuplicateOrganizationalUnitException"
|
|
109
|
+
: undefined
|
|
110
|
+
},
|
|
111
|
+
policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
|
|
112
|
+
resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE
|
|
113
|
+
})
|
|
114
|
+
});
|
|
115
|
+
this.ouId = createOu.getResponseField("OrganizationalUnit.Id");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.OrganizationalUnit = OrganizationalUnit;
|
|
119
|
+
class Account extends constructs_1.Construct {
|
|
120
|
+
constructor(scope, id, props) {
|
|
121
|
+
super(scope, id);
|
|
122
|
+
const physicalId = `Account-${props.accountName}`;
|
|
123
|
+
// Initiate account creation
|
|
124
|
+
const createAccount = new awsCustomResource_1.AwsCustomResource(this, "CreateAccount", {
|
|
125
|
+
functionName: `createAccount${id}`,
|
|
126
|
+
onCreate: {
|
|
127
|
+
service: "organizations",
|
|
128
|
+
action: "CreateAccount",
|
|
129
|
+
parameters: {
|
|
130
|
+
AccountName: props.accountName,
|
|
131
|
+
Email: props.email
|
|
132
|
+
},
|
|
133
|
+
physicalResourceId: cr.PhysicalResourceId.of(physicalId),
|
|
134
|
+
ignoreErrorCodesMatching: props.importOnDuplicate
|
|
135
|
+
? "DuplicateAccountException"
|
|
136
|
+
: undefined
|
|
137
|
+
},
|
|
138
|
+
policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
|
|
139
|
+
resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE
|
|
140
|
+
})
|
|
141
|
+
});
|
|
142
|
+
const requestId = createAccount.getResponseField("CreateAccountStatus.Id");
|
|
143
|
+
// Poll for completion and retrieve the new account Id
|
|
144
|
+
const describeStatus = new awsCustomResource_1.AwsCustomResource(this, "DescribeAccountStatus", {
|
|
145
|
+
functionName: `describeAccountStatus${id}`,
|
|
146
|
+
onCreate: {
|
|
147
|
+
service: "organizations",
|
|
148
|
+
action: "DescribeCreateAccountStatus",
|
|
149
|
+
parameters: {
|
|
150
|
+
CreateAccountRequestId: requestId
|
|
151
|
+
},
|
|
152
|
+
physicalResourceId: cr.PhysicalResourceId.of(`${physicalId}-status`)
|
|
153
|
+
},
|
|
154
|
+
policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
|
|
155
|
+
resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE
|
|
156
|
+
})
|
|
157
|
+
});
|
|
158
|
+
this.accountId = describeStatus.getResponseField("CreateAccountStatus.AccountId");
|
|
159
|
+
// If the desired parent is not the root, move the account once it's created.
|
|
160
|
+
const destinationParentId = props.parent.ouId || props.parent.id;
|
|
161
|
+
if (destinationParentId) {
|
|
162
|
+
new awsCustomResource_1.AwsCustomResource(this, "MoveAccount", {
|
|
163
|
+
functionName: `moveAccount${id}`,
|
|
164
|
+
onCreate: {
|
|
165
|
+
service: "organizations",
|
|
166
|
+
action: "MoveAccount",
|
|
167
|
+
parameters: {
|
|
168
|
+
AccountId: this.accountId,
|
|
169
|
+
SourceParentId: props.parent.rootId ||
|
|
170
|
+
props.parent.parentId ||
|
|
171
|
+
"r-root", // attempt to move from root
|
|
172
|
+
DestinationParentId: destinationParentId
|
|
173
|
+
},
|
|
174
|
+
physicalResourceId: cr.PhysicalResourceId.of(`Move-${physicalId}`),
|
|
175
|
+
// Ignore if it's already in correct OU
|
|
176
|
+
ignoreErrorCodesMatching: "AccountAlreadyExistsException|DuplicateAccountException|ChildNotFoundException"
|
|
177
|
+
},
|
|
178
|
+
policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
|
|
179
|
+
resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE
|
|
180
|
+
})
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// Compute account ARN lazily (structure: arn:aws:organizations::<management_account_id>:account/<org_id>/<account_id>)
|
|
184
|
+
const managementAccount = aws_cdk_lib_1.Stack.of(this).account;
|
|
185
|
+
this.accountArn = `arn:aws:organizations::${managementAccount}:account/*/${this.accountId}`;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.Account = Account;
|
|
189
|
+
exports.default = {
|
|
190
|
+
Account,
|
|
191
|
+
Organization,
|
|
192
|
+
OrganizationalUnit,
|
|
193
|
+
FeatureSet,
|
|
194
|
+
PolicyType
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9vcmdhbml6YXRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFzRDtBQUN0RCw2Q0FBb0M7QUFDcEMsbURBQW1EO0FBQ25ELDJDQUF1QztBQUN2QyxzRUFBbUU7QUFFbkUsOENBQThDO0FBQzlDLElBQVksVUFHWDtBQUhELFdBQVksVUFBVTtJQUNwQix5QkFBVyxDQUFBO0lBQ1gsMkRBQTZDLENBQUE7QUFDL0MsQ0FBQyxFQUhXLFVBQVUsMEJBQVYsVUFBVSxRQUdyQjtBQUVELDhDQUE4QztBQUM5QyxJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsK0RBQWlELENBQUE7SUFDakQsdUNBQXlCLENBQUE7SUFDekIsNkNBQStCLENBQUE7SUFDL0IscUVBQXVELENBQUE7QUFDekQsQ0FBQyxFQUxXLFVBQVUsMEJBQVYsVUFBVSxRQUtyQjtBQU1ELE1BQWEsSUFBSyxTQUFRLHNCQUFTO0lBR2pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsTUFBYztRQUN0RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQVBELG9CQU9DO0FBRUQsTUFBYSxZQUFhLFNBQVEsc0JBQVM7SUFLekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sR0FBRyxHQUFHLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUN0RCxZQUFZLEVBQUUsZUFBZSxFQUFFLEVBQUU7WUFDakMsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixNQUFNLEVBQUUsb0JBQW9CO2dC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O0lBQ2IsT0FBTztJQUNQLFlBQVk7SUFDWixrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLFVBQVU7Q0FDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY3IgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcblxuLy8gRmVhdHVyZSBzZXRzIHN1cHBvcnRlZCBieSBBV1MgT3JnYW5pemF0aW9uc1xuZXhwb3J0IGVudW0gRmVhdHVyZVNldCB7XG4gIEFMTCA9IFwiQUxMXCIsXG4gIENPTlNPTElEQVRFRF9CSUxMSU5HID0gXCJDT05TT0xJREFURURfQklMTElOR1wiXG59XG5cbi8vIFBvbGljeSB0eXBlcyBzdXBwb3J0ZWQgYnkgQVdTIE9yZ2FuaXphdGlvbnNcbmV4cG9ydCBlbnVtIFBvbGljeVR5cGUge1xuICBTRVJWSUNFX0NPTlRST0xfUE9MSUNZID0gXCJTRVJWSUNFX0NPTlRST0xfUE9MSUNZXCIsXG4gIFRBR19QT0xJQ1kgPSBcIlRBR19QT0xJQ1lcIixcbiAgQkFDS1VQX1BPTElDWSA9IFwiQkFDS1VQX1BPTElDWVwiLFxuICBBSVNFUlZJQ0VTX09QVF9PVVRfUE9MSUNZID0gXCJBSVNFUlZJQ0VTX09QVF9PVVRfUE9MSUNZXCJcbn1cblxuaW50ZXJmYWNlIE9yZ2FuaXphdGlvblByb3BzIHtcbiAgcmVhZG9ubHkgZmVhdHVyZVNldD86IEZlYXR1cmVTZXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBSb290IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcm9vdElkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuaWQgPSByb290SWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBvcmdhbml6YXRpb25JZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm9vdElkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByb290OiBSb290O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogT3JnYW5pemF0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgb3JnID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwiT3JnYW5pemF0aW9uXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYG9yZ2FuaXphdGlvbiR7aWR9YCxcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwib3JnYW5pemF0aW9uc1wiLFxuICAgICAgICBhY3Rpb246IFwiQ3JlYXRlT3JnYW5pemF0aW9uXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBGZWF0dXJlU2V0OiBwcm9wcz8uZmVhdHVyZVNldCB8fCBGZWF0dXJlU2V0LkFMTFxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGNyLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcIk9yZ2FuaXphdGlvblJlc291cmNlXCIpLFxuICAgICAgICAvLyBJZ25vcmUgZXJyb3IgaWYgdGhlIG9yZ2FuaXphdGlvbiBhbHJlYWR5IGV4aXN0c1xuICAgICAgICBpZ25vcmVFcnJvckNvZGVzTWF0Y2hpbmc6XG4gICAgICAgICAgXCJBbHJlYWR5SW5Pcmdhbml6YXRpb258RHVwbGljYXRlT3JnYW5pemF0aW9uRXhjZXB0aW9uXCJcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIm9yZ2FuaXphdGlvbnNcIixcbiAgICAgICAgYWN0aW9uOiBcIkRlc2NyaWJlT3JnYW5pemF0aW9uXCIsXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3IuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFwiT3JnYW5pemF0aW9uUmVzb3VyY2VcIilcbiAgICAgIH0sXG4gICAgICAvLyBMZWF2aW5nIG9yZ2FuaXphdGlvbiBkZWxldGlvbiB1bm1hbmFnZWQ7IG5vLW9wIHRvIGtlZXAgc3RhY2sgZGVsZXRpb25zIHNpbXBsZVxuICAgICAgcG9saWN5OiBjci5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICByZXNvdXJjZXM6IGNyLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LkFOWV9SRVNPVVJDRVxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSBvcmcuZ2V0UmVzcG9uc2VGaWVsZChcIk9yZ2FuaXphdGlvbi5JZFwiKTtcbiAgICB0aGlzLnJvb3RJZCA9IG9yZy5nZXRSZXNwb25zZUZpZWxkKFwiT3JnYW5pemF0aW9uLlJvb3RzLjAuSWRcIik7XG4gICAgdGhpcy5yb290ID0gbmV3IFJvb3QodGhpcywgXCJSb290XCIsIHRoaXMucm9vdElkKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVBd3NTZXJ2aWNlQWNjZXNzKHNlcnZpY2VQcmluY2lwYWw6IHN0cmluZykge1xuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBgRW5hYmxlU2VydmljZUFjY2VzcyR7c2VydmljZVByaW5jaXBhbH1gLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IGBlbmFibGVTZXJ2aWNlQWNjZXNzJHtzZXJ2aWNlUHJpbmNpcGFsLnJlcGxhY2UoL1xcLi9nLCBcIlwiKX1gLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJvcmdhbml6YXRpb25zXCIsXG4gICAgICAgIGFjdGlvbjogXCJFbmFibGVBV1NTZXJ2aWNlQWNjZXNzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHsgU2VydmljZVByaW5jaXBhbDogc2VydmljZVByaW5jaXBhbCB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGNyLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBgRW5hYmxlU2VydmljZUFjY2Vzcy0ke3NlcnZpY2VQcmluY2lwYWx9YFxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcG9saWN5OiBjci5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICByZXNvdXJjZXM6IGNyLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LkFOWV9SRVNPVVJDRVxuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVQb2xpY3lUeXBlKHBvbGljeVR5cGU6IFBvbGljeVR5cGUpIHtcbiAgICBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgYEVuYWJsZVBvbGljeVR5cGUke3BvbGljeVR5cGV9YCwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBgZW5hYmxlUG9saWN5VHlwZSR7cG9saWN5VHlwZX1gLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJvcmdhbml6YXRpb25zXCIsXG4gICAgICAgIGFjdGlvbjogXCJFbmFibGVQb2xpY3lUeXBlXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBSb290SWQ6IHRoaXMucm9vdElkLFxuICAgICAgICAgIFBvbGljeVR5cGU6IHBvbGljeVR5cGVcbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjci5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgYEVuYWJsZVBvbGljeVR5cGUtJHtwb2xpY3lUeXBlfWBcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHBvbGljeTogY3IuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVNka0NhbGxzKHtcbiAgICAgICAgcmVzb3VyY2VzOiBjci5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5BTllfUkVTT1VSQ0VcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIE9yZ2FuaXphdGlvbmFsVW5pdFByb3BzIHtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uYWxVbml0TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwYXJlbnQ6IFJvb3QgfCBPcmdhbml6YXRpb25hbFVuaXQ7XG4gIHJlYWRvbmx5IGltcG9ydE9uRHVwbGljYXRlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvbmFsVW5pdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBvdUlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE9yZ2FuaXphdGlvbmFsVW5pdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHBhcmVudElkID0gKHByb3BzLnBhcmVudCBhcyBhbnkpLm91SWQgfHwgKHByb3BzLnBhcmVudCBhcyBhbnkpLmlkO1xuXG4gICAgY29uc3QgY3JlYXRlT3UgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJPcmdhbml6YXRpb25hbFVuaXRcIiwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBgb3JnYW5pemF0aW9uYWxVbml0JHtpZH1gLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJvcmdhbml6YXRpb25zXCIsXG4gICAgICAgIGFjdGlvbjogXCJDcmVhdGVPcmdhbml6YXRpb25hbFVuaXRcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIE5hbWU6IHByb3BzLm9yZ2FuaXphdGlvbmFsVW5pdE5hbWUsXG4gICAgICAgICAgUGFyZW50SWQ6IHBhcmVudElkXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3IuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIGBPVS0ke3Byb3BzLm9yZ2FuaXphdGlvbmFsVW5pdE5hbWV9YFxuICAgICAgICApLFxuICAgICAgICAvLyBBbGxvdyBpbXBvcnRpbmcgZXhpc3RpbmcgT1UgYnkgaWdub3JpbmcgZHVwbGljYXRlIGVycm9yXG4gICAgICAgIGlnbm9yZUVycm9yQ29kZXNNYXRjaGluZzogcHJvcHMuaW1wb3J0T25EdXBsaWNhdGVcbiAgICAgICAgICA/IFwiRHVwbGljYXRlT3JnYW5pemF0aW9uYWxVbml0RXhjZXB0aW9uXCJcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHBvbGljeTogY3IuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVNka0NhbGxzKHtcbiAgICAgICAgcmVzb3VyY2VzOiBjci5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5BTllfUkVTT1VSQ0VcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICB0aGlzLm91SWQgPSBjcmVhdGVPdS5nZXRSZXNwb25zZUZpZWxkKFwiT3JnYW5pemF0aW9uYWxVbml0LklkXCIpO1xuICB9XG59XG5cbmludGVyZmFjZSBBY2NvdW50UHJvcHMge1xuICByZWFkb25seSBhY2NvdW50TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBlbWFpbDogc3RyaW5nO1xuICByZWFkb25seSBwYXJlbnQ6IE9yZ2FuaXphdGlvbmFsVW5pdCB8IFJvb3Q7XG4gIHJlYWRvbmx5IGltcG9ydE9uRHVwbGljYXRlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEFjY291bnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgYWNjb3VudElkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBhY2NvdW50QXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFjY291bnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBwaHlzaWNhbElkID0gYEFjY291bnQtJHtwcm9wcy5hY2NvdW50TmFtZX1gO1xuXG4gICAgLy8gSW5pdGlhdGUgYWNjb3VudCBjcmVhdGlvblxuICAgIGNvbnN0IGNyZWF0ZUFjY291bnQgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJDcmVhdGVBY2NvdW50XCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYGNyZWF0ZUFjY291bnQke2lkfWAsXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIm9yZ2FuaXphdGlvbnNcIixcbiAgICAgICAgYWN0aW9uOiBcIkNyZWF0ZUFjY291bnRcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEFjY291bnROYW1lOiBwcm9wcy5hY2NvdW50TmFtZSxcbiAgICAgICAgICBFbWFpbDogcHJvcHMuZW1haWxcbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjci5QaHlzaWNhbFJlc291cmNlSWQub2YocGh5c2ljYWxJZCksXG4gICAgICAgIGlnbm9yZUVycm9yQ29kZXNNYXRjaGluZzogcHJvcHMuaW1wb3J0T25EdXBsaWNhdGVcbiAgICAgICAgICA/IFwiRHVwbGljYXRlQWNjb3VudEV4Y2VwdGlvblwiXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBwb2xpY3k6IGNyLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TZGtDYWxscyh7XG4gICAgICAgIHJlc291cmNlczogY3IuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuQU5ZX1JFU09VUkNFXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdElkID0gY3JlYXRlQWNjb3VudC5nZXRSZXNwb25zZUZpZWxkKFwiQ3JlYXRlQWNjb3VudFN0YXR1cy5JZFwiKTtcblxuICAgIC8vIFBvbGwgZm9yIGNvbXBsZXRpb24gYW5kIHJldHJpZXZlIHRoZSBuZXcgYWNjb3VudCBJZFxuICAgIGNvbnN0IGRlc2NyaWJlU3RhdHVzID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKFxuICAgICAgdGhpcyxcbiAgICAgIFwiRGVzY3JpYmVBY2NvdW50U3RhdHVzXCIsXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogYGRlc2NyaWJlQWNjb3VudFN0YXR1cyR7aWR9YCxcbiAgICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgICBzZXJ2aWNlOiBcIm9yZ2FuaXphdGlvbnNcIixcbiAgICAgICAgICBhY3Rpb246IFwiRGVzY3JpYmVDcmVhdGVBY2NvdW50U3RhdHVzXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQ3JlYXRlQWNjb3VudFJlcXVlc3RJZDogcmVxdWVzdElkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGNyLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihgJHtwaHlzaWNhbElkfS1zdGF0dXNgKVxuICAgICAgICB9LFxuICAgICAgICBwb2xpY3k6IGNyLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TZGtDYWxscyh7XG4gICAgICAgICAgcmVzb3VyY2VzOiBjci5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5BTllfUkVTT1VSQ0VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5hY2NvdW50SWQgPSBkZXNjcmliZVN0YXR1cy5nZXRSZXNwb25zZUZpZWxkKFxuICAgICAgXCJDcmVhdGVBY2NvdW50U3RhdHVzLkFjY291bnRJZFwiXG4gICAgKTtcblxuICAgIC8vIElmIHRoZSBkZXNpcmVkIHBhcmVudCBpcyBub3QgdGhlIHJvb3QsIG1vdmUgdGhlIGFjY291bnQgb25jZSBpdCdzIGNyZWF0ZWQuXG4gICAgY29uc3QgZGVzdGluYXRpb25QYXJlbnRJZCA9XG4gICAgICAocHJvcHMucGFyZW50IGFzIGFueSkub3VJZCB8fCAocHJvcHMucGFyZW50IGFzIGFueSkuaWQ7XG5cbiAgICBpZiAoZGVzdGluYXRpb25QYXJlbnRJZCkge1xuICAgICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwiTW92ZUFjY291bnRcIiwge1xuICAgICAgICBmdW5jdGlvbk5hbWU6IGBtb3ZlQWNjb3VudCR7aWR9YCxcbiAgICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgICBzZXJ2aWNlOiBcIm9yZ2FuaXphdGlvbnNcIixcbiAgICAgICAgICBhY3Rpb246IFwiTW92ZUFjY291bnRcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBBY2NvdW50SWQ6IHRoaXMuYWNjb3VudElkLFxuICAgICAgICAgICAgU291cmNlUGFyZW50SWQ6XG4gICAgICAgICAgICAgIChwcm9wcy5wYXJlbnQgYXMgYW55KS5yb290SWQgfHxcbiAgICAgICAgICAgICAgKHByb3BzLnBhcmVudCBhcyBhbnkpLnBhcmVudElkIHx8XG4gICAgICAgICAgICAgIFwici1yb290XCIsIC8vIGF0dGVtcHQgdG8gbW92ZSBmcm9tIHJvb3RcbiAgICAgICAgICAgIERlc3RpbmF0aW9uUGFyZW50SWQ6IGRlc3RpbmF0aW9uUGFyZW50SWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3IuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKGBNb3ZlLSR7cGh5c2ljYWxJZH1gKSxcbiAgICAgICAgICAvLyBJZ25vcmUgaWYgaXQncyBhbHJlYWR5IGluIGNvcnJlY3QgT1VcbiAgICAgICAgICBpZ25vcmVFcnJvckNvZGVzTWF0Y2hpbmc6XG4gICAgICAgICAgICBcIkFjY291bnRBbHJlYWR5RXhpc3RzRXhjZXB0aW9ufER1cGxpY2F0ZUFjY291bnRFeGNlcHRpb258Q2hpbGROb3RGb3VuZEV4Y2VwdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIHBvbGljeTogY3IuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVNka0NhbGxzKHtcbiAgICAgICAgICByZXNvdXJjZXM6IGNyLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LkFOWV9SRVNPVVJDRVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBhY2NvdW50IEFSTiBsYXppbHkgKHN0cnVjdHVyZTogYXJuOmF3czpvcmdhbml6YXRpb25zOjo8bWFuYWdlbWVudF9hY2NvdW50X2lkPjphY2NvdW50LzxvcmdfaWQ+LzxhY2NvdW50X2lkPilcbiAgICBjb25zdCBtYW5hZ2VtZW50QWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgdGhpcy5hY2NvdW50QXJuID0gYGFybjphd3M6b3JnYW5pemF0aW9uczo6JHttYW5hZ2VtZW50QWNjb3VudH06YWNjb3VudC8qLyR7dGhpcy5hY2NvdW50SWR9YDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEFjY291bnQsXG4gIE9yZ2FuaXphdGlvbixcbiAgT3JnYW5pemF0aW9uYWxVbml0LFxuICBGZWF0dXJlU2V0LFxuICBQb2xpY3lUeXBlXG59O1xuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/components-infrastructure",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"bin": {
|
|
5
5
|
"infrastructure": "bin/infrastructure.js"
|
|
6
6
|
},
|
|
@@ -35,7 +35,7 @@
|
|
|
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.
|
|
38
|
+
"@fjall/util": "^0.18.0",
|
|
39
39
|
"@pepperize/cdk-organizations": "^0.7.135",
|
|
40
40
|
"aws-cdk": "^2.146.0",
|
|
41
41
|
"aws-cdk-lib": "^2.146.0",
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"overrides": {
|
|
49
49
|
"@smithy/core": "2.5.5"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "6ddb4c96cb503fa33ab11753e4bda2e94b7ae885"
|
|
52
52
|
}
|