@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.
Files changed (218) hide show
  1. package/dist/lib/app.d.ts +2 -1
  2. package/dist/lib/app.js +4 -2
  3. package/dist/lib/config/aws/accountId.d.ts +6 -0
  4. package/dist/lib/config/aws/accountId.js +33 -0
  5. package/dist/lib/config/aws/cloudTrail.d.ts +10 -0
  6. package/dist/lib/config/aws/cloudTrail.js +22 -0
  7. package/dist/lib/config/aws/costAllocationTags.d.ts +4 -0
  8. package/dist/lib/config/aws/costAllocationTags.js +59 -0
  9. package/dist/lib/config/aws/delegateHostedZoneRole.d.ts +5 -0
  10. package/dist/lib/config/aws/delegateHostedZoneRole.js +77 -0
  11. package/dist/lib/config/aws/ecrDefaultImage.d.ts +11 -0
  12. package/dist/lib/config/aws/ecrDefaultImage.js +127 -0
  13. package/dist/lib/config/aws/eventBus.d.ts +7 -0
  14. package/dist/lib/config/aws/eventBus.js +24 -0
  15. package/dist/lib/config/aws/identityCenter.d.ts +13 -0
  16. package/dist/lib/config/aws/identityCenter.js +102 -0
  17. package/dist/lib/config/aws/identityCenterUser.d.ts +16 -0
  18. package/dist/lib/config/aws/identityCenterUser.js +125 -0
  19. package/dist/lib/config/aws/index.d.ts +12 -0
  20. package/dist/lib/config/aws/index.js +29 -0
  21. package/dist/lib/config/aws/ipam.d.ts +5 -0
  22. package/dist/lib/config/aws/ipam.js +48 -0
  23. package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +8 -0
  24. package/dist/lib/config/aws/ipamDelegateAdmin.js +58 -0
  25. package/dist/lib/config/aws/ipamPool.d.ts +5 -0
  26. package/dist/lib/config/aws/ipamPool.js +56 -0
  27. package/dist/lib/config/aws/ipamPoolId.d.ts +9 -0
  28. package/dist/lib/config/aws/ipamPoolId.js +36 -0
  29. package/dist/lib/config/aws/{base/identityCenter.d.ts → ipamPoolResourceShare.d.ts} +2 -2
  30. package/dist/lib/config/aws/ipamPoolResourceShare.js +42 -0
  31. package/dist/lib/config/aws/organisation.d.ts +28 -0
  32. package/dist/lib/config/aws/organisation.js +142 -0
  33. package/dist/lib/config/aws/organisationId.d.ts +7 -0
  34. package/dist/lib/config/aws/organisationId.js +46 -0
  35. package/dist/lib/config/aws/{base/ipamPool.d.ts → ramEnableSharing.d.ts} +1 -1
  36. package/dist/lib/config/aws/ramEnableSharing.js +35 -0
  37. package/dist/lib/config/aws/ramSharing.d.ts +4 -0
  38. package/dist/lib/config/aws/ramSharing.js +35 -0
  39. package/dist/lib/config/aws/{base/ipam.d.ts → users.d.ts} +1 -1
  40. package/dist/lib/config/aws/users.js +126 -0
  41. package/dist/lib/config/fjall/hostedZones/fjall.io.d.ts +10 -0
  42. package/dist/lib/config/fjall/hostedZones/fjall.io.js +25 -0
  43. package/dist/lib/index.d.ts +3 -0
  44. package/dist/lib/index.js +4 -1
  45. package/dist/lib/patterns/aws/basicApp.d.ts +47 -0
  46. package/dist/lib/patterns/aws/basicApp.js +90 -0
  47. package/dist/lib/patterns/aws/buildkite.d.ts +50 -0
  48. package/dist/lib/patterns/aws/buildkite.js +346 -0
  49. package/dist/lib/patterns/aws/freeTierApp.d.ts +46 -0
  50. package/dist/lib/patterns/aws/freeTierApp.js +95 -0
  51. package/dist/lib/patterns/aws/hostedZone.d.ts +11 -0
  52. package/dist/lib/patterns/aws/hostedZone.js +73 -0
  53. package/dist/lib/patterns/aws/index.d.ts +5 -2
  54. package/dist/lib/patterns/aws/index.js +6 -3
  55. package/dist/lib/patterns/aws/managedAccount.d.ts +13 -0
  56. package/dist/lib/patterns/aws/managedAccount.js +39 -0
  57. package/dist/lib/patterns/aws/managedOrganisation.d.ts +19 -0
  58. package/dist/lib/patterns/aws/managedOrganisation.js +45 -0
  59. package/dist/lib/patterns/aws/managedPlatform.d.ts +13 -0
  60. package/dist/lib/patterns/aws/managedPlatform.js +22 -0
  61. package/dist/lib/patterns/aws/spotInstanceApp.d.ts +46 -0
  62. package/dist/lib/patterns/aws/spotInstanceApp.js +95 -0
  63. package/dist/lib/patterns/aws/subdomainHostedZone.d.ts +9 -0
  64. package/dist/lib/patterns/aws/subdomainHostedZone.js +39 -0
  65. package/dist/lib/resources/aws/awsStack.d.ts +5 -0
  66. package/dist/lib/resources/aws/awsStack.js +11 -1
  67. package/dist/lib/resources/aws/compute/ecs.d.ts +74 -0
  68. package/dist/lib/resources/aws/compute/ecs.js +269 -0
  69. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +76 -0
  70. package/dist/lib/resources/aws/compute/ecsFreeTier.js +352 -0
  71. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +76 -0
  72. package/dist/lib/resources/aws/compute/ecsSpot.js +334 -0
  73. package/dist/lib/resources/aws/compute/index.d.ts +2 -0
  74. package/dist/lib/resources/aws/compute/index.js +19 -0
  75. package/dist/lib/resources/aws/compute/lambda.d.ts +13 -6
  76. package/dist/lib/resources/aws/compute/lambda.js +23 -4
  77. package/dist/lib/resources/aws/constant/ecr.js +4 -3
  78. package/dist/lib/resources/aws/constant/vpc.d.ts +10 -2
  79. package/dist/lib/resources/aws/constant/vpc.js +18 -8
  80. package/dist/lib/resources/aws/database/database.d.ts +16 -0
  81. package/dist/lib/resources/aws/database/database.js +30 -0
  82. package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +17 -0
  83. package/dist/lib/resources/aws/database/databaseFreeTier.js +31 -0
  84. package/dist/lib/resources/aws/database/databaseInstance.d.ts +17 -0
  85. package/dist/lib/resources/aws/database/databaseInstance.js +32 -0
  86. package/dist/lib/resources/aws/database/index.d.ts +2 -0
  87. package/dist/lib/resources/aws/database/index.js +19 -0
  88. package/dist/lib/resources/aws/database/rds.d.ts +23 -0
  89. package/dist/lib/resources/aws/database/rds.js +130 -0
  90. package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +36 -0
  91. package/dist/lib/resources/aws/database/rdsFreeTier.js +80 -0
  92. package/dist/lib/resources/aws/database/rdsInstance.d.ts +42 -0
  93. package/dist/lib/resources/aws/database/rdsInstance.js +173 -0
  94. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +13 -0
  95. package/dist/lib/resources/aws/iam/identityCenter/group.js +14 -0
  96. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +13 -0
  97. package/dist/lib/resources/aws/iam/index.d.ts +5 -0
  98. package/dist/lib/resources/aws/iam/index.js +22 -0
  99. package/dist/lib/resources/aws/iam/instanceProfile.d.ts +5 -0
  100. package/dist/lib/resources/aws/iam/instanceProfile.js +13 -0
  101. package/dist/lib/resources/aws/iam/managedPolicy.d.ts +5 -0
  102. package/dist/lib/resources/aws/iam/managedPolicy.js +14 -0
  103. package/dist/lib/resources/aws/iam/policy.d.ts +5 -0
  104. package/dist/lib/resources/aws/iam/policy.js +13 -0
  105. package/dist/lib/resources/aws/iam/role.js +2 -7
  106. package/dist/lib/resources/aws/iam/securityGroup.d.ts +5 -0
  107. package/dist/lib/resources/aws/iam/securityGroup.js +14 -0
  108. package/dist/lib/resources/aws/index.d.ts +1 -0
  109. package/dist/lib/resources/aws/index.js +18 -0
  110. package/dist/lib/resources/aws/logging/cloudTrail.d.ts +18 -0
  111. package/dist/lib/resources/aws/logging/cloudTrail.js +46 -0
  112. package/dist/lib/resources/aws/logging/logGroup.d.ts +8 -4
  113. package/dist/lib/resources/aws/logging/logGroup.js +6 -7
  114. package/dist/lib/resources/aws/networking/hostedZone.d.ts +19 -3
  115. package/dist/lib/resources/aws/networking/hostedZone.js +59 -11
  116. package/dist/lib/resources/aws/networking/index.d.ts +3 -0
  117. package/dist/lib/resources/aws/networking/index.js +20 -0
  118. package/dist/lib/resources/aws/networking/ipam.d.ts +2 -2
  119. package/dist/lib/resources/aws/networking/ipam.js +3 -3
  120. package/dist/lib/resources/aws/networking/ipamPool.d.ts +14 -5
  121. package/dist/lib/resources/aws/networking/ipamPool.js +69 -22
  122. package/dist/lib/resources/aws/networking/vpc.d.ts +29 -0
  123. package/dist/lib/resources/aws/networking/vpc.js +64 -0
  124. package/dist/lib/resources/aws/secrets/alias.d.ts +5 -0
  125. package/dist/lib/resources/aws/secrets/alias.js +13 -0
  126. package/dist/lib/resources/aws/secrets/index.d.ts +5 -0
  127. package/dist/lib/resources/aws/secrets/index.js +22 -0
  128. package/dist/lib/resources/aws/secrets/kms.d.ts +14 -0
  129. package/dist/lib/resources/aws/secrets/kms.js +34 -0
  130. package/dist/lib/resources/aws/secrets/parameter.d.ts +26 -0
  131. package/dist/lib/resources/aws/secrets/parameter.js +100 -0
  132. package/dist/lib/resources/aws/secrets/secret.d.ts +24 -0
  133. package/dist/lib/resources/aws/secrets/secret.js +53 -0
  134. package/dist/lib/resources/aws/storage/ecr.d.ts +12 -0
  135. package/dist/lib/resources/aws/storage/ecr.js +31 -0
  136. package/dist/lib/resources/aws/storage/index.d.ts +2 -0
  137. package/dist/lib/resources/aws/storage/index.js +19 -0
  138. package/dist/lib/resources/aws/storage/s3.d.ts +11 -0
  139. package/dist/lib/resources/aws/storage/s3.js +44 -0
  140. package/dist/lib/resources/aws/store/alias.d.ts +5 -0
  141. package/dist/lib/resources/aws/store/alias.js +13 -0
  142. package/dist/lib/resources/aws/store/database.d.ts +7 -2
  143. package/dist/lib/resources/aws/store/database.js +9 -5
  144. package/dist/lib/resources/aws/store/index.d.ts +7 -0
  145. package/dist/lib/resources/aws/store/index.js +24 -0
  146. package/dist/lib/resources/aws/store/kms.d.ts +14 -0
  147. package/dist/lib/resources/aws/store/kms.js +34 -0
  148. package/dist/lib/resources/aws/store/parameter.d.ts +26 -0
  149. package/dist/lib/resources/aws/store/parameter.js +100 -0
  150. package/dist/lib/resources/aws/store/rds.d.ts +15 -15
  151. package/dist/lib/resources/aws/store/rds.js +110 -68
  152. package/dist/lib/resources/aws/store/s3.d.ts +11 -0
  153. package/dist/lib/resources/aws/store/s3.js +43 -0
  154. package/dist/lib/resources/aws/store/secret.d.ts +26 -0
  155. package/dist/lib/resources/aws/store/secret.js +55 -0
  156. package/dist/lib/resources/aws/utilities/awsCustomResource.js +1 -6
  157. package/dist/lib/resources/aws/utilities/cfnOutput.js +2 -5
  158. package/dist/lib/resources/aws/utilities/codeBuild.d.ts +15 -0
  159. package/dist/lib/resources/aws/utilities/codeBuild.js +28 -0
  160. package/dist/lib/resources/aws/utilities/customResource.d.ts +20 -3
  161. package/dist/lib/resources/aws/utilities/customResource.js +24 -5
  162. package/dist/lib/resources/aws/utilities/customResourceProvider.js +1 -5
  163. package/dist/lib/resources/aws/utilities/resourceShare.d.ts +5 -0
  164. package/dist/lib/resources/aws/utilities/resourceShare.js +13 -0
  165. package/dist/lib/resources/index.d.ts +1 -0
  166. package/dist/lib/resources/index.js +18 -0
  167. package/dist/lib/types.d.ts +3 -0
  168. package/dist/lib/types.js +3 -0
  169. package/dist/lib/utils/capitalizeString.d.ts +1 -0
  170. package/dist/lib/utils/capitalizeString.js +8 -0
  171. package/dist/lib/utils/getAccountId.d.ts +1 -0
  172. package/dist/lib/utils/getAccountId.js +12 -0
  173. package/dist/lib/utils/getCidr.d.ts +8 -0
  174. package/dist/lib/utils/getCidr.js +42 -0
  175. package/dist/lib/utils/getConfig.d.ts +7 -5
  176. package/dist/lib/utils/getConfig.js +39 -11
  177. package/dist/lib/utils/getStackOutput.d.ts +1 -0
  178. package/dist/lib/utils/getStackOutput.js +20 -0
  179. package/dist/lib/utils/index.d.ts +1 -0
  180. package/dist/lib/utils/index.js +18 -0
  181. package/dist/lib/utils/stripAndCamelCase.d.ts +1 -0
  182. package/dist/lib/utils/stripAndCamelCase.js +17 -0
  183. package/dist/lib/utils/tagResource.d.ts +4 -0
  184. package/dist/lib/utils/tagResource.js +10 -0
  185. package/dist/lib/utils/usersConfig.d.ts +7 -0
  186. package/dist/lib/utils/usersConfig.js +18 -0
  187. package/package.json +23 -18
  188. package/dist/lib/config/aws/base/costAllocationTags.d.ts +0 -5
  189. package/dist/lib/config/aws/base/costAllocationTags.js +0 -57
  190. package/dist/lib/config/aws/base/iamIdentityCenter.d.ts +0 -5
  191. package/dist/lib/config/aws/base/iamIdentityCenter.js +0 -86
  192. package/dist/lib/config/aws/base/identityCenter.js +0 -90
  193. package/dist/lib/config/aws/base/ipam.js +0 -29
  194. package/dist/lib/config/aws/base/ipamPool.js +0 -46
  195. package/dist/lib/examples/custom-resources/lambda/aws-cost-allocation-tags/awsCostAllocationTagsLambda.d.ts +0 -2
  196. package/dist/lib/examples/custom-resources/lambda/aws-cost-allocation-tags/awsCostAllocationTagsLambda.js +0 -62
  197. package/dist/lib/examples/cutomResourceExample.d.ts +0 -6
  198. package/dist/lib/examples/cutomResourceExample.js +0 -45
  199. package/dist/lib/patterns/aws/customResource.d.ts +0 -7
  200. package/dist/lib/patterns/aws/customResource.js +0 -28
  201. package/dist/lib/patterns/aws/multiEnvironmentOrganisation.d.ts +0 -33
  202. package/dist/lib/patterns/aws/multiEnvironmentOrganisation.js +0 -107
  203. package/dist/lib/patterns/aws/webApp.d.ts +0 -17
  204. package/dist/lib/patterns/aws/webApp.js +0 -36
  205. package/dist/lib/resources/aws/compute/__tests__/fargate.test.d.ts +0 -1
  206. package/dist/lib/resources/aws/compute/__tests__/fargate.test.js +0 -21
  207. package/dist/lib/resources/aws/compute/fargate.d.ts +0 -23
  208. package/dist/lib/resources/aws/compute/fargate.js +0 -50
  209. package/dist/lib/resources/aws/constant/__tests__/vpc.test.d.ts +0 -1
  210. package/dist/lib/resources/aws/constant/__tests__/vpc.test.js +0 -13
  211. package/dist/lib/resources/aws/iam/assignment.js +0 -13
  212. package/dist/lib/resources/aws/iam/group.js +0 -15
  213. package/dist/lib/resources/aws/iam/iamRole.d.ts +0 -5
  214. package/dist/lib/resources/aws/iam/iamRole.js +0 -18
  215. package/dist/lib/resources/aws/iam/permissionSet.js +0 -13
  216. /package/dist/lib/resources/aws/iam/{assignment.d.ts → identityCenter/assignment.d.ts} +0 -0
  217. /package/dist/lib/resources/aws/iam/{group.d.ts → identityCenter/group.d.ts} +0 -0
  218. /package/dist/lib/resources/aws/iam/{permissionSet.d.ts → identityCenter/permissionSet.d.ts} +0 -0
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BasicApp = void 0;
4
+ const awsStack_1 = require("../../resources/aws/awsStack");
5
+ const vpc_1 = require("../../resources/aws/networking/vpc");
6
+ const ecs_1 = require("../../resources/aws/compute/ecs");
7
+ const ecsFreeTier_1 = require("../../resources/aws/compute/ecsFreeTier");
8
+ const secrets_1 = require("../../resources/aws/secrets");
9
+ const storage_1 = require("../../resources/aws/storage");
10
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
11
+ const databaseFreeTier_1 = require("../../resources/aws/database/databaseFreeTier");
12
+ class BasicApp {
13
+ constructor(id, rawProps) {
14
+ const props = this.getProps(id, rawProps);
15
+ const stackProps = this.getStackProps(props);
16
+ this.vpcStack = new awsStack_1.default(`${id}Network`, [], stackProps)
17
+ .addNetwork(vpc_1.Vpc.build(`${id}Vpc`, {
18
+ environment: props.environment,
19
+ region: props.region,
20
+ tags: props.tags
21
+ }))
22
+ .addContainerRegistry(storage_1.Ecr.build(`${id}Ecr`));
23
+ this.databaseStack = new awsStack_1.default(`${id}Database`, this.vpcStack, stackProps)
24
+ .addNetwork(this.vpcStack.getNetwork())
25
+ .addResource(databaseFreeTier_1.default.build(`${id}Database`, {
26
+ tags: props.tags
27
+ }));
28
+ // Fetches the dbResource from the databaseStack
29
+ const dbResource = this.databaseStack.getResource(`${id}Database`);
30
+ const secretObjectValue = {};
31
+ if (props.containerSecrets) {
32
+ for (const secretObject of props.containerSecrets) {
33
+ secretObjectValue[secretObject] = aws_cdk_lib_1.SecretValue.unsafePlainText("");
34
+ }
35
+ }
36
+ this.secretStack = new awsStack_1.default(`${id}Secret`, [], stackProps).addResource(secrets_1.Secret.build(`${id}Secret`, {
37
+ secretName: `/${props.clusterName}/${props.serviceName}`,
38
+ secretObjectValue: secretObjectValue,
39
+ tags: props.tags
40
+ }));
41
+ this.computeStack = new awsStack_1.default(`${id}Compute`, [this.vpcStack, this.databaseStack, this.secretStack], stackProps)
42
+ .addNetwork(this.vpcStack.getNetwork())
43
+ .addResource(ecsFreeTier_1.default.build(`${id}Fargate`, {
44
+ clusterName: props.clusterName,
45
+ //TODO: This should work via line 124, but doesn't work (at least on update)
46
+ databaseConnection: dbResource.databaseSecurityGroup.connections,
47
+ containerEntryPoint: props.containerEntryPoint,
48
+ containerCommand: props.containerCommand,
49
+ containerEnvironment: props.containerEnvironment,
50
+ containerPort: props.containerPort,
51
+ containerSecrets: secretObjectValue,
52
+ ecrRepository: this.vpcStack.getContainerRegistry(),
53
+ parentDomain: props.parentDomain?.toLowerCase(),
54
+ listenerPort: props.listenerPort,
55
+ serviceName: props.serviceName,
56
+ taskRoleInlinePolicies: props.taskRoleInlinePolicies,
57
+ taskRoleManagedPolicies: props.taskRoleManagedPolicies,
58
+ tags: props.tags
59
+ }))
60
+ .connect(`${id}Fargate`, `${id}Database`, 5432);
61
+ }
62
+ getStackProps(props) {
63
+ if (!props)
64
+ return;
65
+ return {
66
+ account: props.account,
67
+ region: props.region,
68
+ environment: props.environment
69
+ };
70
+ }
71
+ getProps(id, rawProps) {
72
+ const defaultProps = {
73
+ tags: {
74
+ "fjall:costAllocation:service": "app",
75
+ "fjall:costAllocation:environment": rawProps.environment || "production",
76
+ "fjall:costAllocation:owner": rawProps.owner || "Engineer"
77
+ },
78
+ scalingType: ecs_1.ScalingType.CPU,
79
+ containerPort: rawProps.containerPort || 3000,
80
+ serviceName: `${id}Service`,
81
+ clusterName: `${id}Cluster`,
82
+ containerEntryPoint: ["node", "main.js"],
83
+ containerCommand: rawProps.containerPort
84
+ ? [`${rawProps.containerPort}`]
85
+ : [`3000`]
86
+ };
87
+ return {
88
+ ...defaultProps,
89
+ ...rawProps
90
+ };
91
+ }
92
+ }
93
+ exports.BasicApp = BasicApp;
94
+ exports.default = BasicApp;
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZVRpZXJBcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2ZyZWVUaWVyQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUF1RTtBQUN2RSw0REFBeUQ7QUFDekQseURBQStFO0FBQy9FLHlFQUFpRTtBQUNqRSx5REFBcUQ7QUFDckQseURBQWtEO0FBQ2xELDZDQUEwQztBQUcxQyxvRkFBcUU7QUFxQ3JFLE1BQWEsUUFBUTtJQU1uQixZQUFZLEVBQVUsRUFBRSxRQUF1QjtRQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxrQkFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQzthQUN6RCxVQUFVLENBQ1QsU0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FDSDthQUNBLG9CQUFvQixDQUFDLGFBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGtCQUFRLENBQy9CLEdBQUcsRUFBRSxVQUFVLEVBQ2YsSUFBSSxDQUFDLFFBQVEsRUFDYixVQUFVLENBQ1g7YUFDRSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUN0QyxXQUFXLENBQ1YsMEJBQVEsQ0FBQyxLQUFLLENBQUMs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QUN0Qyw0QkFBNEIsRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLFVBQVU7YUFDM0Q7WUFDRCxXQUFXLEVBQUUsaUJBQVcsQ0FBQyxHQUFHO1lBQzVCLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYSxJQUFJLElBQUk7WUFDN0MsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTO1lBQzNCLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUztZQUMzQixtQkFBbUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7WUFDeEMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGFBQWE7Z0JBQ3RDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMvQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDYixDQUFDO1FBRUYsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLEdBQUcsUUFBUTtTQUNaLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFwSEQsNEJBb0hDO0FBQ0Qsa0JBQWUsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF3c1N0YWNrLCB7IEF3c1N0YWNrUHJvcHMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9hd3NTdGFja1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IENvbnRhaW5lclNlY3JldCwgU2NhbGluZ1R5cGUgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IEVjMkNsdXN0ZXIgZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3NGcmVlVGllclwiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuaW1wb3J0IHsgRWNyIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc3RvcmFnZVwiO1xuaW1wb3J0IHsgU2VjcmV0VmFsdWUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElNYW5hZ2VkUG9saWN5LCBQb2xpY3lEb2N1bWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IERhdGFiYXNlIGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2RhdGFiYXNlRnJlZVRpZXJcIjtcblxuLyoqXG4gKiBJbnRlcnNlY3RlZCB3aXRoIEJhc2ljQXBwUHJvcHMgaW4gdGhlIGdldFByb3BzIG1ldGhvZC4gVGhpcyBhbGxvd3MgdGhlIEJhc2ljQXBwIGNvbnN0cnVjdFxuICogdG8gdHJlYXQgdGhlc2UgYXMgcmVxdWlyZWQgcHJvcGVydGllcyBhbmQgYXZvaWQgY29uc3RhbnQgbnVsbCBjaGVja2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNpY0FwcFByb3BEZWZhdWx0cyB7XG4gIHRhZ3M6IEtleVZhbHVlO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICBjbHVzdGVyTmFtZTogc3RyaW5nO1xuICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGU7XG4gIGNvbnRhaW5lclBvcnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNpY0FwcFByb3BzIHtcbiAgYWNjb3VudD86IHN0cmluZztcbiAgY2x1c3Rlck5hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lckVudHJ5UG9pbnQ/OiBzdHJpbmdbXTtcbiAgY29udGFpbmVyQ29tbWFuZD86IHN0cmluZ1tdO1xuICBjb250YWluZXJFbnZpcm9ubWVudD86IEtleVZhbHVlO1xuICBjb250YWluZXJQb3J0PzogbnVtYmVyO1xuICBjb250YWluZXJTZWNyZXRzPzogc3RyaW5nW107XG4gIC8vIFRoZSB0ZWFtL2RvbWFpbi9idXNpbmVzcy11bml0IHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgc2VydmljZVxuICBvd25lcj86IHN0cmluZztcbiAgcGFyZW50RG9tYWluPzogc3RyaW5nOyAvLyBGaXggdG8gbWFrZSBhIGRlcGVuZGVuY3kgb2YgcHJvdG9jb2xcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgbGlzdGVuZXJQb3J0PzogbnVtYmVyO1xuICByZWdpb24/OiBzdHJpbmc7XG4gIHNjYWxpbmdUeXBlPzogU2NhbGluZ1R5cGU7XG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICB0YXNrUm9sZUlubGluZVBvbGljaWVzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBQb2xpY3lEb2N1bWVudDtcbiAgfTtcbiAgdGFza1JvbGVNYW5hZ2VkUG9saWNpZXM/OiBJTWFuYWdlZFBvbGljeVtdO1xuICB0YWdzPzogS2V5VmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNpY0FwcCB7XG4gIHByaXZhdGUgdnBjU3RhY2s6IEF3c1N0YWNrO1xuICBwcml2YXRlIGRhdGFiYXNlU3RhY2s6IEF3c1N0YWNrO1xuICBwcml2YXRlIHNlY3JldFN0YWNrOiBBd3NTdGFjaztcbiAgcHJpdmF0ZSBjb21wdXRlU3RhY2s6IEF3c1N0YWNrO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHJhd1Byb3BzOiBCYXNpY0FwcFByb3BzKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLmdldFByb3BzKGlkLCByYXdQcm9wcyk7XG4gICAgY29uc3Qgc3RhY2tQcm9wcyA9IHRoaXMuZ2V0U3RhY2tQcm9wcyhwcm9wcyk7XG5cbiAgICB0aGlzLnZwY1N0YWNrID0gbmV3IEF3c1N0YWNrKGAke2lkfU5ldHdvcmtgLCBbXSwgc3RhY2tQcm9wcylcbiAgICAgIC5hZGROZXR3b3JrKFxuICAgICAgICBWcGMuYnVpbGQoYCR7aWR9VnBjYCwge1xuICAgICAgICAgIGVudmlyb25tZW50OiBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICAgICAgICByZWdpb246IHByb3BzLnJlZ2lvbixcbiAgICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuYWRkQ29udGFpbmVyUmVnaXN0cnkoRWNyLmJ1aWxkKGAke2lkfUVjcmApKTtcblxuICAgIHRoaXMuZGF0YWJhc2VTdGFjayA9IG5ldyBBd3NTdGFjayhcbiAgICAgIGAke2lkfURhdGFiYXNlYCxcbiAgICAgIHRoaXMudnBjU3RhY2ssXG4gICAgICBzdGFja1Byb3BzXG4gICAgKVxuICAgICAgLmFkZE5ldHdvcmsodGhpcy52cGNTdGFjay5nZXROZXR3b3JrKCkpXG4gICAgICAuYWRkUmVzb3VyY2UoXG4gICAgICAgIERhdGFiYXNlLmJ1aWxkKGAke2lkfURhdGFiYXNlYCwge1xuICAgICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAvLyBGZXRjaGVzIHRoZSBkYlJlc291cmNlIGZyb20gdGhlIGRhdGFiYXNlU3RhY2tcbiAgICBjb25zdCBkYlJlc291cmNlID0gdGhpcy5kYXRhYmFzZVN0YWNrLmdldFJlc291cmNlKFxuICAgICAgYCR7aWR9RGF0YWJhc2VgXG4gICAgKSBhcyBEYXRhYmFzZTtcblxuICAgIGNvbnN0IHNlY3JldE9iamVjdFZhbHVlOiBDb250YWluZXJTZWNyZXQgPSB7fTtcbiAgICBpZiAocHJvcHMuY29udGFpbmVyU2VjcmV0cykge1xuICAgICAgZm9yIChjb25zdCBzZWNyZXRPYmplY3Qgb2YgcHJvcHMuY29udGFpbmVyU2VjcmV0cykge1xuICAgICAgICBzZWNyZXRPYmplY3RWYWx1ZVtzZWNyZXRPYmplY3RdID0gU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KFwiXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VjcmV0U3RhY2sgPSBuZXcgQXdzU3RhY2soYCR7aWR9U2VjcmV0YCwgW10sIHN0YWNrUHJvcHMpLmFkZFJlc291cmNlKFxuICAgICAgU2VjcmV0LmJ1aWxkKGAke2lkfVNlY3JldGAsIHtcbiAgICAgICAgc2VjcmV0TmFtZTogYC8ke3Byb3BzLmNsdXN0ZXJOYW1lfS8ke3Byb3BzLnNlcnZpY2VOYW1lfWAsXG4gICAgICAgIHNlY3JldE9iamVjdFZhbHVlOiBzZWNyZXRPYmplY3RWYWx1ZSxcbiAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5jb21wdXRlU3RhY2sgPSBuZXcgQXdzU3RhY2soXG4gICAgICBgJHtpZH1Db21wdXRlYCxcbiAgICAgIFt0aGlzLnZwY1N0YWNrLCB0aGlzLmRhdGFiYXNlU3RhY2ssIHRoaXMuc2VjcmV0U3RhY2tdLFxuICAgICAgc3RhY2tQcm9wc1xuICAgIClcbiAgICAgIC5hZGROZXR3b3JrKHRoaXMudnBjU3RhY2suZ2V0TmV0d29yaygpKVxuICAgICAgLmFkZFJlc291cmNlKFxuICAgICAgICBFYzJDbHVzdGVyLmJ1aWxkKGAke2lkfUZhcmdhdGVgLCB7XG4gICAgICAgICAgY2x1c3Rlck5hbWU6IHByb3BzLmNsdXN0ZXJOYW1lLFxuICAgICAgICAgIC8vVE9ETzogVGhpcyBzaG91bGQgd29yayB2aWEgbGluZSAxMjQsIGJ1dCBkb2Vzbid0IHdvcmsgKGF0IGxlYXN0IG9uIHVwZGF0ZSlcbiAgICAgICAgICBkYXRhYmFzZUNvbm5lY3Rpb246IGRiUmVzb3VyY2UuZGF0YWJhc2VTZWN1cml0eUdyb3VwLmNvbm5lY3Rpb25zLFxuICAgICAgICAgIGNvbnRhaW5lckVudHJ5UG9pbnQ6IHByb3BzLmNvbnRhaW5lckVudHJ5UG9pbnQsXG4gICAgICAgICAgY29udGFpbmVyQ29tbWFuZDogcHJvcHMuY29udGFpbmVyQ29tbWFuZCxcbiAgICAgICAgICBjb250YWluZXJFbnZpcm9ubWVudDogcHJvcHMuY29udGFpbmVyRW52aXJvbm1lbnQsXG4gICAgICAgICAgY29udGFpbmVyUG9ydDogcHJvcHMuY29udGFpbmVyUG9ydCxcbiAgICAgICAgICBjb250YWluZXJTZWNyZXRzOiBzZWNyZXRPYmplY3RWYWx1ZSxcbiAgICAgICAgICBlY3JSZXBvc2l0b3J5OiB0aGlzLnZwY1N0YWNrLmdldENvbnRhaW5lclJlZ2lzdHJ5KCksXG4gICAgICAgICAgcGFyZW50RG9tYWluOiBwcm9wcy5wYXJlbnREb21haW4/LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgbGlzdGVuZXJQb3J0OiBwcm9wcy5saXN0ZW5lclBvcnQsXG4gICAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICAgIHRhc2tSb2xlSW5saW5lUG9saWNpZXM6IHByb3BzLnRhc2tSb2xlSW5saW5lUG9saWNpZXMsXG4gICAgICAgICAgdGFza1JvbGVNYW5hZ2VkUG9saWNpZXM6IHByb3BzLnRhc2tSb2xlTWFuYWdlZFBvbGljaWVzLFxuICAgICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5jb25uZWN0KGAke2lkfUZhcmdhdGVgLCBgJHtpZH1EYXRhYmFzZWAsIDU0MzIpO1xuICB9XG5cbiAgZ2V0U3RhY2tQcm9wcyhwcm9wczogQmFzaWNBcHBQcm9wcyk6IEF3c1N0YWNrUHJvcHMgfCB1bmRlZmluZWQge1xuICAgIGlmICghcHJvcHMpIHJldHVybjtcblxuICAgIHJldHVybiB7XG4gICAgICBhY2NvdW50OiBwcm9wcy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICBlbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnRcbiAgICB9O1xuICB9XG5cbiAgZ2V0UHJvcHMoXG4gICAgaWQ6IHN0cmluZyxcbiAgICByYXdQcm9wczogQmFzaWNBcHBQcm9wc1xuICApOiBCYXNpY0FwcFByb3BzICYgQmFzaWNBcHBQcm9wRGVmYXVsdHMge1xuICAgIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiYXBwXCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjpcbiAgICAgICAgICByYXdQcm9wcy5lbnZpcm9ubWVudCB8fCBcInByb2R1Y3Rpb25cIixcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiByYXdQcm9wcy5vd25lciB8fCBcIkVuZ2luZWVyXCJcbiAgICAgIH0sXG4gICAgICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGUuQ1BVLFxuICAgICAgY29udGFpbmVyUG9ydDogcmF3UHJvcHMuY29udGFpbmVyUG9ydCB8fCAzMDAwLFxuICAgICAgc2VydmljZU5hbWU6IGAke2lkfVNlcnZpY2VgLFxuICAgICAgY2x1c3Rlck5hbWU6IGAke2lkfUNsdXN0ZXJgLFxuICAgICAgY29udGFpbmVyRW50cnlQb2ludDogW1wibm9kZVwiLCBcIm1haW4uanNcIl0sXG4gICAgICBjb250YWluZXJDb21tYW5kOiByYXdQcm9wcy5jb250YWluZXJQb3J0XG4gICAgICAgID8gW2Ake3Jhd1Byb3BzLmNvbnRhaW5lclBvcnR9YF1cbiAgICAgICAgOiBbYDMwMDBgXVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdFByb3BzLFxuICAgICAgLi4ucmF3UHJvcHNcbiAgICB9O1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBCYXNpY0FwcDtcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import { Construct } from "constructs";
2
+ import { Stack } from "aws-cdk-lib";
3
+ export interface hostedZoneProps {
4
+ zoneName: string;
5
+ importExisting?: boolean;
6
+ importedHostedZoneId?: string;
7
+ }
8
+ export declare class HostedZone extends Stack {
9
+ private hostedZone;
10
+ constructor(scope: Construct, id: string, props: hostedZoneProps);
11
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HostedZone = void 0;
4
+ const route53 = require("aws-cdk-lib/aws-route53");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ const iam_1 = require("../../resources/aws/iam");
7
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
8
+ const tagResource_1 = require("../../utils/tagResource");
9
+ class HostedZone extends aws_cdk_lib_1.Stack {
10
+ constructor(scope, id, props) {
11
+ super(scope, id);
12
+ if (props.importExisting) {
13
+ this.hostedZone = route53.HostedZone.fromHostedZoneAttributes(this, "importedHostedZone", {
14
+ hostedZoneId: props.importedHostedZoneId || "",
15
+ zoneName: props.zoneName
16
+ });
17
+ (0, tagResource_1.default)(this.hostedZone, {
18
+ "fjall:costAllocation:environment": "management",
19
+ "fjall:costAllocation:service": "hostedZone",
20
+ "fjall:costAllocation:domain": `${props.zoneName}`
21
+ });
22
+ }
23
+ else {
24
+ this.hostedZone = new route53.HostedZone(this, "HostedZone", {
25
+ zoneName: props.zoneName,
26
+ comment: `Hosted Zone for ${props.zoneName}`
27
+ });
28
+ (0, tagResource_1.default)(this.hostedZone, {
29
+ "fjall:costAllocation:environment": "management",
30
+ "fjall:costAllocation:service": "hostedZone",
31
+ "fjall:costAllocation:domain": `${props.zoneName}`
32
+ });
33
+ }
34
+ const domainName = this.hostedZone.zoneName.split(".", 1);
35
+ const role = new iam_1.Role(this, `${domainName}DelegateHostedZoneRole`, {
36
+ assumedBy: new aws_iam_1.OrganizationPrincipal(aws_cdk_lib_1.Fn.importValue("OrganisationId")),
37
+ roleName: `${domainName}DelegateHostedZoneRole`,
38
+ inlinePolicies: {
39
+ ["listHostedZones"]: new aws_iam_1.PolicyDocument({
40
+ statements: [
41
+ new aws_iam_1.PolicyStatement({
42
+ actions: ["route53:ListHostedZonesByName"],
43
+ resources: ["*"]
44
+ })
45
+ ]
46
+ }),
47
+ ["changeResourceRecordSets"]: new aws_iam_1.PolicyDocument({
48
+ statements: [
49
+ new aws_iam_1.PolicyStatement({
50
+ actions: ["route53:ChangeResourceRecordSets"],
51
+ resources: [
52
+ `arn:aws:route53:::hostedzone/${this.hostedZone.hostedZoneId}`
53
+ ]
54
+ })
55
+ ]
56
+ })
57
+ }
58
+ });
59
+ new aws_cdk_lib_1.CfnOutput(this, "DelegateHostedZoneRoleArn", {
60
+ key: `${domainName}DelegateHostedZoneRoleArn`,
61
+ value: role.roleArn,
62
+ exportName: `${domainName}DelegateHostedZoneRoleArn`
63
+ });
64
+ this.hostedZone.grantDelegation(role);
65
+ new aws_cdk_lib_1.CfnOutput(this, `${props.zoneName.split(".").join("")}HostedZoneId`, {
66
+ key: "HostedZoneId",
67
+ value: this.hostedZone.hostedZoneId,
68
+ exportName: `${props.zoneName.split(".").join("")}HostedZoneId`
69
+ });
70
+ }
71
+ }
72
+ exports.HostedZone = HostedZone;
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkWm9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvaG9zdGVkWm9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtREFBbUQ7QUFDbkQsNkNBQW1EO0FBQ25ELGlEQUErQztBQUMvQyxpREFJNkI7QUFFN0IseURBQWtEO0FBUWxELE1BQWEsVUFBVyxTQUFRLG1CQUFLO0lBRW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUMzRCxJQUFJLEVBQ0osb0JBQW9CLEVBQ3BCO2dCQUNFLFlBQVksRUFBRSxLQUFLLENBQUMsb0JBQW9CLElBQUksRUFBRTtnQkFDOUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2FBQ3pCLENBQ0YsQ0FBQztZQUNGLElBQUEscUJBQVcsRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUMzQixrQ0FBa0MsRUFBRSxZQUFZO2dCQUNoRCw4QkFBOEIsRUFBRSxZQUFZO2dCQUM1Qyw2QkFBNkIsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUU7YUFDbkQsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtnQkFDeEIsT0FBTyxFQUFFLG1CQUFtQixLQUFLLENBQUMsUUFBUSxFQUFFO2FBQzdDLENBQUMsQ0FBQztZQUNILElBQUEscUJBQVcsRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUMzQixrQ0FBa0MsRUFBRSxZQUFZO2dCQUNoRCw4QkFBOEIsRUFBRSxZQUFZO2dCQUM1Qyw2QkFBNkIsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUU7YUFDbkQsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLElBQUksVUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLFVBQVUsd0JBQXdCLEVBQUU7WUFDakUsU0FBUyxFQUFFLElBQUksK0JBQXFCLENBQUMsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RSxRQUFRLEVBQUUsR0FBRyxVQUFVLHdCQUF3QjtZQUMvQyxjQUFjLEVBQUU7Z0JBQ2QsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksd0JBQWMsQ0FBQztvQkFDdEMsVUFBVSxFQUFFO3dCQUNWLElBQUkseUJBQWUsQ0FBQzs0QkFDbEIsT0FBTyxFQUFFLENBQUMsK0JBQStCLENBQUM7NEJBQzFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQzt5QkFDakIsQ0FBQztxQkFDSDtpQkFDRixDQUFDO2dCQUNGLENBQUMsMEJBQTBCLENBQUMsRUFBRSxJQUFJLHdCQUFjLENBQUM7b0JBQy9DLFVBQVUsRUFBRTt3QkFDVixJQUFJLHlCQUFlLENBQUM7NEJBQ2xCLE9BQU8sRUFBRSxDQUFDLGtDQUFrQyxDQUFDOzRCQUM3QyxTQUFTLEVBQUU7Z0NBQ1QsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFOzZCQUMvRDt5QkFDRixDQUFDO3FCQUNIO2lCQUNGLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDL0MsR0FBRyxFQUFFLEdBQUcsVUFBVSwyQkFBMkI7WUFDN0MsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ25CLFVBQVUsRUFBRSxHQUFHLFVBQVUsMkJBQTJCO1NBQ3JELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRTtZQUN2RSxHQUFHLEVBQUUsY0FBYztZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZO1lBQ25DLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYztTQUNoRSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF2RUQsZ0NBdUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIEZuLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbVwiO1xuaW1wb3J0IHtcbiAgT3JnYW5pemF0aW9uUHJpbmNpcGFsLFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBJSG9zdGVkWm9uZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHRhZ1Jlc291cmNlIGZyb20gXCIuLi8uLi91dGlscy90YWdSZXNvdXJjZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIGhvc3RlZFpvbmVQcm9wcyB7XG4gIHpvbmVOYW1lOiBzdHJpbmc7XG4gIGltcG9ydEV4aXN0aW5nPzogYm9vbGVhbjtcbiAgaW1wb3J0ZWRIb3N0ZWRab25lSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBIb3N0ZWRab25lIGV4dGVuZHMgU3RhY2sge1xuICBwcml2YXRlIGhvc3RlZFpvbmU6IElIb3N0ZWRab25lIHwgSG9zdGVkWm9uZTtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGhvc3RlZFpvbmVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuaW1wb3J0RXhpc3RpbmcpIHtcbiAgICAgIHRoaXMuaG9zdGVkWm9uZSA9IHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiaW1wb3J0ZWRIb3N0ZWRab25lXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0ZWRab25lSWQ6IHByb3BzLmltcG9ydGVkSG9zdGVkWm9uZUlkIHx8IFwiXCIsIC8vIFRPRE86IGZpeCBzbyB0aGlzIGNhbiByZWFsbHkgYmUgYW4gb3B0aW9uYWwgcHJvcFxuICAgICAgICAgIHpvbmVOYW1lOiBwcm9wcy56b25lTmFtZVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdGFnUmVzb3VyY2UodGhpcy5ob3N0ZWRab25lLCB7XG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjogXCJtYW5hZ2VtZW50XCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImhvc3RlZFpvbmVcIixcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpkb21haW5cIjogYCR7cHJvcHMuem9uZU5hbWV9YFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaG9zdGVkWm9uZSA9IG5ldyByb3V0ZTUzLkhvc3RlZFpvbmUodGhpcywgXCJIb3N0ZWRab25lXCIsIHtcbiAgICAgICAgem9uZU5hbWU6IHByb3BzLnpvbmVOYW1lLFxuICAgICAgICBjb21tZW50OiBgSG9zdGVkIFpvbmUgZm9yICR7cHJvcHMuem9uZU5hbWV9YFxuICAgICAgfSk7XG4gICAgICB0YWdSZXNvdXJjZSh0aGlzLmhvc3RlZFpvbmUsIHtcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBcIm1hbmFnZW1lbnRcIixcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiaG9zdGVkWm9uZVwiLFxuICAgICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmRvbWFpblwiOiBgJHtwcm9wcy56b25lTmFtZX1gXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkb21haW5OYW1lID0gdGhpcy5ob3N0ZWRab25lLnpvbmVOYW1lLnNwbGl0KFwiLlwiLCAxKTtcbiAgICBjb25zdCByb2xlID0gbmV3IFJvbGUodGhpcywgYCR7ZG9tYWluTmFtZX1EZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlYCwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgT3JnYW5pemF0aW9uUHJpbmNpcGFsKEZuLmltcG9ydFZhbHVlKFwiT3JnYW5pc2F0aW9uSWRcIikpLFxuICAgICAgcm9sZU5hbWU6IGAke2RvbWFpbk5hbWV9RGVsZWdhdGVIb3N0ZWRab25lUm9sZWAsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBbXCJsaXN0SG9zdGVkWm9uZXNcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInJvdXRlNTM6TGlzdEhvc3RlZFpvbmVzQnlOYW1lXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wiY2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c1wiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6cm91dGU1Mzo6Omhvc3RlZHpvbmUvJHt0aGlzLmhvc3RlZFpvbmUuaG9zdGVkWm9uZUlkfWBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiRGVsZWdhdGVIb3N0ZWRab25lUm9sZUFyblwiLCB7XG4gICAgICBrZXk6IGAke2RvbWFpbk5hbWV9RGVsZWdhdGVIb3N0ZWRab25lUm9sZUFybmAsXG4gICAgICB2YWx1ZTogcm9sZS5yb2xlQXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7ZG9tYWluTmFtZX1EZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlQXJuYFxuICAgIH0pO1xuXG4gICAgdGhpcy5ob3N0ZWRab25lLmdyYW50RGVsZWdhdGlvbihyb2xlKTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMuem9uZU5hbWUuc3BsaXQoXCIuXCIpLmpvaW4oXCJcIil9SG9zdGVkWm9uZUlkYCwge1xuICAgICAga2V5OiBcIkhvc3RlZFpvbmVJZFwiLFxuICAgICAgdmFsdWU6IHRoaXMuaG9zdGVkWm9uZS5ob3N0ZWRab25lSWQsXG4gICAgICBleHBvcnROYW1lOiBgJHtwcm9wcy56b25lTmFtZS5zcGxpdChcIi5cIikuam9pbihcIlwiKX1Ib3N0ZWRab25lSWRgXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,5 @@
1
- export * from "./multiEnvironmentOrganisation";
2
- export * from "./webApp";
1
+ export * from "./managedOrganisation";
2
+ export * from "./managedPlatform";
3
+ export * from "./managedAccount";
4
+ export * from "./basicApp";
5
+ export * from "./buildkite";
@@ -14,6 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./multiEnvironmentOrganisation"), exports);
18
- __exportStar(require("./webApp"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpRUFBK0M7QUFDL0MsMkNBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vbXVsdGlFbnZpcm9ubWVudE9yZ2FuaXNhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vd2ViQXBwXCI7XG4iXX0=
17
+ __exportStar(require("./managedOrganisation"), exports);
18
+ __exportStar(require("./managedPlatform"), exports);
19
+ __exportStar(require("./managedAccount"), exports);
20
+ __exportStar(require("./basicApp"), exports);
21
+ __exportStar(require("./buildkite"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBc0M7QUFDdEMsb0RBQWtDO0FBQ2xDLG1EQUFpQztBQUNqQyw2Q0FBMkI7QUFDM0IsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vbWFuYWdlZE9yZ2FuaXNhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWFuYWdlZFBsYXRmb3JtXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tYW5hZ2VkQWNjb3VudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYmFzaWNBcHBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2J1aWxka2l0ZVwiO1xuIl19
@@ -0,0 +1,13 @@
1
+ import { Stack, StackProps } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ export interface ManagedAccountProps extends StackProps {
4
+ accountId: string;
5
+ accountName: string;
6
+ region: string;
7
+ }
8
+ /**
9
+ * A stack for deploying defaults into a new account.
10
+ */
11
+ export declare class ManagedAccount extends Stack {
12
+ constructor(scope: Construct, id: string, props: ManagedAccountProps);
13
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManagedAccount = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_1 = require("../../config/aws");
6
+ const cloudTrail_1 = require("../../config/aws/cloudTrail");
7
+ const cfnOutput_1 = require("../../resources/aws/utilities/cfnOutput");
8
+ /**
9
+ * A stack for deploying defaults into a new account.
10
+ */
11
+ class ManagedAccount extends aws_cdk_lib_1.Stack {
12
+ constructor(scope, id, props) {
13
+ super(scope, id, props);
14
+ const organisation = new aws_1.OrganisationId(this, "OrganisationId");
15
+ const account = new aws_1.AccountId(this, "AccountId");
16
+ const eventBus = new aws_1.DefaultEventBus(this, "EventBus");
17
+ if (id === "ManagedAccount") {
18
+ new aws_1.IpamPoolId(this, "IpamPoolId", {
19
+ region: props.region,
20
+ ownerId: organisation.organisationAccountArn.value.split(":")[4]
21
+ });
22
+ }
23
+ new cloudTrail_1.ManagementEventsTrail(this, "CloudTrail", {
24
+ accountId: account.accountId.value
25
+ });
26
+ new aws_1.EcrDefaultImage(this, "EcrDefaultImage", {
27
+ region: props.region,
28
+ accountId: account.accountId.value,
29
+ eventBusArn: eventBus.defaultEventBusArn.value
30
+ });
31
+ new cfnOutput_1.CfnOutput(this, `Environment`, {
32
+ key: `Environment`,
33
+ value: props.accountName,
34
+ exportName: `Environment`
35
+ });
36
+ }
37
+ }
38
+ exports.ManagedAccount = ManagedAccount;
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZEFjY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL21hbmFnZWRBY2NvdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFnRDtBQUNoRCwwQ0FNMEI7QUFHMUIsNERBQW9FO0FBQ3BFLHVFQUFvRTtBQVFwRTs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLG1CQUFLO0lBQ3ZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxvQkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZELElBQUksRUFBRSxLQUFLLGdCQUFnQixFQUFFO1lBQzNCLElBQUksZ0JBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO2dCQUNqQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07Z0JBQ3BCLE9BQU8sRUFBRSxZQUFZLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakUsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLGtDQUFxQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDNUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSztTQUNuQyxDQUFDLENBQUM7UUFFSCxJQUFJLHFCQUFlLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQzNDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQ2xDLFdBQVcsRUFBRSxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLHFCQUFTLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqQyxHQUFHLEVBQUUsYUFBYTtZQUNsQixLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDeEIsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBakNELHdDQWlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBPcmdhbmlzYXRpb25JZCxcbiAgQWNjb3VudElkLFxuICBJcGFtUG9vbElkLFxuICBFY3JEZWZhdWx0SW1hZ2UsXG4gIERlZmF1bHRFdmVudEJ1c1xufSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3c1wiO1xuaW1wb3J0IHt9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTWFuYWdlbWVudEV2ZW50c1RyYWlsIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvY2xvdWRUcmFpbFwiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2Nmbk91dHB1dFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRBY2NvdW50UHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc3RhY2sgZm9yIGRlcGxveWluZyBkZWZhdWx0cyBpbnRvIGEgbmV3IGFjY291bnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYW5hZ2VkQWNjb3VudCBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1hbmFnZWRBY2NvdW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGNvbnN0IG9yZ2FuaXNhdGlvbiA9IG5ldyBPcmdhbmlzYXRpb25JZCh0aGlzLCBcIk9yZ2FuaXNhdGlvbklkXCIpO1xuXG4gICAgY29uc3QgYWNjb3VudCA9IG5ldyBBY2NvdW50SWQodGhpcywgXCJBY2NvdW50SWRcIik7XG5cbiAgICBjb25zdCBldmVudEJ1cyA9IG5ldyBEZWZhdWx0RXZlbnRCdXModGhpcywgXCJFdmVudEJ1c1wiKTtcblxuICAgIGlmIChpZCA9PT0gXCJNYW5hZ2VkQWNjb3VudFwiKSB7XG4gICAgICBuZXcgSXBhbVBvb2xJZCh0aGlzLCBcIklwYW1Qb29sSWRcIiwge1xuICAgICAgICByZWdpb246IHByb3BzLnJlZ2lvbixcbiAgICAgICAgb3duZXJJZDogb3JnYW5pc2F0aW9uLm9yZ2FuaXNhdGlvbkFjY291bnRBcm4udmFsdWUuc3BsaXQoXCI6XCIpWzRdXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXcgTWFuYWdlbWVudEV2ZW50c1RyYWlsKHRoaXMsIFwiQ2xvdWRUcmFpbFwiLCB7XG4gICAgICBhY2NvdW50SWQ6IGFjY291bnQuYWNjb3VudElkLnZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXcgRWNyRGVmYXVsdEltYWdlKHRoaXMsIFwiRWNyRGVmYXVsdEltYWdlXCIsIHtcbiAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgYWNjb3VudElkOiBhY2NvdW50LmFjY291bnRJZC52YWx1ZSxcbiAgICAgIGV2ZW50QnVzQXJuOiBldmVudEJ1cy5kZWZhdWx0RXZlbnRCdXNBcm4udmFsdWVcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYEVudmlyb25tZW50YCwge1xuICAgICAga2V5OiBgRW52aXJvbm1lbnRgLFxuICAgICAgdmFsdWU6IHByb3BzLmFjY291bnROYW1lLFxuICAgICAgZXhwb3J0TmFtZTogYEVudmlyb25tZW50YFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { Stack } from "aws-cdk-lib";
2
+ export interface Accounts {
3
+ [key: string]: string;
4
+ }
5
+ interface ManagedOrganisationProps {
6
+ organisationName: string;
7
+ orgAccounts: string[];
8
+ platformAccount: string;
9
+ accountEmail: string;
10
+ identityCenter: boolean;
11
+ }
12
+ /**
13
+ * A stack for creating multi environment organisations with a production, staging and development account.
14
+ */
15
+ export declare class ManagedOrganisation extends Stack {
16
+ private organisation;
17
+ constructor(id: string, props: ManagedOrganisationProps);
18
+ }
19
+ export {};
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManagedOrganisation = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const app_1 = require("../../app");
6
+ const identityCenter_1 = require("../../config/aws/identityCenter");
7
+ const ipamDelegateAdmin_1 = require("../../config/aws/ipamDelegateAdmin");
8
+ const ramSharing_1 = require("../../config/aws/ramSharing");
9
+ const costAllocationTags_1 = require("../../config/aws/costAllocationTags");
10
+ const organisation_1 = require("../../config/aws/organisation");
11
+ const identityCenterUser_1 = require("../../config/aws/identityCenterUser");
12
+ /**
13
+ * A stack for creating multi environment organisations with a production, staging and development account.
14
+ */
15
+ class ManagedOrganisation extends aws_cdk_lib_1.Stack {
16
+ constructor(id, props) {
17
+ super(app_1.default.getInstance(), id);
18
+ // Error out if the platform account is not listed in account names
19
+ if (!props.orgAccounts.includes(props.platformAccount)) {
20
+ throw new Error(`Platform account "${props.platformAccount}" is not listed in account names.`);
21
+ }
22
+ this.organisation = new organisation_1.default(this, id, props);
23
+ const accounts = this.organisation.getAccounts();
24
+ // Delegate IPAM to the Platform account
25
+ new ipamDelegateAdmin_1.IpamDelegateAdmin(this, "IpamDelegateAdmin", {
26
+ accountId: accounts[props.platformAccount]
27
+ });
28
+ // Enable RAM Sharing
29
+ new ramSharing_1.RamSharing(this, "RamSharing");
30
+ // Enable Cost Allocation Tags
31
+ new costAllocationTags_1.CostAllocationTags(this, "CostAllocationTags");
32
+ if (props.identityCenter) {
33
+ // Setup Identity Center
34
+ const identityCenter = new identityCenter_1.IdentityCenter(this, "IdentityCenter", {
35
+ accounts: accounts
36
+ });
37
+ new identityCenterUser_1.IdentityCenterUser(this, "IdentityCenterUser", {
38
+ identityStoreId: identityCenter.identityStoreId,
39
+ identityCenterGroups: identityCenter.identityCenterGroups
40
+ });
41
+ }
42
+ }
43
+ }
44
+ exports.ManagedOrganisation = ManagedOrganisation;
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZE9yZ2FuaXNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvbWFuYWdlZE9yZ2FuaXNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBb0M7QUFFcEMsbUNBQTRCO0FBRTVCLG9FQUFpRTtBQUNqRSwwRUFBdUU7QUFDdkUsNERBQXlEO0FBQ3pELDRFQUF5RTtBQUN6RSxnRUFBeUQ7QUFDekQsNEVBQXlFO0FBY3pFOztHQUVHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxtQkFBSztJQUc1QyxZQUFZLEVBQVUsRUFBRSxLQUErQjtRQUNyRCxLQUFLLENBQUMsYUFBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTdCLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ3RELE1BQU0sSUFBSSxLQUFLLENBQ2IscUJBQXFCLEtBQUssQ0FBQyxlQUFlLG1DQUFtQyxDQUM5RSxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksc0JBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXRELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFakQsd0NBQXdDO1FBQ3hDLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQy9DLFNBQVMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztTQUMzQyxDQUFDLENBQUM7UUFFSCxxQkFBcUI7UUFDckIsSUFBSSx1QkFBVSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVuQyw4QkFBOEI7UUFDOUIsSUFBSSx1Q0FBa0IsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUVuRCxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFDeEIsd0JBQXdCO1lBQ3hCLE1BQU0sY0FBYyxHQUFHLElBQUksK0JBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ2hFLFFBQVEsRUFBRSxRQUFRO2FBQ25CLENBQUMsQ0FBQztZQUVILElBQUksdUNBQWtCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO2dCQUNqRCxlQUFlLEVBQUUsY0FBYyxDQUFDLGVBQWU7Z0JBQy9DLG9CQUFvQixFQUFFLGNBQWMsQ0FBQyxvQkFBb0I7YUFDMUQsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0NBQ0Y7QUF4Q0Qsa0RBd0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5cbmltcG9ydCB7IElkZW50aXR5Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaWRlbnRpdHlDZW50ZXJcIjtcbmltcG9ydCB7IElwYW1EZWxlZ2F0ZUFkbWluIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaXBhbURlbGVnYXRlQWRtaW5cIjtcbmltcG9ydCB7IFJhbVNoYXJpbmcgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9yYW1TaGFyaW5nXCI7XG5pbXBvcnQgeyBDb3N0QWxsb2NhdGlvblRhZ3MgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9jb3N0QWxsb2NhdGlvblRhZ3NcIjtcbmltcG9ydCBPcmdhbmlzYXRpb24gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3Mvb3JnYW5pc2F0aW9uXCI7XG5pbXBvcnQgeyBJZGVudGl0eUNlbnRlclVzZXIgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlclVzZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50cyB7XG4gIFtrZXk6IHN0cmluZ106IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcyB7XG4gIG9yZ2FuaXNhdGlvbk5hbWU6IHN0cmluZztcbiAgb3JnQWNjb3VudHM6IHN0cmluZ1tdO1xuICBwbGF0Zm9ybUFjY291bnQ6IHN0cmluZztcbiAgYWNjb3VudEVtYWlsOiBzdHJpbmc7XG4gIGlkZW50aXR5Q2VudGVyOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgc3RhY2sgZm9yIGNyZWF0aW5nIG11bHRpIGVudmlyb25tZW50IG9yZ2FuaXNhdGlvbnMgd2l0aCBhIHByb2R1Y3Rpb24sIHN0YWdpbmcgYW5kIGRldmVsb3BtZW50IGFjY291bnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYW5hZ2VkT3JnYW5pc2F0aW9uIGV4dGVuZHMgU3RhY2sge1xuICBwcml2YXRlIG9yZ2FuaXNhdGlvbjogT3JnYW5pc2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihBcHAuZ2V0SW5zdGFuY2UoKSwgaWQpO1xuXG4gICAgLy8gRXJyb3Igb3V0IGlmIHRoZSBwbGF0Zm9ybSBhY2NvdW50IGlzIG5vdCBsaXN0ZWQgaW4gYWNjb3VudCBuYW1lc1xuICAgIGlmICghcHJvcHMub3JnQWNjb3VudHMuaW5jbHVkZXMocHJvcHMucGxhdGZvcm1BY2NvdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUGxhdGZvcm0gYWNjb3VudCBcIiR7cHJvcHMucGxhdGZvcm1BY2NvdW50fVwiIGlzIG5vdCBsaXN0ZWQgaW4gYWNjb3VudCBuYW1lcy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMub3JnYW5pc2F0aW9uID0gbmV3IE9yZ2FuaXNhdGlvbih0aGlzLCBpZCwgcHJvcHMpO1xuXG4gICAgY29uc3QgYWNjb3VudHMgPSB0aGlzLm9yZ2FuaXNhdGlvbi5nZXRBY2NvdW50cygpO1xuXG4gICAgLy8gRGVsZWdhdGUgSVBBTSB0byB0aGUgUGxhdGZvcm0gYWNjb3VudFxuICAgIG5ldyBJcGFtRGVsZWdhdGVBZG1pbih0aGlzLCBcIklwYW1EZWxlZ2F0ZUFkbWluXCIsIHtcbiAgICAgIGFjY291bnRJZDogYWNjb3VudHNbcHJvcHMucGxhdGZvcm1BY2NvdW50XVxuICAgIH0pO1xuXG4gICAgLy8gRW5hYmxlIFJBTSBTaGFyaW5nXG4gICAgbmV3IFJhbVNoYXJpbmcodGhpcywgXCJSYW1TaGFyaW5nXCIpO1xuXG4gICAgLy8gRW5hYmxlIENvc3QgQWxsb2NhdGlvbiBUYWdzXG4gICAgbmV3IENvc3RBbGxvY2F0aW9uVGFncyh0aGlzLCBcIkNvc3RBbGxvY2F0aW9uVGFnc1wiKTtcblxuICAgIGlmIChwcm9wcy5pZGVudGl0eUNlbnRlcikge1xuICAgICAgLy8gU2V0dXAgSWRlbnRpdHkgQ2VudGVyXG4gICAgICBjb25zdCBpZGVudGl0eUNlbnRlciA9IG5ldyBJZGVudGl0eUNlbnRlcih0aGlzLCBcIklkZW50aXR5Q2VudGVyXCIsIHtcbiAgICAgICAgYWNjb3VudHM6IGFjY291bnRzXG4gICAgICB9KTtcblxuICAgICAgbmV3IElkZW50aXR5Q2VudGVyVXNlcih0aGlzLCBcIklkZW50aXR5Q2VudGVyVXNlclwiLCB7XG4gICAgICAgIGlkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlDZW50ZXIuaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICBpZGVudGl0eUNlbnRlckdyb3VwczogaWRlbnRpdHlDZW50ZXIuaWRlbnRpdHlDZW50ZXJHcm91cHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,13 @@
1
+ import { Construct } from "constructs";
2
+ import { ManagedAccount, ManagedAccountProps } from "./managedAccount";
3
+ interface ManagedPlatformProps extends ManagedAccountProps {
4
+ orgAccounts: string[];
5
+ region: string;
6
+ }
7
+ /**
8
+ * A stack for creating multi environment organisations with a production, staging and development account.
9
+ */
10
+ export declare class ManagedPlatform extends ManagedAccount {
11
+ constructor(scope: Construct, id: string, props: ManagedPlatformProps);
12
+ }
13
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManagedPlatform = void 0;
4
+ const ipam_1 = require("../../config/aws/ipam");
5
+ const ipamPool_1 = require("../../resources/aws/networking/ipamPool");
6
+ const managedAccount_1 = require("./managedAccount");
7
+ /**
8
+ * A stack for creating multi environment organisations with a production, staging and development account.
9
+ */
10
+ class ManagedPlatform extends managedAccount_1.ManagedAccount {
11
+ constructor(scope, id, props) {
12
+ super(scope, id, props);
13
+ const ipam = new ipam_1.Ipam(this, "Ipam");
14
+ new ipamPool_1.IpamPool(this, "IpamPool", {
15
+ orgAccounts: props.orgAccounts,
16
+ region: props.region,
17
+ ipamScope: ipam.privateDefaultScopeId
18
+ });
19
+ }
20
+ }
21
+ exports.ManagedPlatform = ManagedPlatform;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZFBsYXRmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9tYW5hZ2VkUGxhdGZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTZDO0FBQzdDLHNFQUFtRTtBQUVuRSxxREFBdUU7QUFPdkU7O0dBRUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsK0JBQWM7SUFDakQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixNQUFNLElBQUksR0FBRyxJQUFJLFdBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEMsSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDN0IsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtTQUN0QyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFaRCwwQ0FZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElwYW0gfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9pcGFtXCI7XG5pbXBvcnQgeyBJcGFtUG9vbCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvaXBhbVBvb2xcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBNYW5hZ2VkQWNjb3VudCwgTWFuYWdlZEFjY291bnRQcm9wcyB9IGZyb20gXCIuL21hbmFnZWRBY2NvdW50XCI7XG5cbmludGVyZmFjZSBNYW5hZ2VkUGxhdGZvcm1Qcm9wcyBleHRlbmRzIE1hbmFnZWRBY2NvdW50UHJvcHMge1xuICBvcmdBY2NvdW50czogc3RyaW5nW107XG4gIHJlZ2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc3RhY2sgZm9yIGNyZWF0aW5nIG11bHRpIGVudmlyb25tZW50IG9yZ2FuaXNhdGlvbnMgd2l0aCBhIHByb2R1Y3Rpb24sIHN0YWdpbmcgYW5kIGRldmVsb3BtZW50IGFjY291bnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYW5hZ2VkUGxhdGZvcm0gZXh0ZW5kcyBNYW5hZ2VkQWNjb3VudCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNYW5hZ2VkUGxhdGZvcm1Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgY29uc3QgaXBhbSA9IG5ldyBJcGFtKHRoaXMsIFwiSXBhbVwiKTtcblxuICAgIG5ldyBJcGFtUG9vbCh0aGlzLCBcIklwYW1Qb29sXCIsIHtcbiAgICAgIG9yZ0FjY291bnRzOiBwcm9wcy5vcmdBY2NvdW50cyxcbiAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgaXBhbVNjb3BlOiBpcGFtLnByaXZhdGVEZWZhdWx0U2NvcGVJZFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { AwsStackProps } from "../../resources/aws/awsStack";
2
+ import { ScalingType } from "../../resources/aws/compute/ecs";
3
+ import { IManagedPolicy, PolicyDocument } from "aws-cdk-lib/aws-iam";
4
+ import { KeyValue } from "../../types";
5
+ /**
6
+ * Intersected with BasicAppProps in the getProps method. This allows the BasicApp construct
7
+ * to treat these as required properties and avoid constant null checking.
8
+ */
9
+ export interface BasicAppPropDefaults {
10
+ tags: KeyValue;
11
+ serviceName: string;
12
+ clusterName: string;
13
+ scalingType: ScalingType;
14
+ containerPort: number;
15
+ }
16
+ export interface BasicAppProps {
17
+ account?: string;
18
+ clusterName?: string;
19
+ containerEntryPoint?: string[];
20
+ containerCommand?: string[];
21
+ containerEnvironment?: KeyValue;
22
+ containerPort?: number;
23
+ containerSecrets?: string[];
24
+ owner?: string;
25
+ parentDomain?: string;
26
+ environment: string;
27
+ listenerPort?: number;
28
+ region?: string;
29
+ scalingType?: ScalingType;
30
+ serviceName?: string;
31
+ taskRoleInlinePolicies?: {
32
+ [name: string]: PolicyDocument;
33
+ };
34
+ taskRoleManagedPolicies?: IManagedPolicy[];
35
+ tags?: KeyValue;
36
+ }
37
+ export declare class BasicApp {
38
+ private vpcStack;
39
+ private databaseStack;
40
+ private secretStack;
41
+ private computeStack;
42
+ constructor(id: string, rawProps: BasicAppProps);
43
+ getStackProps(props: BasicAppProps): AwsStackProps | undefined;
44
+ getProps(id: string, rawProps: BasicAppProps): BasicAppProps & BasicAppPropDefaults;
45
+ }
46
+ export default BasicApp;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BasicApp = void 0;
4
+ const awsStack_1 = require("../../resources/aws/awsStack");
5
+ const vpc_1 = require("../../resources/aws/networking/vpc");
6
+ const ecs_1 = require("../../resources/aws/compute/ecs");
7
+ const ecsSpot_1 = require("../../resources/aws/compute/ecsSpot");
8
+ const secrets_1 = require("../../resources/aws/secrets");
9
+ const storage_1 = require("../../resources/aws/storage");
10
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
11
+ const databaseInstance_1 = require("../../resources/aws/database/databaseInstance");
12
+ class BasicApp {
13
+ constructor(id, rawProps) {
14
+ const props = this.getProps(id, rawProps);
15
+ const stackProps = this.getStackProps(props);
16
+ this.vpcStack = new awsStack_1.default(`${id}Network`, [], stackProps)
17
+ .addNetwork(vpc_1.Vpc.build(`${id}Vpc`, {
18
+ environment: props.environment,
19
+ region: props.region,
20
+ tags: props.tags
21
+ }))
22
+ .addContainerRegistry(storage_1.Ecr.build(`${id}Ecr`));
23
+ this.databaseStack = new awsStack_1.default(`${id}Database`, this.vpcStack, stackProps)
24
+ .addNetwork(this.vpcStack.getNetwork())
25
+ .addResource(databaseInstance_1.default.build(`${id}Database`, {
26
+ tags: props.tags
27
+ }));
28
+ // Fetches the dbResource from the databaseStack
29
+ const dbResource = this.databaseStack.getResource(`${id}Database`);
30
+ const secretObjectValue = {};
31
+ if (props.containerSecrets) {
32
+ for (const secretObject of props.containerSecrets) {
33
+ secretObjectValue[secretObject] = aws_cdk_lib_1.SecretValue.unsafePlainText("");
34
+ }
35
+ }
36
+ this.secretStack = new awsStack_1.default(`${id}Secret`, [], stackProps).addResource(secrets_1.Secret.build(`${id}Secret`, {
37
+ secretName: `/${props.clusterName}/${props.serviceName}`,
38
+ secretObjectValue: secretObjectValue,
39
+ tags: props.tags
40
+ }));
41
+ this.computeStack = new awsStack_1.default(`${id}Compute`, [this.vpcStack, this.databaseStack, this.secretStack], stackProps)
42
+ .addNetwork(this.vpcStack.getNetwork())
43
+ .addResource(ecsSpot_1.default.build(`${id}Fargate`, {
44
+ clusterName: props.clusterName,
45
+ //TODO: This should work via line 124, but doesn't work (at least on update)
46
+ databaseConnection: dbResource.databaseSecurityGroup.connections,
47
+ containerEntryPoint: props.containerEntryPoint,
48
+ containerCommand: props.containerCommand,
49
+ containerEnvironment: props.containerEnvironment,
50
+ containerPort: props.containerPort,
51
+ containerSecrets: secretObjectValue,
52
+ ecrRepository: this.vpcStack.getContainerRegistry(),
53
+ parentDomain: props.parentDomain?.toLowerCase(),
54
+ listenerPort: props.listenerPort,
55
+ serviceName: props.serviceName,
56
+ taskRoleInlinePolicies: props.taskRoleInlinePolicies,
57
+ taskRoleManagedPolicies: props.taskRoleManagedPolicies,
58
+ tags: props.tags
59
+ }))
60
+ .connect(`${id}Fargate`, `${id}Database`, 5432);
61
+ }
62
+ getStackProps(props) {
63
+ if (!props)
64
+ return;
65
+ return {
66
+ account: props.account,
67
+ region: props.region,
68
+ environment: props.environment
69
+ };
70
+ }
71
+ getProps(id, rawProps) {
72
+ const defaultProps = {
73
+ tags: {
74
+ "fjall:costAllocation:service": "app",
75
+ "fjall:costAllocation:environment": rawProps.environment || "production",
76
+ "fjall:costAllocation:owner": rawProps.owner || "Engineer"
77
+ },
78
+ scalingType: ecs_1.ScalingType.CPU,
79
+ containerPort: rawProps.containerPort || 3000,
80
+ serviceName: `${id}Service`,
81
+ clusterName: `${id}Cluster`,
82
+ containerEntryPoint: ["node", "main.js"],
83
+ containerCommand: rawProps.containerPort
84
+ ? [`${rawProps.containerPort}`]
85
+ : [`3000`]
86
+ };
87
+ return {
88
+ ...defaultProps,
89
+ ...rawProps
90
+ };
91
+ }
92
+ }
93
+ exports.BasicApp = BasicApp;
94
+ exports.default = BasicApp;
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdEluc3RhbmNlQXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9zcG90SW5zdGFuY2VBcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQXVFO0FBQ3ZFLDREQUF5RDtBQUN6RCx5REFBK0U7QUFDL0UsaUVBQTZEO0FBQzdELHlEQUFxRDtBQUNyRCx5REFBa0Q7QUFDbEQsNkNBQTBDO0FBRzFDLG9GQUFxRTtBQXFDckUsTUFBYSxRQUFRO0lBTW5CLFlBQVksRUFBVSxFQUFFLFFBQXVCO1FBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGtCQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDO2FBQ3pELFVBQVUsQ0FDVCxTQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FBQyxDQUNIO2FBQ0Esb0JBQW9CLENBQUMsYUFBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksa0JBQVEsQ0FDL0IsR0FBRyxFQUFFLFVBQVUsRUFDZixJQUFJLENBQUMsUUFBUSxFQUNiLFVBQVUsQ0FDWDthQUNFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ3RDLFdBQVcsQ0FDViwwQkFBUSxDQUFDLEtB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LFlBQVk7Z0JBQ3RDLDRCQUE0QixFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksVUFBVTthQUMzRDtZQUNELFdBQVcsRUFBRSxpQkFBVyxDQUFDLEdBQUc7WUFDNUIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLElBQUksSUFBSTtZQUM3QyxXQUFXLEVBQUUsR0FBRyxFQUFFLFNBQVM7WUFDM0IsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTO1lBQzNCLG1CQUFtQixFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztZQUN4QyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsYUFBYTtnQkFDdEMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUNiLENBQUM7UUFFRixPQUFPO1lBQ0wsR0FBRyxZQUFZO1lBQ2YsR0FBRyxRQUFRO1NBQ1osQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXBIRCw0QkFvSEM7QUFDRCxrQkFBZSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXdzU3RhY2ssIHsgQXdzU3RhY2tQcm9wcyB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2F3c1N0YWNrXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyU2VjcmV0LCBTY2FsaW5nVHlwZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWNzXCI7XG5pbXBvcnQgRWMyQ2x1c3RlciBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1Nwb3RcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcbmltcG9ydCB7IEVjciB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3N0b3JhZ2VcIjtcbmltcG9ydCB7IFNlY3JldFZhbHVlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJTWFuYWdlZFBvbGljeSwgUG9saWN5RG9jdW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBEYXRhYmFzZSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9kYXRhYmFzZUluc3RhbmNlXCI7XG5cbi8qKlxuICogSW50ZXJzZWN0ZWQgd2l0aCBCYXNpY0FwcFByb3BzIGluIHRoZSBnZXRQcm9wcyBtZXRob2QuIFRoaXMgYWxsb3dzIHRoZSBCYXNpY0FwcCBjb25zdHJ1Y3RcbiAqIHRvIHRyZWF0IHRoZXNlIGFzIHJlcXVpcmVkIHByb3BlcnRpZXMgYW5kIGF2b2lkIGNvbnN0YW50IG51bGwgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaWNBcHBQcm9wRGVmYXVsdHMge1xuICB0YWdzOiBLZXlWYWx1ZTtcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgY2x1c3Rlck5hbWU6IHN0cmluZztcbiAgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlO1xuICBjb250YWluZXJQb3J0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaWNBcHBQcm9wcyB7XG4gIGFjY291bnQ/OiBzdHJpbmc7XG4gIGNsdXN0ZXJOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJFbnRyeVBvaW50Pzogc3RyaW5nW107XG4gIGNvbnRhaW5lckNvbW1hbmQ/OiBzdHJpbmdbXTtcbiAgY29udGFpbmVyRW52aXJvbm1lbnQ/OiBLZXlWYWx1ZTtcbiAgY29udGFpbmVyUG9ydD86IG51bWJlcjtcbiAgY29udGFpbmVyU2VjcmV0cz86IHN0cmluZ1tdO1xuICAvLyBUaGUgdGVhbS9kb21haW4vYnVzaW5lc3MtdW5pdCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIHNlcnZpY2VcbiAgb3duZXI/OiBzdHJpbmc7XG4gIHBhcmVudERvbWFpbj86IHN0cmluZzsgLy8gRml4IHRvIG1ha2UgYSBkZXBlbmRlbmN5IG9mIHByb3RvY29sXG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGxpc3RlbmVyUG9ydD86IG51bWJlcjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICBzY2FsaW5nVHlwZT86IFNjYWxpbmdUeXBlO1xuICBzZXJ2aWNlTmFtZT86IHN0cmluZztcbiAgdGFza1JvbGVJbmxpbmVQb2xpY2llcz86IHtcbiAgICBbbmFtZTogc3RyaW5nXTogUG9saWN5RG9jdW1lbnQ7XG4gIH07XG4gIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzPzogSU1hbmFnZWRQb2xpY3lbXTtcbiAgdGFncz86IEtleVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgQmFzaWNBcHAge1xuICBwcml2YXRlIHZwY1N0YWNrOiBBd3NTdGFjaztcbiAgcHJpdmF0ZSBkYXRhYmFzZVN0YWNrOiBBd3NTdGFjaztcbiAgcHJpdmF0ZSBzZWNyZXRTdGFjazogQXdzU3RhY2s7XG4gIHByaXZhdGUgY29tcHV0ZVN0YWNrOiBBd3NTdGFjaztcblxuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCByYXdQcm9wczogQmFzaWNBcHBQcm9wcykge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhpZCwgcmF3UHJvcHMpO1xuICAgIGNvbnN0IHN0YWNrUHJvcHMgPSB0aGlzLmdldFN0YWNrUHJvcHMocHJvcHMpO1xuXG4gICAgdGhpcy52cGNTdGFjayA9IG5ldyBBd3NTdGFjayhgJHtpZH1OZXR3b3JrYCwgW10sIHN0YWNrUHJvcHMpXG4gICAgICAuYWRkTmV0d29yayhcbiAgICAgICAgVnBjLmJ1aWxkKGAke2lkfVZwY2AsIHtcbiAgICAgICAgICBlbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLmFkZENvbnRhaW5lclJlZ2lzdHJ5KEVjci5idWlsZChgJHtpZH1FY3JgKSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlU3RhY2sgPSBuZXcgQXdzU3RhY2soXG4gICAgICBgJHtpZH1EYXRhYmFzZWAsXG4gICAgICB0aGlzLnZwY1N0YWNrLFxuICAgICAgc3RhY2tQcm9wc1xuICAgIClcbiAgICAgIC5hZGROZXR3b3JrKHRoaXMudnBjU3RhY2suZ2V0TmV0d29yaygpKVxuICAgICAgLmFkZFJlc291cmNlKFxuICAgICAgICBEYXRhYmFzZS5idWlsZChgJHtpZH1EYXRhYmFzZWAsIHtcbiAgICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgLy8gRmV0Y2hlcyB0aGUgZGJSZXNvdXJjZSBmcm9tIHRoZSBkYXRhYmFzZVN0YWNrXG4gICAgY29uc3QgZGJSZXNvdXJjZSA9IHRoaXMuZGF0YWJhc2VTdGFjay5nZXRSZXNvdXJjZShcbiAgICAgIGAke2lkfURhdGFiYXNlYFxuICAgICkgYXMgRGF0YWJhc2U7XG5cbiAgICBjb25zdCBzZWNyZXRPYmplY3RWYWx1ZTogQ29udGFpbmVyU2VjcmV0ID0ge307XG4gICAgaWYgKHByb3BzLmNvbnRhaW5lclNlY3JldHMpIHtcbiAgICAgIGZvciAoY29uc3Qgc2VjcmV0T2JqZWN0IG9mIHByb3BzLmNvbnRhaW5lclNlY3JldHMpIHtcbiAgICAgICAgc2VjcmV0T2JqZWN0VmFsdWVbc2VjcmV0T2JqZWN0XSA9IFNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChcIlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlY3JldFN0YWNrID0gbmV3IEF3c1N0YWNrKGAke2lkfVNlY3JldGAsIFtdLCBzdGFja1Byb3BzKS5hZGRSZXNvdXJjZShcbiAgICAgIFNlY3JldC5idWlsZChgJHtpZH1TZWNyZXRgLCB7XG4gICAgICAgIHNlY3JldE5hbWU6IGAvJHtwcm9wcy5jbHVzdGVyTmFtZX0vJHtwcm9wcy5zZXJ2aWNlTmFtZX1gLFxuICAgICAgICBzZWNyZXRPYmplY3RWYWx1ZTogc2VjcmV0T2JqZWN0VmFsdWUsXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuY29tcHV0ZVN0YWNrID0gbmV3IEF3c1N0YWNrKFxuICAgICAgYCR7aWR9Q29tcHV0ZWAsXG4gICAgICBbdGhpcy52cGNTdGFjaywgdGhpcy5kYXRhYmFzZVN0YWNrLCB0aGlzLnNlY3JldFN0YWNrXSxcbiAgICAgIHN0YWNrUHJvcHNcbiAgICApXG4gICAgICAuYWRkTmV0d29yayh0aGlzLnZwY1N0YWNrLmdldE5ldHdvcmsoKSlcbiAgICAgIC5hZGRSZXNvdXJjZShcbiAgICAgICAgRWMyQ2x1c3Rlci5idWlsZChgJHtpZH1GYXJnYXRlYCwge1xuICAgICAgICAgIGNsdXN0ZXJOYW1lOiBwcm9wcy5jbHVzdGVyTmFtZSxcbiAgICAgICAgICAvL1RPRE86IFRoaXMgc2hvdWxkIHdvcmsgdmlhIGxpbmUgMTI0LCBidXQgZG9lc24ndCB3b3JrIChhdCBsZWFzdCBvbiB1cGRhdGUpXG4gICAgICAgICAgZGF0YWJhc2VDb25uZWN0aW9uOiBkYlJlc291cmNlLmRhdGFiYXNlU2VjdXJpdHlHcm91cC5jb25uZWN0aW9ucyxcbiAgICAgICAgICBjb250YWluZXJFbnRyeVBvaW50OiBwcm9wcy5jb250YWluZXJFbnRyeVBvaW50LFxuICAgICAgICAgIGNvbnRhaW5lckNvbW1hbmQ6IHByb3BzLmNvbnRhaW5lckNvbW1hbmQsXG4gICAgICAgICAgY29udGFpbmVyRW52aXJvbm1lbnQ6IHByb3BzLmNvbnRhaW5lckVudmlyb25tZW50LFxuICAgICAgICAgIGNvbnRhaW5lclBvcnQ6IHByb3BzLmNvbnRhaW5lclBvcnQsXG4gICAgICAgICAgY29udGFpbmVyU2VjcmV0czogc2VjcmV0T2JqZWN0VmFsdWUsXG4gICAgICAgICAgZWNyUmVwb3NpdG9yeTogdGhpcy52cGNTdGFjay5nZXRDb250YWluZXJSZWdpc3RyeSgpLFxuICAgICAgICAgIHBhcmVudERvbWFpbjogcHJvcHMucGFyZW50RG9tYWluPy50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIGxpc3RlbmVyUG9ydDogcHJvcHMubGlzdGVuZXJQb3J0LFxuICAgICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICB0YXNrUm9sZUlubGluZVBvbGljaWVzOiBwcm9wcy50YXNrUm9sZUlubGluZVBvbGljaWVzLFxuICAgICAgICAgIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzOiBwcm9wcy50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuY29ubmVjdChgJHtpZH1GYXJnYXRlYCwgYCR7aWR9RGF0YWJhc2VgLCA1NDMyKTtcbiAgfVxuXG4gIGdldFN0YWNrUHJvcHMocHJvcHM6IEJhc2ljQXBwUHJvcHMpOiBBd3NTdGFja1Byb3BzIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXByb3BzKSByZXR1cm47XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudDogcHJvcHMuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50XG4gICAgfTtcbiAgfVxuXG4gIGdldFByb3BzKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcmF3UHJvcHM6IEJhc2ljQXBwUHJvcHNcbiAgKTogQmFzaWNBcHBQcm9wcyAmIEJhc2ljQXBwUHJvcERlZmF1bHRzIHtcbiAgICBjb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICB0YWdzOiB7XG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImFwcFwiLFxuICAgICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6XG4gICAgICAgICAgcmF3UHJvcHMuZW52aXJvbm1lbnQgfHwgXCJwcm9kdWN0aW9uXCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogcmF3UHJvcHMub3duZXIgfHwgXCJFbmdpbmVlclwiXG4gICAgICB9LFxuICAgICAgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlLkNQVSxcbiAgICAgIGNvbnRhaW5lclBvcnQ6IHJhd1Byb3BzLmNvbnRhaW5lclBvcnQgfHwgMzAwMCxcbiAgICAgIHNlcnZpY2VOYW1lOiBgJHtpZH1TZXJ2aWNlYCxcbiAgICAgIGNsdXN0ZXJOYW1lOiBgJHtpZH1DbHVzdGVyYCxcbiAgICAgIGNvbnRhaW5lckVudHJ5UG9pbnQ6IFtcIm5vZGVcIiwgXCJtYWluLmpzXCJdLFxuICAgICAgY29udGFpbmVyQ29tbWFuZDogcmF3UHJvcHMuY29udGFpbmVyUG9ydFxuICAgICAgICA/IFtgJHtyYXdQcm9wcy5jb250YWluZXJQb3J0fWBdXG4gICAgICAgIDogW2AzMDAwYF1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRQcm9wcyxcbiAgICAgIC4uLnJhd1Byb3BzXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgQmFzaWNBcHA7XG4iXX0=
@@ -0,0 +1,9 @@
1
+ import { Stack } from "aws-cdk-lib";
2
+ export interface subdomainHostedZoneProps {
3
+ delegatedZone: string;
4
+ parentHostedZoneName: string;
5
+ parentAccountName: string;
6
+ }
7
+ export declare class SubdomainHostedZone extends Stack {
8
+ constructor(id: string, props: subdomainHostedZoneProps);
9
+ }