@fjall/components-infrastructure 0.1.5 → 0.1.10

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 (133) hide show
  1. package/dist/lib/config/aws/costAllocationTags.js +58 -0
  2. package/dist/lib/config/aws/delegateHostedZoneRole.d.ts +5 -0
  3. package/dist/lib/config/aws/delegateHostedZoneRole.js +77 -0
  4. package/dist/lib/config/aws/identityCenter.js +107 -0
  5. package/dist/lib/config/aws/index.d.ts +8 -0
  6. package/dist/lib/config/aws/index.js +25 -0
  7. package/dist/lib/config/aws/ipam.d.ts +5 -0
  8. package/dist/lib/config/aws/ipam.js +30 -0
  9. package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +9 -0
  10. package/dist/lib/config/aws/ipamDelegateAdmin.js +62 -0
  11. package/dist/lib/config/aws/ipamPool.d.ts +5 -0
  12. package/dist/lib/config/aws/ipamPool.js +56 -0
  13. package/dist/lib/config/aws/{base/iamIdentityCenter.d.ts → ipamPoolResourceShare.d.ts} +2 -2
  14. package/dist/lib/config/aws/ipamPoolResourceShare.js +42 -0
  15. package/dist/lib/config/aws/organisationId.d.ts +5 -0
  16. package/dist/lib/config/aws/organisationId.js +40 -0
  17. package/dist/lib/config/aws/{base/ipamPool.d.ts → ramEnableSharing.d.ts} +1 -1
  18. package/dist/lib/config/aws/ramEnableSharing.js +35 -0
  19. package/dist/lib/config/aws/{base/ipam.d.ts → users.d.ts} +1 -1
  20. package/dist/lib/config/aws/users.js +126 -0
  21. package/dist/lib/config/fjall/hostedZones/fjall.io.d.ts +10 -0
  22. package/dist/lib/config/fjall/hostedZones/fjall.io.js +25 -0
  23. package/dist/lib/index.d.ts +3 -0
  24. package/dist/lib/index.js +4 -1
  25. package/dist/lib/patterns/aws/basicApp.d.ts +47 -0
  26. package/dist/lib/patterns/aws/basicApp.js +90 -0
  27. package/dist/lib/patterns/aws/buildkite.d.ts +50 -0
  28. package/dist/lib/patterns/aws/buildkite.js +344 -0
  29. package/dist/lib/patterns/aws/index.d.ts +2 -2
  30. package/dist/lib/patterns/aws/index.js +3 -3
  31. package/dist/lib/patterns/aws/{multiEnvironmentOrganisation.d.ts → managedOrganisation.d.ts} +8 -10
  32. package/dist/lib/patterns/aws/managedOrganisation.js +159 -0
  33. package/dist/lib/resources/aws/awsStack.d.ts +5 -0
  34. package/dist/lib/resources/aws/awsStack.js +11 -1
  35. package/dist/lib/resources/aws/compute/ecs.d.ts +76 -0
  36. package/dist/lib/resources/aws/compute/ecs.js +265 -0
  37. package/dist/lib/resources/aws/compute/lambda.d.ts +12 -5
  38. package/dist/lib/resources/aws/compute/lambda.js +23 -5
  39. package/dist/lib/resources/aws/constant/ecr.js +4 -3
  40. package/dist/lib/resources/aws/constant/vpc.d.ts +10 -2
  41. package/dist/lib/resources/aws/constant/vpc.js +18 -8
  42. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +13 -0
  43. package/dist/lib/resources/aws/iam/identityCenter/group.js +14 -0
  44. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +13 -0
  45. package/dist/lib/resources/aws/iam/index.d.ts +5 -0
  46. package/dist/lib/resources/aws/iam/index.js +22 -0
  47. package/dist/lib/resources/aws/iam/instanceProfile.d.ts +5 -0
  48. package/dist/lib/resources/aws/iam/instanceProfile.js +13 -0
  49. package/dist/lib/resources/aws/iam/managedPolicy.d.ts +5 -0
  50. package/dist/lib/resources/aws/iam/managedPolicy.js +14 -0
  51. package/dist/lib/resources/aws/iam/policy.d.ts +5 -0
  52. package/dist/lib/resources/aws/iam/policy.js +13 -0
  53. package/dist/lib/resources/aws/iam/role.js +2 -7
  54. package/dist/lib/resources/aws/iam/securityGroup.d.ts +5 -0
  55. package/dist/lib/resources/aws/iam/securityGroup.js +14 -0
  56. package/dist/lib/resources/aws/index.d.ts +1 -0
  57. package/dist/lib/resources/aws/index.js +18 -0
  58. package/dist/lib/resources/aws/logging/logGroup.d.ts +5 -1
  59. package/dist/lib/resources/aws/logging/logGroup.js +4 -5
  60. package/dist/lib/resources/aws/networking/hostedZone.d.ts +19 -3
  61. package/dist/lib/resources/aws/networking/hostedZone.js +59 -11
  62. package/dist/lib/resources/aws/networking/index.d.ts +3 -0
  63. package/dist/lib/resources/aws/networking/index.js +20 -0
  64. package/dist/lib/resources/aws/networking/ipam.d.ts +2 -2
  65. package/dist/lib/resources/aws/networking/ipam.js +3 -3
  66. package/dist/lib/resources/aws/networking/ipamPool.d.ts +3 -7
  67. package/dist/lib/resources/aws/networking/ipamPool.js +5 -27
  68. package/dist/lib/resources/aws/store/alias.d.ts +5 -0
  69. package/dist/lib/resources/aws/store/alias.js +13 -0
  70. package/dist/lib/resources/aws/store/database.d.ts +7 -2
  71. package/dist/lib/resources/aws/store/database.js +9 -5
  72. package/dist/lib/resources/aws/store/index.d.ts +7 -0
  73. package/dist/lib/resources/aws/store/index.js +24 -0
  74. package/dist/lib/resources/aws/store/kms.d.ts +14 -0
  75. package/dist/lib/resources/aws/store/kms.js +34 -0
  76. package/dist/lib/resources/aws/store/parameter.d.ts +26 -0
  77. package/dist/lib/resources/aws/store/parameter.js +100 -0
  78. package/dist/lib/resources/aws/store/rds.d.ts +15 -15
  79. package/dist/lib/resources/aws/store/rds.js +110 -68
  80. package/dist/lib/resources/aws/store/s3.d.ts +11 -0
  81. package/dist/lib/resources/aws/store/s3.js +43 -0
  82. package/dist/lib/resources/aws/store/secret.d.ts +26 -0
  83. package/dist/lib/resources/aws/store/secret.js +55 -0
  84. package/dist/lib/resources/aws/utilities/awsCustomResource.js +1 -6
  85. package/dist/lib/resources/aws/utilities/cfnOutput.js +2 -5
  86. package/dist/lib/resources/aws/utilities/customResource.d.ts +20 -3
  87. package/dist/lib/resources/aws/utilities/customResource.js +24 -5
  88. package/dist/lib/resources/aws/utilities/customResourceProvider.js +1 -5
  89. package/dist/lib/resources/aws/utilities/resourceShare.d.ts +5 -0
  90. package/dist/lib/resources/aws/utilities/resourceShare.js +13 -0
  91. package/dist/lib/resources/index.d.ts +1 -0
  92. package/dist/lib/resources/index.js +18 -0
  93. package/dist/lib/utils/getAccountId.d.ts +1 -0
  94. package/dist/lib/utils/getAccountId.js +11 -0
  95. package/dist/lib/utils/getConfig.d.ts +4 -3
  96. package/dist/lib/utils/getConfig.js +26 -12
  97. package/dist/lib/utils/getStackOutput.d.ts +1 -0
  98. package/dist/lib/utils/getStackOutput.js +20 -0
  99. package/dist/lib/utils/index.d.ts +1 -0
  100. package/dist/lib/utils/index.js +18 -0
  101. package/dist/lib/utils/tagResource.d.ts +4 -0
  102. package/dist/lib/utils/tagResource.js +10 -0
  103. package/package.json +23 -18
  104. package/dist/lib/config/aws/base/costAllocationTags.js +0 -57
  105. package/dist/lib/config/aws/base/iamIdentityCenter.js +0 -86
  106. package/dist/lib/config/aws/base/identityCenter.js +0 -90
  107. package/dist/lib/config/aws/base/ipam.js +0 -29
  108. package/dist/lib/config/aws/base/ipamPool.js +0 -46
  109. package/dist/lib/examples/custom-resources/lambda/aws-cost-allocation-tags/awsCostAllocationTagsLambda.d.ts +0 -2
  110. package/dist/lib/examples/custom-resources/lambda/aws-cost-allocation-tags/awsCostAllocationTagsLambda.js +0 -62
  111. package/dist/lib/examples/cutomResourceExample.d.ts +0 -6
  112. package/dist/lib/examples/cutomResourceExample.js +0 -45
  113. package/dist/lib/patterns/aws/customResource.d.ts +0 -7
  114. package/dist/lib/patterns/aws/customResource.js +0 -28
  115. package/dist/lib/patterns/aws/multiEnvironmentOrganisation.js +0 -107
  116. package/dist/lib/patterns/aws/webApp.d.ts +0 -17
  117. package/dist/lib/patterns/aws/webApp.js +0 -36
  118. package/dist/lib/resources/aws/compute/__tests__/fargate.test.d.ts +0 -1
  119. package/dist/lib/resources/aws/compute/__tests__/fargate.test.js +0 -21
  120. package/dist/lib/resources/aws/compute/fargate.d.ts +0 -23
  121. package/dist/lib/resources/aws/compute/fargate.js +0 -50
  122. package/dist/lib/resources/aws/constant/__tests__/vpc.test.d.ts +0 -1
  123. package/dist/lib/resources/aws/constant/__tests__/vpc.test.js +0 -13
  124. package/dist/lib/resources/aws/iam/assignment.js +0 -13
  125. package/dist/lib/resources/aws/iam/group.js +0 -15
  126. package/dist/lib/resources/aws/iam/iamRole.d.ts +0 -5
  127. package/dist/lib/resources/aws/iam/iamRole.js +0 -18
  128. package/dist/lib/resources/aws/iam/permissionSet.js +0 -13
  129. /package/dist/lib/config/aws/{base/costAllocationTags.d.ts → costAllocationTags.d.ts} +0 -0
  130. /package/dist/lib/config/aws/{base/identityCenter.d.ts → identityCenter.d.ts} +0 -0
  131. /package/dist/lib/resources/aws/iam/{assignment.d.ts → identityCenter/assignment.d.ts} +0 -0
  132. /package/dist/lib/resources/aws/iam/{group.d.ts → identityCenter/group.d.ts} +0 -0
  133. /package/dist/lib/resources/aws/iam/{permissionSet.d.ts → identityCenter/permissionSet.d.ts} +0 -0
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OrganisationId = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const customResources = require("aws-cdk-lib/custom-resources");
6
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
+ const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
8
+ class OrganisationId extends aws_cdk_lib_1.Stack {
9
+ constructor(scope, id) {
10
+ super(scope, id);
11
+ const organisation = new awsCustomResource_1.AwsCustomResource(this, "ipamDelegateAdmin", {
12
+ functionName: "organisationId",
13
+ onCreate: {
14
+ service: "organizations",
15
+ action: "describeOrganization",
16
+ physicalResourceId: customResources.PhysicalResourceId.of("organisationId")
17
+ },
18
+ onUpdate: {
19
+ service: "organizations",
20
+ action: "describeOrganization",
21
+ physicalResourceId: customResources.PhysicalResourceId.of("organisationId")
22
+ },
23
+ resourceType: "Custom::organisationId",
24
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
25
+ new aws_iam_1.PolicyStatement({
26
+ actions: ["organizations:DescribeOrganization"],
27
+ resources: ["*"],
28
+ effect: aws_iam_1.Effect.ALLOW
29
+ })
30
+ ])
31
+ });
32
+ new aws_cdk_lib_1.CfnOutput(this, "OrganisationId", {
33
+ key: "OrganisationId",
34
+ value: organisation.getResponseField("Organization.Id"),
35
+ exportName: "OrganisationId"
36
+ });
37
+ }
38
+ }
39
+ exports.OrganisationId = OrganisationId;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uSWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9vcmdhbmlzYXRpb25JZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBK0M7QUFDL0MsZ0VBQWdFO0FBQ2hFLGlEQUE4RDtBQUc5RCx1RkFBb0Y7QUFFcEYsTUFBYSxjQUFlLFNBQVEsbUJBQUs7SUFDdkMsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFlBQVksR0FBRyxJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUNwRSxZQUFZLEVBQUUsZ0JBQWdCO1lBQzlCLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsZUFBZTtnQkFDeEIsTUFBTSxFQUFFLHNCQUFzQjtnQkFDOUIsa0JBQWtCLEVBQ2hCLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7YUFDMUQ7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLE1BQU0sRUFBRSxzQkFBc0I7Z0JBQzlCLGtCQUFrQixFQUNoQixlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2FBQzFEO1lBQ0QsWUFBWSxFQUFFLHdCQUF3QjtZQUN0QyxNQUFNLEVBQUUsZUFBZSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQztnQkFDN0QsSUFBSSx5QkFBZSxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQztvQkFDL0MsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO29CQUNoQixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO2lCQUNyQixDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDcEMsR0FBRyxFQUFFLGdCQUFnQjtZQUNyQixLQUFLLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDO1lBQ3ZELFVBQVUsRUFBRSxnQkFBZ0I7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbENELHdDQWtDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGN1c3RvbVJlc291cmNlcyBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcblxuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbklkIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IG9yZ2FuaXNhdGlvbiA9IG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcImlwYW1EZWxlZ2F0ZUFkbWluXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJvcmdhbmlzYXRpb25JZFwiLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJvcmdhbml6YXRpb25zXCIsXG4gICAgICAgIGFjdGlvbjogXCJkZXNjcmliZU9yZ2FuaXphdGlvblwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL09yZ2FuaXphdGlvbnMuaHRtbCNkZXNjcmliZU9yZ2FuaXphdGlvbi1wcm9wZXJ0eVxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6XG4gICAgICAgICAgY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcIm9yZ2FuaXNhdGlvbklkXCIpXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJvcmdhbml6YXRpb25zXCIsXG4gICAgICAgIGFjdGlvbjogXCJkZXNjcmliZU9yZ2FuaXphdGlvblwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL09yZ2FuaXphdGlvbnMuaHRtbCNkZXNjcmliZU9yZ2FuaXphdGlvbi1wcm9wZXJ0eVxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6XG4gICAgICAgICAgY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcIm9yZ2FuaXNhdGlvbklkXCIpXG4gICAgICB9LFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6b3JnYW5pc2F0aW9uSWRcIixcbiAgICAgIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1wib3JnYW5pemF0aW9uczpEZXNjcmliZU9yZ2FuaXphdGlvblwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1dcbiAgICAgICAgfSlcbiAgICAgIF0pXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiT3JnYW5pc2F0aW9uSWRcIiwge1xuICAgICAga2V5OiBcIk9yZ2FuaXNhdGlvbklkXCIsXG4gICAgICB2YWx1ZTogb3JnYW5pc2F0aW9uLmdldFJlc3BvbnNlRmllbGQoXCJPcmdhbml6YXRpb24uSWRcIiksXG4gICAgICBleHBvcnROYW1lOiBcIk9yZ2FuaXNhdGlvbklkXCJcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { StackProps, Stack } from "aws-cdk-lib";
2
2
  import { Construct } from "constructs";
3
- export declare class BaseInfraIpamPool extends Stack {
3
+ export declare class RamEnableSharing extends Stack {
4
4
  constructor(scope: Construct, id: string, props?: StackProps);
5
5
  }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RamEnableSharing = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const customResources = require("aws-cdk-lib/custom-resources");
6
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
+ const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
8
+ class RamEnableSharing extends aws_cdk_lib_1.Stack {
9
+ constructor(scope, id, props) {
10
+ super(scope, id, props);
11
+ new awsCustomResource_1.AwsCustomResource(this, "ramEnableSharing", {
12
+ functionName: "ramEnableSharing",
13
+ onCreate: {
14
+ service: "RAM",
15
+ action: "enableSharingWithAwsOrganization",
16
+ parameters: {},
17
+ physicalResourceId: customResources.PhysicalResourceId.of("ramEnableSharing")
18
+ },
19
+ resourceType: "Custom::ramEnableSharing",
20
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
21
+ new aws_iam_1.PolicyStatement({
22
+ actions: [
23
+ "ram:EnableSharingWithAwsOrganization",
24
+ "iam:CreateServiceLinkedRole",
25
+ "organizations:enableAWSServiceAccess",
26
+ "organizations:DescribeOrganization"
27
+ ],
28
+ resources: ["*"] // TODO: Find out the exact pricipal for this
29
+ })
30
+ ])
31
+ });
32
+ }
33
+ }
34
+ exports.RamEnableSharing = RamEnableSharing;
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFtRW5hYmxlU2hhcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL3JhbUVuYWJsZVNoYXJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWdEO0FBQ2hELGdFQUFnRTtBQUNoRSxpREFBc0Q7QUFHdEQsdUZBQW9GO0FBRXBGLE1BQWEsZ0JBQWlCLFNBQVEsbUJBQUs7SUFDekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtRQUMxRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUM5QyxZQUFZLEVBQUUsa0JBQWtCO1lBQ2hDLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsS0FBSztnQkFDZCxNQUFNLEVBQUUsa0NBQWtDO2dCQUMxQyxVQUFVLEVBQUUsRUFBRTtnQkFDZCxrQkFBa0IsRUFDaEIsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQzthQUM1RDtZQUNELFlBQVksRUFBRSwwQkFBMEI7WUFDeEMsTUFBTSxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzdELElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFO3dCQUNQLHNDQUFzQzt3QkFDdEMsNkJBQTZCO3dCQUM3QixzQ0FBc0M7d0JBQ3RDLG9DQUFvQztxQkFDckM7b0JBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsNkNBQTZDO2lCQUMvRCxDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNCRCw0Q0EyQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFja1Byb3BzLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcblxuZXhwb3J0IGNsYXNzIFJhbUVuYWJsZVNoYXJpbmcgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwicmFtRW5hYmxlU2hhcmluZ1wiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IFwicmFtRW5hYmxlU2hhcmluZ1wiLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJSQU1cIixcbiAgICAgICAgYWN0aW9uOiBcImVuYWJsZVNoYXJpbmdXaXRoQXdzT3JnYW5pemF0aW9uXCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvUkFNLmh0bWwjZW5hYmxlU2hhcmluZ1dpdGhBd3NPcmdhbml6YXRpb24tcHJvcGVydHlcbiAgICAgICAgcGFyYW1ldGVyczoge30sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDpcbiAgICAgICAgICBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFwicmFtRW5hYmxlU2hhcmluZ1wiKVxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OnJhbUVuYWJsZVNoYXJpbmdcIixcbiAgICAgIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJyYW06RW5hYmxlU2hhcmluZ1dpdGhBd3NPcmdhbml6YXRpb25cIixcbiAgICAgICAgICAgIFwiaWFtOkNyZWF0ZVNlcnZpY2VMaW5rZWRSb2xlXCIsXG4gICAgICAgICAgICBcIm9yZ2FuaXphdGlvbnM6ZW5hYmxlQVdTU2VydmljZUFjY2Vzc1wiLFxuICAgICAgICAgICAgXCJvcmdhbml6YXRpb25zOkRlc2NyaWJlT3JnYW5pemF0aW9uXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSAvLyBUT0RPOiBGaW5kIG91dCB0aGUgZXhhY3QgcHJpY2lwYWwgZm9yIHRoaXNcbiAgICAgICAgfSlcbiAgICAgIF0pXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { Stack, StackProps } from "aws-cdk-lib";
2
2
  import { Construct } from "constructs";
3
- export declare class BaseInfraIpam extends Stack {
3
+ export declare class Users extends Stack {
4
4
  constructor(scope: Construct, id: string, props?: StackProps);
5
5
  }
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Users = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const customResources = require("aws-cdk-lib/custom-resources");
6
+ const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
7
+ const identityStoreId = aws_cdk_lib_1.Fn.importValue("identityStoreID");
8
+ // TODO: Will need to customise what group they are assigned to
9
+ const adminGroupId = aws_cdk_lib_1.Fn.importValue("AdministratorAccessGroupId");
10
+ const adminUsers = [
11
+ {
12
+ IdentityStoreId: identityStoreId,
13
+ UserName: "paul@fjall.io",
14
+ DisplayName: "Paul Oram",
15
+ Name: {
16
+ FamilyName: "Oram",
17
+ GivenName: "Paul"
18
+ },
19
+ Emails: [
20
+ {
21
+ Primary: true,
22
+ Value: "paul@fjall.io"
23
+ }
24
+ ]
25
+ },
26
+ {
27
+ IdentityStoreId: identityStoreId,
28
+ UserName: "joseph@fjall.io",
29
+ DisplayName: "Joseph Eigenraam",
30
+ Name: {
31
+ FamilyName: "Eigenraam",
32
+ GivenName: "Joseph"
33
+ },
34
+ Emails: [
35
+ {
36
+ Primary: true,
37
+ Value: "joseph@fjall.io"
38
+ }
39
+ ]
40
+ }
41
+ ];
42
+ class Users extends aws_cdk_lib_1.Stack {
43
+ constructor(scope, id, props) {
44
+ super(scope, id, props);
45
+ for (const user of adminUsers) {
46
+ const createUser = new awsCustomResource_1.AwsCustomResource(this, `createUser${user.DisplayName.replace(/\s/g, "")}`, {
47
+ functionName: "createUsers",
48
+ onCreate: {
49
+ service: "IdentityStore",
50
+ action: "createUser",
51
+ parameters: user,
52
+ physicalResourceId: customResources.PhysicalResourceId.of("createUsers")
53
+ },
54
+ onUpdate: {
55
+ service: "IdentityStore",
56
+ action: "updateUser",
57
+ parameters: user,
58
+ physicalResourceId: customResources.PhysicalResourceId.of("updateUsers")
59
+ },
60
+ resourceType: "Custom::IdentityCenterUsers"
61
+ });
62
+ new awsCustomResource_1.AwsCustomResource(this, `deleteUser${user.DisplayName.replace(/\s/g, "")}`, {
63
+ functionName: "deleteUsers",
64
+ onDelete: {
65
+ service: "IdentityStore",
66
+ action: "deleteUser",
67
+ parameters: {
68
+ IdentityStoreId: identityStoreId,
69
+ UserId: createUser.getResponseField("UserId")
70
+ }
71
+ },
72
+ resourceType: "Custom::IdentityCenterUsers"
73
+ });
74
+ new aws_cdk_lib_1.CfnOutput(this, `${user.DisplayName.replace(/\s/g, "")}UserId`, {
75
+ key: `${user.DisplayName.replace(/\s/g, "")}UserId`,
76
+ value: createUser.getResponseField("UserId"),
77
+ exportName: `${user.DisplayName.replace(/\s/g, "")}UserId`
78
+ });
79
+ const groupMembershipId = new awsCustomResource_1.AwsCustomResource(this, `createGroupMembership${user.DisplayName.replace(/\s/g, "")}`, {
80
+ functionName: "createGroupMembership",
81
+ onCreate: {
82
+ service: "IdentityStore",
83
+ action: "createGroupMembership",
84
+ parameters: {
85
+ GroupId: adminGroupId,
86
+ IdentityStoreId: identityStoreId,
87
+ MemberId: {
88
+ UserId: createUser.getResponseField("UserId")
89
+ }
90
+ },
91
+ physicalResourceId: customResources.PhysicalResourceId.of("createUsers")
92
+ },
93
+ onUpdate: {
94
+ service: "IdentityStore",
95
+ action: "createGroupMembership",
96
+ parameters: {
97
+ GroupId: adminGroupId,
98
+ IdentityStoreId: identityStoreId,
99
+ MemberId: {
100
+ UserId: createUser.getResponseField("UserId")
101
+ }
102
+ },
103
+ physicalResourceId: customResources.PhysicalResourceId.of("createUsers")
104
+ }
105
+ });
106
+ new awsCustomResource_1.AwsCustomResource(this, `deleteGroupMembership${user.DisplayName.replace(/\s/g, "")}`, {
107
+ functionName: "deleteGroupMembership",
108
+ onDelete: {
109
+ service: "IdentityStore",
110
+ action: "deleteGroupMembership",
111
+ parameters: {
112
+ IdentityStoreId: identityStoreId,
113
+ MembershipId: groupMembershipId.getResponseField("MembershipId")
114
+ }
115
+ },
116
+ resourceType: "Custom::IdentityCenterUsers"
117
+ });
118
+ new aws_cdk_lib_1.CfnOutput(this, `${user.DisplayName.replace(/\s/g, "")}GroupMembershipId`, {
119
+ value: groupMembershipId.getResponseField("MembershipId"),
120
+ exportName: `${user.DisplayName.replace(/\s/g, "")}GroupMembershipId`
121
+ });
122
+ }
123
+ }
124
+ }
125
+ exports.Users = Users;
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy91c2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBK0Q7QUFDL0QsZ0VBQWdFO0FBRWhFLHVGQUFvRjtBQUVwRixNQUFNLGVBQWUsR0FBRyxnQkFBRSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzFELCtEQUErRDtBQUMvRCxNQUFNLFlBQVksR0FBRyxnQkFBRSxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBRWxFLE1BQU0sVUFBVSxHQUFHO0lBQ2pCO1FBQ0UsZUFBZSxFQUFFLGVBQWU7UUFDaEMsUUFBUSxFQUFFLGVBQWU7UUFDekIsV0FBVyxFQUFFLFdBQVc7UUFDeEIsSUFBSSxFQUFFO1lBQ0osVUFBVSxFQUFFLE1BQU07WUFDbEIsU0FBUyxFQUFFLE1BQU07U0FDbEI7UUFDRCxNQUFNLEVBQUU7WUFDTjtnQkFDRSxPQUFPLEVBQUUsSUFBSTtnQkFDYixLQUFLLEVBQUUsZUFBZTthQUN2QjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLGVBQWUsRUFBRSxlQUFlO1FBQ2hDLFFBQVEsRUFBRSxpQkFBaUI7UUFDM0IsV0FBVyxFQUFFLGtCQUFrQjtRQUMvQixJQUFJLEVBQUU7WUFDSixVQUFVLEVBQUUsV0FBVztZQUN2QixTQUFTLEVBQUUsUUFBUTtTQUNwQjtRQUNELE1BQU0sRUFBRTtZQUNOO2dCQUNFLE9BQU8sRUFBRSxJQUFJO2dCQUNiLEtBQUssRUFBRSxpQkFBaUI7YUFDekI7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQUVGLE1BQWEsS0FBTSxTQUFRLG1CQUFLO0lBQzlCLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0I7UUFDMUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUU7WUFD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RUYsSUFBSSxxQ0FBaUIsQ0FDbkIsSUFBSSxFQUNKLHdCQUF3QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFDN0Q7Z0JBQ0UsWUFBWSxFQUFFLHVCQUF1QjtnQkFDckMsUUFBUSxFQUFFO29CQUNSLE9BQU8sRUFBRSxlQUFlO29CQUN4QixNQUFNLEVBQUUsdUJBQXVCO29CQUMvQixVQUFVLEVBQUU7d0JBQ1YsZUFBZSxFQUFFLGVBQWU7d0JBQ2hDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7cUJBQ2pFO2lCQUNGO2dCQUNELFlBQVksRUFBRSw2QkFBNkI7YUFDNUMsQ0FDRixDQUFDO1lBRUYsSUFBSSx1QkFBUyxDQUNYLElBQUksRUFDSixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsbUJBQW1CLEVBQ3pEO2dCQUNFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7Z0JBQ3pELFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsbUJBQW1CO2FBQ3RFLENBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztDQUNGO0FBaEhELHNCQWdIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgRm4sIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuXG5jb25zdCBpZGVudGl0eVN0b3JlSWQgPSBGbi5pbXBvcnRWYWx1ZShcImlkZW50aXR5U3RvcmVJRFwiKTtcbi8vIFRPRE86IFdpbGwgbmVlZCB0byBjdXN0b21pc2Ugd2hhdCBncm91cCB0aGV5IGFyZSBhc3NpZ25lZCB0b1xuY29uc3QgYWRtaW5Hcm91cElkID0gRm4uaW1wb3J0VmFsdWUoXCJBZG1pbmlzdHJhdG9yQWNjZXNzR3JvdXBJZFwiKTtcblxuY29uc3QgYWRtaW5Vc2VycyA9IFtcbiAge1xuICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgIFVzZXJOYW1lOiBcInBhdWxAZmphbGwuaW9cIixcbiAgICBEaXNwbGF5TmFtZTogXCJQYXVsIE9yYW1cIixcbiAgICBOYW1lOiB7XG4gICAgICBGYW1pbHlOYW1lOiBcIk9yYW1cIixcbiAgICAgIEdpdmVuTmFtZTogXCJQYXVsXCJcbiAgICB9LFxuICAgIEVtYWlsczogW1xuICAgICAge1xuICAgICAgICBQcmltYXJ5OiB0cnVlLFxuICAgICAgICBWYWx1ZTogXCJwYXVsQGZqYWxsLmlvXCJcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICBJZGVudGl0eVN0b3JlSWQ6IGlkZW50aXR5U3RvcmVJZCxcbiAgICBVc2VyTmFtZTogXCJqb3NlcGhAZmphbGwuaW9cIixcbiAgICBEaXNwbGF5TmFtZTogXCJKb3NlcGggRWlnZW5yYWFtXCIsXG4gICAgTmFtZToge1xuICAgICAgRmFtaWx5TmFtZTogXCJFaWdlbnJhYW1cIixcbiAgICAgIEdpdmVuTmFtZTogXCJKb3NlcGhcIlxuICAgIH0sXG4gICAgRW1haWxzOiBbXG4gICAgICB7XG4gICAgICAgIFByaW1hcnk6IHRydWUsXG4gICAgICAgIFZhbHVlOiBcImpvc2VwaEBmamFsbC5pb1wiXG4gICAgICB9XG4gICAgXVxuICB9XG5dO1xuXG5leHBvcnQgY2xhc3MgVXNlcnMgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgZm9yIChjb25zdCB1c2VyIG9mIGFkbWluVXNlcnMpIHtcbiAgICAgIGNvbnN0IGNyZWF0ZVVzZXIgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGBjcmVhdGVVc2VyJHt1c2VyLkRpc3BsYXlOYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKX1gLFxuICAgICAgICB7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBcImNyZWF0ZVVzZXJzXCIsXG4gICAgICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgICAgIHNlcnZpY2U6IFwiSWRlbnRpdHlTdG9yZVwiLFxuICAgICAgICAgICAgYWN0aW9uOiBcImNyZWF0ZVVzZXJcIiwgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9JZGVudGl0eVN0b3JlLmh0bWwjY3JlYXRlVXNlci1wcm9wZXJ0eVxuICAgICAgICAgICAgcGFyYW1ldGVyczogdXNlcixcbiAgICAgICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDpcbiAgICAgICAgICAgICAgY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcImNyZWF0ZVVzZXJzXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblVwZGF0ZToge1xuICAgICAgICAgICAgc2VydmljZTogXCJJZGVudGl0eVN0b3JlXCIsXG4gICAgICAgICAgICBhY3Rpb246IFwidXBkYXRlVXNlclwiLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogdXNlcixcbiAgICAgICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDpcbiAgICAgICAgICAgICAgY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcInVwZGF0ZVVzZXJzXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpJZGVudGl0eUNlbnRlclVzZXJzXCJcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgZGVsZXRlVXNlciR7dXNlci5EaXNwbGF5TmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIil9YCxcbiAgICAgICAge1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogXCJkZWxldGVVc2Vyc1wiLFxuICAgICAgICAgIG9uRGVsZXRlOiB7XG4gICAgICAgICAgICBzZXJ2aWNlOiBcIklkZW50aXR5U3RvcmVcIixcbiAgICAgICAgICAgIGFjdGlvbjogXCJkZWxldGVVc2VyXCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvSWRlbnRpdHlTdG9yZS5odG1sI2RlbGV0ZVVzZXItcHJvcGVydHlcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgSWRlbnRpdHlTdG9yZUlkOiBpZGVudGl0eVN0b3JlSWQsXG4gICAgICAgICAgICAgIFVzZXJJZDogY3JlYXRlVXNlci5nZXRSZXNwb25zZUZpZWxkKFwiVXNlcklkXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpJZGVudGl0eUNlbnRlclVzZXJzXCJcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt1c2VyLkRpc3BsYXlOYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKX1Vc2VySWRgLCB7XG4gICAgICAgIGtleTogYCR7dXNlci5EaXNwbGF5TmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIil9VXNlcklkYCxcbiAgICAgICAgdmFsdWU6IGNyZWF0ZVVzZXIuZ2V0UmVzcG9uc2VGaWVsZChcIlVzZXJJZFwiKSxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7dXNlci5EaXNwbGF5TmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIil9VXNlcklkYFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGdyb3VwTWVtYmVyc2hpcElkID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgY3JlYXRlR3JvdXBNZW1iZXJzaGlwJHt1c2VyLkRpc3BsYXlOYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKX1gLFxuICAgICAgICB7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBcImNyZWF0ZUdyb3VwTWVtYmVyc2hpcFwiLFxuICAgICAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgICAgICBzZXJ2aWNlOiBcIklkZW50aXR5U3RvcmVcIixcbiAgICAgICAgICAgIGFjdGlvbjogXCJjcmVhdGVHcm91cE1lbWJlcnNoaXBcIixcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgR3JvdXBJZDogYWRtaW5Hcm91cElkLFxuICAgICAgICAgICAgICBJZGVudGl0eVN0b3JlSWQ6IGlkZW50aXR5U3RvcmVJZCxcbiAgICAgICAgICAgICAgTWVtYmVySWQ6IHtcbiAgICAgICAgICAgICAgICBVc2VySWQ6IGNyZWF0ZVVzZXIuZ2V0UmVzcG9uc2VGaWVsZChcIlVzZXJJZFwiKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOlxuICAgICAgICAgICAgICBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFwiY3JlYXRlVXNlcnNcIilcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgICAgICBzZXJ2aWNlOiBcIklkZW50aXR5U3RvcmVcIixcbiAgICAgICAgICAgIGFjdGlvbjogXCJjcmVhdGVHcm91cE1lbWJlcnNoaXBcIixcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgR3JvdXBJZDogYWRtaW5Hcm91cElkLFxuICAgICAgICAgICAgICBJZGVudGl0eVN0b3JlSWQ6IGlkZW50aXR5U3RvcmVJZCxcbiAgICAgICAgICAgICAgTWVtYmVySWQ6IHtcbiAgICAgICAgICAgICAgICBVc2VySWQ6IGNyZWF0ZVVzZXIuZ2V0UmVzcG9uc2VGaWVsZChcIlVzZXJJZFwiKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOlxuICAgICAgICAgICAgICBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFwiY3JlYXRlVXNlcnNcIilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYGRlbGV0ZUdyb3VwTWVtYmVyc2hpcCR7dXNlci5EaXNwbGF5TmFtZS5yZXBsYWNlKC9cXHMvZywgXCJcIil9YCxcbiAgICAgICAge1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogXCJkZWxldGVHcm91cE1lbWJlcnNoaXBcIixcbiAgICAgICAgICBvbkRlbGV0ZToge1xuICAgICAgICAgICAgc2VydmljZTogXCJJZGVudGl0eVN0b3JlXCIsXG4gICAgICAgICAgICBhY3Rpb246IFwiZGVsZXRlR3JvdXBNZW1iZXJzaGlwXCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvSWRlbnRpdHlTdG9yZS5odG1sI2RlbGV0ZVVzZXItcHJvcGVydHlcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgSWRlbnRpdHlTdG9yZUlkOiBpZGVudGl0eVN0b3JlSWQsXG4gICAgICAgICAgICAgIE1lbWJlcnNoaXBJZDogZ3JvdXBNZW1iZXJzaGlwSWQuZ2V0UmVzcG9uc2VGaWVsZChcIk1lbWJlcnNoaXBJZFwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6SWRlbnRpdHlDZW50ZXJVc2Vyc1wiXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGAke3VzZXIuRGlzcGxheU5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpfUdyb3VwTWVtYmVyc2hpcElkYCxcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiBncm91cE1lbWJlcnNoaXBJZC5nZXRSZXNwb25zZUZpZWxkKFwiTWVtYmVyc2hpcElkXCIpLFxuICAgICAgICAgIGV4cG9ydE5hbWU6IGAke3VzZXIuRGlzcGxheU5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpfUdyb3VwTWVtYmVyc2hpcElkYFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,10 @@
1
+ import { Stack } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ export declare class FjallHostedZone extends Stack {
4
+ constructor(scope: Construct, id: string);
5
+ }
6
+ export declare class FjallSubdomainHostedZone extends Stack {
7
+ constructor(scope: Construct, id: string, props: {
8
+ environment?: string;
9
+ });
10
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FjallSubdomainHostedZone = exports.FjallHostedZone = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const networking_1 = require("../../../resources/aws/networking");
6
+ class FjallHostedZone extends aws_cdk_lib_1.Stack {
7
+ constructor(scope, id) {
8
+ super(scope, id);
9
+ new networking_1.HostedZone(this, "FjallHostedZone", {
10
+ zoneName: "fjall.io"
11
+ });
12
+ }
13
+ }
14
+ exports.FjallHostedZone = FjallHostedZone;
15
+ class FjallSubdomainHostedZone extends aws_cdk_lib_1.Stack {
16
+ constructor(scope, id, props) {
17
+ super(scope, id);
18
+ new networking_1.SubdomainHostedZone(this, "FjallHostedZone", {
19
+ delegatedZone: `${props.environment}.fjall.io`,
20
+ parentHostedZoneName: "fjall.io"
21
+ });
22
+ }
23
+ }
24
+ exports.FjallSubdomainHostedZone = FjallSubdomainHostedZone;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmphbGwuaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvY29uZmlnL2ZqYWxsL2hvc3RlZFpvbmVzL2ZqYWxsLmlvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFvQztBQUVwQyxrRUFHMkM7QUFFM0MsTUFBYSxlQUFnQixTQUFRLG1CQUFLO0lBQ3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSx1QkFBVSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUN0QyxRQUFRLEVBQUUsVUFBVTtTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFSRCwwQ0FRQztBQUVELE1BQWEsd0JBQXlCLFNBQVEsbUJBQUs7SUFDakQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksZ0NBQW1CLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQy9DLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLFdBQVc7WUFDOUMsb0JBQW9CLEVBQUUsVUFBVTtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFURCw0REFTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgSG9zdGVkWm9uZSxcbiAgU3ViZG9tYWluSG9zdGVkWm9uZVxufSBmcm9tIFwiLi4vLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nXCI7XG5cbmV4cG9ydCBjbGFzcyBGamFsbEhvc3RlZFpvbmUgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEhvc3RlZFpvbmUodGhpcywgXCJGamFsbEhvc3RlZFpvbmVcIiwge1xuICAgICAgem9uZU5hbWU6IFwiZmphbGwuaW9cIlxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGamFsbFN1YmRvbWFpbkhvc3RlZFpvbmUgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiB7IGVudmlyb25tZW50Pzogc3RyaW5nIH0pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IFN1YmRvbWFpbkhvc3RlZFpvbmUodGhpcywgXCJGamFsbEhvc3RlZFpvbmVcIiwge1xuICAgICAgZGVsZWdhdGVkWm9uZTogYCR7cHJvcHMuZW52aXJvbm1lbnR9LmZqYWxsLmlvYCxcbiAgICAgIHBhcmVudEhvc3RlZFpvbmVOYW1lOiBcImZqYWxsLmlvXCJcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1 +1,4 @@
1
1
  export * from "./patterns/aws";
2
+ export * from "./utils";
3
+ export * from "./resources";
4
+ export * from "./app";
package/dist/lib/index.js CHANGED
@@ -15,4 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./patterns/aws"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUErQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3BhdHRlcm5zL2F3c1wiO1xuIl19
18
+ __exportStar(require("./utils"), exports);
19
+ __exportStar(require("./resources"), exports);
20
+ __exportStar(require("./app"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUErQjtBQUMvQiwwQ0FBd0I7QUFDeEIsOENBQTRCO0FBQzVCLHdDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3BhdHRlcm5zL2F3c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jlc291cmNlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBwXCI7XG4iXX0=
@@ -0,0 +1,47 @@
1
+ import { AwsStackProps } from "../../resources/aws/awsStack";
2
+ import { KeyValue } from "../../resources/aws/compute/ecs";
3
+ import { ScalingType, Protocol } from "../../resources/aws/compute/ecs";
4
+ import { IManagedPolicy, PolicyDocument } from "aws-cdk-lib/aws-iam";
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
+ protocol: Protocol;
14
+ scalingType: ScalingType;
15
+ containerPort: number;
16
+ }
17
+ export interface BasicAppProps {
18
+ account?: string;
19
+ clusterName?: 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
+ protocol?: Protocol;
29
+ region?: string;
30
+ scalingType?: ScalingType;
31
+ serviceName?: string;
32
+ taskRoleInlinePolicies?: {
33
+ [name: string]: PolicyDocument;
34
+ };
35
+ taskRoleManagegedPolicies?: IManagedPolicy[];
36
+ tags?: KeyValue;
37
+ }
38
+ export declare class BasicApp {
39
+ private vpcStack;
40
+ private databaseStack;
41
+ private secretStack;
42
+ private computeStack;
43
+ constructor(id: string, rawProps: BasicAppProps);
44
+ getStackProps(props: BasicAppProps): AwsStackProps | undefined;
45
+ getProps(id: string, rawProps: BasicAppProps): BasicAppProps & BasicAppPropDefaults;
46
+ }
47
+ export default BasicApp;
@@ -0,0 +1,90 @@
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/constant/vpc");
6
+ const ecr_1 = require("../../resources/aws/constant/ecr");
7
+ const ecs_1 = require("../../resources/aws/compute/ecs");
8
+ const database_1 = require("../../resources/aws/store/database");
9
+ const ecs_2 = require("../../resources/aws/compute/ecs");
10
+ const secret_1 = require("../../resources/aws/store/secret");
11
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
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
+ tags: props.tags
20
+ }))
21
+ .addContainerRegistry(ecr_1.default.build(`${id}Ecr`));
22
+ this.databaseStack = new awsStack_1.default(`${id}Database`, this.vpcStack, stackProps)
23
+ .addNetwork(this.vpcStack.getNetwork())
24
+ .addResource(database_1.default.build(`${id}Database`));
25
+ //TODO: validate id does not contain special characters (no hyphens - no slashes etc) database instances won't allow it
26
+ const dbResource = this.databaseStack.getResource(`${id}Database`);
27
+ const secretObjectValue = {};
28
+ if (props.containerSecrets) {
29
+ for (const secretObject of props.containerSecrets) {
30
+ secretObjectValue[secretObject] = aws_cdk_lib_1.SecretValue.unsafePlainText("");
31
+ }
32
+ }
33
+ this.secretStack = new awsStack_1.default(`${id}Secret`, [], stackProps).addResource(secret_1.default.build(`${id}Secret`, {
34
+ secretName: `/${props.clusterName}/${props.serviceName}`,
35
+ secretObjectValue: secretObjectValue,
36
+ tags: props.tags
37
+ }));
38
+ this.computeStack = new awsStack_1.default(`${id}Compute`, [this.vpcStack, this.databaseStack, this.secretStack], stackProps)
39
+ .addNetwork(this.vpcStack.getNetwork())
40
+ .addResource(ecs_1.default.build(`${id}Fargate`, {
41
+ clusterName: props.clusterName,
42
+ protocol: props.protocol,
43
+ //TODO: This should work via line 110, but doesn't work (at least on update)
44
+ databaseConnection: dbResource.connections,
45
+ containerCommand: props.containerCommand,
46
+ containerEnvironment: props.containerEnvironment,
47
+ containerPort: props.containerPort,
48
+ containerSecrets: secretObjectValue,
49
+ ecrRepository: this.vpcStack.getContainerRegistry(),
50
+ parentDomain: props.parentDomain,
51
+ listenerPort: props.listenerPort,
52
+ scalingType: props.scalingType,
53
+ serviceName: props.serviceName,
54
+ taskRoleInlinePolicies: props.taskRoleInlinePolicies,
55
+ taskRoleManagegedPolicies: props.taskRoleManagegedPolicies,
56
+ tags: props.tags
57
+ }))
58
+ .connect(`${id}Fargate`, `${id}Database`, 5432);
59
+ }
60
+ getStackProps(props) {
61
+ if (!props)
62
+ return;
63
+ return {
64
+ account: props.account,
65
+ region: props.region,
66
+ environment: props.environment
67
+ };
68
+ }
69
+ getProps(id, rawProps) {
70
+ const defaultProps = {
71
+ tags: {
72
+ "fjall:costAllocation:service": "app",
73
+ "fjall:costAllocation:environment": rawProps.environment || 'production',
74
+ "fjall:costAllocation:owner": rawProps.owner || 'Engineer'
75
+ },
76
+ scalingType: ecs_2.ScalingType.CPU,
77
+ protocol: rawProps.parentDomain ? ecs_2.Protocol.HTTPS : ecs_2.Protocol.HTTP,
78
+ containerPort: 3000,
79
+ serviceName: `${id}Service`,
80
+ clusterName: `${id}Cluster`
81
+ };
82
+ return {
83
+ ...defaultProps,
84
+ ...rawProps
85
+ };
86
+ }
87
+ }
88
+ exports.BasicApp = BasicApp;
89
+ exports.default = BasicApp;
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNBcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2Jhc2ljQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUF1RTtBQUN2RSwwREFBdUQ7QUFDdkQsMERBQW1EO0FBQ25ELHlEQUd5QztBQUN6QyxpRUFBMEQ7QUFDMUQseURBQXdFO0FBQ3hFLDZEQUFzRDtBQUN0RCw2Q0FBMEM7QUF3QzFDLE1BQWEsUUFBUTtJQU1uQixZQUFZLEVBQVUsRUFBRSxRQUF1QjtRQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxrQkFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQzthQUN6RCxVQUFVLENBQ1QsU0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FBQyxDQUNIO2FBQ0Esb0JBQW9CLENBQUMsYUFBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksa0JBQVEsQ0FDL0IsR0FBRyxFQUFFLFVBQVUsRUFDZixJQUFJLENBQUMsUUFBUSxFQUNiLFVBQVUsQ0FDWDthQUNFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ3RDLFdBQVcsQ0FBQyxrQkFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVoRCx1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QUM1QixRQUFRLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBUSxDQUFDLElBQUk7WUFDaEUsYUFBYSxFQUFFLElBQUk7WUFDbkIsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTO1lBQzNCLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUztTQUM1QixDQUFDO1FBRUYsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLEdBQUcsUUFBUTtTQUNaLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUEvR0QsNEJBK0dDO0FBQ0Qsa0JBQWUsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF3c1N0YWNrLCB7IEF3c1N0YWNrUHJvcHMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9hd3NTdGFja1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29uc3RhbnQvdnBjXCI7XG5pbXBvcnQgRWNyIGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbnN0YW50L2VjclwiO1xuaW1wb3J0IEZhcmdhdGUsIHtcbiAgQ29udGFpbmVyU2VjcmV0LFxuICBLZXlWYWx1ZVxufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IERhdGFiYXNlIGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3N0b3JlL2RhdGFiYXNlXCI7XG5pbXBvcnQgeyBTY2FsaW5nVHlwZSwgUHJvdG9jb2wgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IFNlY3JldCBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zdG9yZS9zZWNyZXRcIjtcbmltcG9ydCB7IFNlY3JldFZhbHVlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJTWFuYWdlZFBvbGljeSwgUG9saWN5RG9jdW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuXG5cbi8qKlxuICogSW50ZXJzZWN0ZWQgd2l0aCBCYXNpY0FwcFByb3BzIGluIHRoZSBnZXRQcm9wcyBtZXRob2QuIFRoaXMgYWxsb3dzIHRoZSBCYXNpY0FwcCBjb25zdHJ1Y3RcbiAqIHRvIHRyZWF0IHRoZXNlIGFzIHJlcXVpcmVkIHByb3BlcnRpZXMgYW5kIGF2b2lkIGNvbnN0YW50IG51bGwgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaWNBcHBQcm9wRGVmYXVsdHMge1xuICB0YWdzOiBLZXlWYWx1ZTtcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgY2x1c3Rlck5hbWU6IHN0cmluZztcbiAgcHJvdG9jb2w6IFByb3RvY29sO1xuICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGU7XG4gIGNvbnRhaW5lclBvcnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNpY0FwcFByb3BzIHtcbiAgYWNjb3VudD86IHN0cmluZztcbiAgY2x1c3Rlck5hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lckNvbW1hbmQ/OiBzdHJpbmdbXTtcbiAgY29udGFpbmVyRW52aXJvbm1lbnQ/OiBLZXlWYWx1ZTtcbiAgY29udGFpbmVyUG9ydD86IG51bWJlcjtcbiAgY29udGFpbmVyU2VjcmV0cz86IHN0cmluZ1tdO1xuICAvLyBUaGUgdGVhbS9kb21haW4vYnVzaW5lc3MtdW5pdCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIHNlcnZpY2VcbiAgb3duZXI/OiBzdHJpbmdcbiAgcGFyZW50RG9tYWluPzogc3RyaW5nOyAvLyBGaXggdG8gbWFrZSBhIGRlcGVuZGFuY3kgb2YgcHJvdG9jb2xcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgbGlzdGVuZXJQb3J0PzogbnVtYmVyO1xuICBwcm90b2NvbD86IFByb3RvY29sO1xuICByZWdpb24/OiBzdHJpbmc7XG4gIHNjYWxpbmdUeXBlPzogU2NhbGluZ1R5cGU7XG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICB0YXNrUm9sZUlubGluZVBvbGljaWVzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBQb2xpY3lEb2N1bWVudDtcbiAgfTtcbiAgdGFza1JvbGVNYW5hZ2VnZWRQb2xpY2llcz86IElNYW5hZ2VkUG9saWN5W107XG4gIHRhZ3M/OiBLZXlWYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEJhc2ljQXBwIHtcbiAgcHJpdmF0ZSB2cGNTdGFjazogQXdzU3RhY2s7XG4gIHByaXZhdGUgZGF0YWJhc2VTdGFjazogQXdzU3RhY2s7XG4gIHByaXZhdGUgc2VjcmV0U3RhY2s6IEF3c1N0YWNrO1xuICBwcml2YXRlIGNvbXB1dGVTdGFjazogQXdzU3RhY2s7XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgcmF3UHJvcHM6IEJhc2ljQXBwUHJvcHMpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0UHJvcHMoaWQsIHJhd1Byb3BzKTtcbiAgICBjb25zdCBzdGFja1Byb3BzID0gdGhpcy5nZXRTdGFja1Byb3BzKHByb3BzKTtcblxuICAgIHRoaXMudnBjU3RhY2sgPSBuZXcgQXdzU3RhY2soYCR7aWR9TmV0d29ya2AsIFtdLCBzdGFja1Byb3BzKVxuICAgICAgLmFkZE5ldHdvcmsoXG4gICAgICAgIFZwYy5idWlsZChgJHtpZH1WcGNgLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5hZGRDb250YWluZXJSZWdpc3RyeShFY3IuYnVpbGQoYCR7aWR9RWNyYCkpO1xuXG4gICAgdGhpcy5kYXRhYmFzZVN0YWNrID0gbmV3IEF3c1N0YWNrKFxuICAgICAgYCR7aWR9RGF0YWJhc2VgLFxuICAgICAgdGhpcy52cGNTdGFjayxcbiAgICAgIHN0YWNrUHJvcHNcbiAgICApXG4gICAgICAuYWRkTmV0d29yayh0aGlzLnZwY1N0YWNrLmdldE5ldHdvcmsoKSlcbiAgICAgIC5hZGRSZXNvdXJjZShEYXRhYmFzZS5idWlsZChgJHtpZH1EYXRhYmFzZWApKTtcblxuICAgIC8vVE9ETzogdmFsaWRhdGUgaWQgZG9lcyBub3QgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgKG5vIGh5cGhlbnMgLSBubyBzbGFzaGVzIGV0YykgZGF0YWJhc2UgaW5zdGFuY2VzIHdvbid0IGFsbG93IGl0XG5cbiAgICBjb25zdCBkYlJlc291cmNlID0gdGhpcy5kYXRhYmFzZVN0YWNrLmdldFJlc291cmNlKFxuICAgICAgYCR7aWR9RGF0YWJhc2VgXG4gICAgKSBhcyBEYXRhYmFzZTtcblxuICAgIGNvbnN0IHNlY3JldE9iamVjdFZhbHVlOiBDb250YWluZXJTZWNyZXQgPSB7fTtcbiAgICBpZiAocHJvcHMuY29udGFpbmVyU2VjcmV0cykge1xuICAgICAgZm9yIChjb25zdCBzZWNyZXRPYmplY3Qgb2YgcHJvcHMuY29udGFpbmVyU2VjcmV0cykge1xuICAgICAgICBzZWNyZXRPYmplY3RWYWx1ZVtzZWNyZXRPYmplY3RdID0gU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KFwiXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VjcmV0U3RhY2sgPSBuZXcgQXdzU3RhY2soXG4gICAgICBgJHtpZH1TZWNyZXRgLFxuICAgICAgW10sXG4gICAgICBzdGFja1Byb3BzXG4gICAgKS5hZGRSZXNvdXJjZShcbiAgICAgIFNlY3JldC5idWlsZChgJHtpZH1TZWNyZXRgLCB7XG4gICAgICAgIHNlY3JldE5hbWU6IGAvJHtwcm9wcy5jbHVzdGVyTmFtZX0vJHtwcm9wcy5zZXJ2aWNlTmFtZX1gLFxuICAgICAgICBzZWNyZXRPYmplY3RWYWx1ZTogc2VjcmV0T2JqZWN0VmFsdWUsXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuY29tcHV0ZVN0YWNrID0gbmV3IEF3c1N0YWNrKFxuICAgICAgYCR7aWR9Q29tcHV0ZWAsXG4gICAgICBbdGhpcy52cGNTdGFjaywgdGhpcy5kYXRhYmFzZVN0YWNrLCB0aGlzLnNlY3JldFN0YWNrXSxcbiAgICAgIHN0YWNrUHJvcHNcbiAgICApXG4gICAgICAuYWRkTmV0d29yayh0aGlzLnZwY1N0YWNrLmdldE5ldHdvcmsoKSlcbiAgICAgIC5hZGRSZXNvdXJjZShcbiAgICAgICAgRmFyZ2F0ZS5idWlsZChgJHtpZH1GYXJnYXRlYCwge1xuICAgICAgICAgIGNsdXN0ZXJOYW1lOiBwcm9wcy5jbHVzdGVyTmFtZSxcbiAgICAgICAgICBwcm90b2NvbDogcHJvcHMucHJvdG9jb2wsXG4gICAgICAgICAgLy9UT0RPOiBUaGlzIHNob3VsZCB3b3JrIHZpYSBsaW5lIDExMCwgYnV0IGRvZXNuJ3Qgd29yayAoYXQgbGVhc3Qgb24gdXBkYXRlKVxuICAgICAgICAgIGRhdGFiYXNlQ29ubmVjdGlvbjogZGJSZXNvdXJjZS5jb25uZWN0aW9ucyxcbiAgICAgICAgICBjb250YWluZXJDb21tYW5kOiBwcm9wcy5jb250YWluZXJDb21tYW5kLFxuICAgICAgICAgIGNvbnRhaW5lckVudmlyb25tZW50OiBwcm9wcy5jb250YWluZXJFbnZpcm9ubWVudCxcbiAgICAgICAgICBjb250YWluZXJQb3J0OiBwcm9wcy5jb250YWluZXJQb3J0LFxuICAgICAgICAgIGNvbnRhaW5lclNlY3JldHM6IHNlY3JldE9iamVjdFZhbHVlLFxuICAgICAgICAgIGVjclJlcG9zaXRvcnk6IHRoaXMudnBjU3RhY2suZ2V0Q29udGFpbmVyUmVnaXN0cnkoKSxcbiAgICAgICAgICBwYXJlbnREb21haW46IHByb3BzLnBhcmVudERvbWFpbixcbiAgICAgICAgICBsaXN0ZW5lclBvcnQ6IHByb3BzLmxpc3RlbmVyUG9ydCxcbiAgICAgICAgICBzY2FsaW5nVHlwZTogcHJvcHMuc2NhbGluZ1R5cGUsXG4gICAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICAgIHRhc2tSb2xlSW5saW5lUG9saWNpZXM6IHByb3BzLnRhc2tSb2xlSW5saW5lUG9saWNpZXMsXG4gICAgICAgICAgdGFza1JvbGVNYW5hZ2VnZWRQb2xpY2llczogcHJvcHMudGFza1JvbGVNYW5hZ2VnZWRQb2xpY2llcyxcbiAgICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuY29ubmVjdChgJHtpZH1GYXJnYXRlYCwgYCR7aWR9RGF0YWJhc2VgLCA1NDMyKTtcbiAgfVxuXG4gIGdldFN0YWNrUHJvcHMocHJvcHM6IEJhc2ljQXBwUHJvcHMpOiBBd3NTdGFja1Byb3BzIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXByb3BzKSByZXR1cm47XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudDogcHJvcHMuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50XG4gICAgfTtcbiAgfVxuXG4gIGdldFByb3BzKGlkOiBzdHJpbmcsIHJhd1Byb3BzOiBCYXNpY0FwcFByb3BzKTogQmFzaWNBcHBQcm9wcyAmIEJhc2ljQXBwUHJvcERlZmF1bHRzIHtcblxuICAgIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiYXBwXCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjogcmF3UHJvcHMuZW52aXJvbm1lbnQgfHwgJ3Byb2R1Y3Rpb24nLFxuICAgICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IHJhd1Byb3BzLm93bmVyIHx8ICdFbmdpbmVlcidcbiAgICAgIH0sXG4gICAgICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGUuQ1BVLFxuICAgICAgcHJvdG9jb2w6IHJhd1Byb3BzLnBhcmVudERvbWFpbiA/IFByb3RvY29sLkhUVFBTIDogUHJvdG9jb2wuSFRUUCxcbiAgICAgIGNvbnRhaW5lclBvcnQ6IDMwMDAsXG4gICAgICBzZXJ2aWNlTmFtZTogYCR7aWR9U2VydmljZWAsXG4gICAgICBjbHVzdGVyTmFtZTogYCR7aWR9Q2x1c3RlcmBcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRQcm9wcyxcbiAgICAgIC4uLnJhd1Byb3BzXG4gICAgfVxuICB9XG59XG5leHBvcnQgZGVmYXVsdCBCYXNpY0FwcDtcbiJdfQ==
@@ -0,0 +1,50 @@
1
+ import { StackProps, Stack } from "aws-cdk-lib";
2
+ import { InstanceType } from "aws-cdk-lib/aws-ec2";
3
+ import { Construct } from "constructs";
4
+ import { KeyValue } from "../../resources/aws/compute/ecs";
5
+ declare enum agentRelease {
6
+ STABLE = "stable",
7
+ BETA = "beta",
8
+ EDGE = "edge"
9
+ }
10
+ export interface BuildkiteProps extends StackProps {
11
+ environment: string;
12
+ elasticStackVersion: string;
13
+ agentScalerVersion: string;
14
+ queueName: string;
15
+ spotCapacityPercentage: number;
16
+ agentInstanceType: InstanceType;
17
+ agentVolumeSize: number;
18
+ agentMinInstances: number;
19
+ agentMaxInstances: number;
20
+ instanceStorage: boolean;
21
+ dockerUserNamespaceRemap: boolean;
22
+ dockerExperimental: boolean;
23
+ scaleInPeriod: number;
24
+ agentsPerInstance: number;
25
+ agentTags: string;
26
+ timestampLines: boolean;
27
+ experiments: string;
28
+ tracingBackend: string;
29
+ agentRelease: agentRelease;
30
+ gitMirrors: boolean;
31
+ bootstrapScript: string;
32
+ envFileUrl: string;
33
+ authorizedUsersUrl: string;
34
+ ecrAccessPolicy: string;
35
+ instanceTerminationAfterJob: boolean;
36
+ sudoPermissions: string;
37
+ tags: KeyValue;
38
+ secretsPluginEnabled: boolean;
39
+ ecrPluginEnabled: boolean;
40
+ dockerLoginPluginEnabled: boolean;
41
+ scaleOutFactor: string;
42
+ scaleOutWaitingForJobs: boolean;
43
+ eventScheduledPeriod: string;
44
+ minPollInterval: string;
45
+ }
46
+ export declare const BuildkiteDefaultProps: Pick<BuildkiteProps, "elasticStackVersion" | "agentScalerVersion" | "spotCapacityPercentage" | "agentInstanceType" | "agentVolumeSize" | "agentMinInstances" | "agentMaxInstances" | "instanceStorage" | "dockerUserNamespaceRemap" | "dockerExperimental" | "scaleInPeriod" | "agentsPerInstance" | "agentTags" | "timestampLines" | "experiments" | "tracingBackend" | "agentRelease" | "gitMirrors" | "bootstrapScript" | "envFileUrl" | "authorizedUsersUrl" | "ecrAccessPolicy" | "instanceTerminationAfterJob" | "sudoPermissions" | "secretsPluginEnabled" | "ecrPluginEnabled" | "dockerLoginPluginEnabled" | "scaleOutFactor" | "scaleOutWaitingForJobs" | "eventScheduledPeriod" | "minPollInterval">;
47
+ export default class Buildkite extends Stack {
48
+ constructor(scope: Construct, id: string, props: BuildkiteProps);
49
+ }
50
+ export {};