@fjall/components-infrastructure 0.77.4 → 0.78.5

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 (64) hide show
  1. package/dist/lib/app.d.ts +8 -5
  2. package/dist/lib/app.js +19 -7
  3. package/dist/lib/patterns/aws/buildkite.js +4 -7
  4. package/dist/lib/patterns/aws/compute.d.ts +479 -48
  5. package/dist/lib/patterns/aws/compute.js +307 -94
  6. package/dist/lib/patterns/aws/database.d.ts +1 -0
  7. package/dist/lib/patterns/aws/database.js +4 -1
  8. package/dist/lib/patterns/aws/hostedZone.js +4 -7
  9. package/dist/lib/patterns/aws/loadBalancer.d.ts +163 -0
  10. package/dist/lib/patterns/aws/loadBalancer.js +278 -0
  11. package/dist/lib/patterns/aws/network.d.ts +1 -0
  12. package/dist/lib/patterns/aws/network.js +2 -1
  13. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.d.ts +20 -0
  14. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.js +180 -0
  15. package/dist/lib/resources/aws/compute/ecs.d.ts +294 -57
  16. package/dist/lib/resources/aws/compute/ecs.js +745 -261
  17. package/dist/lib/resources/aws/compute/ecsFreeTier.js +1 -1
  18. package/dist/lib/resources/aws/compute/ecsSpot.js +1 -1
  19. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.d.ts +20 -0
  20. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +180 -0
  21. package/dist/lib/resources/aws/database/rdsAurora.d.ts +1 -0
  22. package/dist/lib/resources/aws/database/rdsAurora.js +2 -2
  23. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +1 -0
  24. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +2 -1
  25. package/dist/lib/resources/aws/database/rdsDeletionWaiter.d.ts +33 -0
  26. package/dist/lib/resources/aws/database/rdsDeletionWaiter.js +74 -0
  27. package/dist/lib/resources/aws/database/rdsInstance.d.ts +1 -0
  28. package/dist/lib/resources/aws/database/rdsInstance.js +3 -3
  29. package/dist/lib/resources/aws/networking/vpc.d.ts +1 -0
  30. package/dist/lib/resources/aws/networking/vpc.js +4 -3
  31. package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +2 -2
  32. package/dist/lib/resources/aws/networking/vpcEndpoint.js +1 -1
  33. package/dist/lib/resources/aws/networking/vpcEndpoints.d.ts +71 -0
  34. package/dist/lib/resources/aws/networking/vpcEndpoints.js +125 -0
  35. package/dist/lib/resources/aws/secrets/kms.d.ts +14 -0
  36. package/dist/lib/resources/aws/secrets/kms.js +5 -2
  37. package/dist/lib/resources/aws/secrets/secret.js +1 -1
  38. package/dist/lib/utils/standardTagsAspect.d.ts +26 -12
  39. package/dist/lib/utils/standardTagsAspect.js +67 -477
  40. package/dist/lib/utils/tagResource.d.ts +18 -3
  41. package/dist/lib/utils/tagResource.js +23 -6
  42. package/package.json +3 -3
  43. package/dist/lib/aspects/resourceInventory.d.ts +0 -41
  44. package/dist/lib/aspects/resourceInventory.js +0 -56
  45. package/dist/lib/config/audit.d.ts +0 -18
  46. package/dist/lib/config/audit.js +0 -22
  47. package/dist/lib/patterns/aws/auditRole.d.ts +0 -44
  48. package/dist/lib/patterns/aws/auditRole.js +0 -58
  49. package/dist/lib/patterns/aws/basicApp.d.ts +0 -0
  50. package/dist/lib/patterns/aws/basicApp.js +0 -150
  51. package/dist/lib/patterns/aws/ec2.d.ts +0 -43
  52. package/dist/lib/patterns/aws/ec2.js +0 -123
  53. package/dist/lib/patterns/aws/freeTierApp.d.ts +0 -44
  54. package/dist/lib/patterns/aws/freeTierApp.js +0 -83
  55. package/dist/lib/patterns/aws/spotInstanceApp.d.ts +0 -45
  56. package/dist/lib/patterns/aws/spotInstanceApp.js +0 -85
  57. package/dist/lib/resources/aws/audit/auditRole.d.ts +0 -32
  58. package/dist/lib/resources/aws/audit/auditRole.js +0 -46
  59. package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +0 -15
  60. package/dist/lib/resources/aws/database/databaseFreeTier.js +0 -29
  61. package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +0 -37
  62. package/dist/lib/resources/aws/database/rdsFreeTier.js +0 -84
  63. package/dist/lib/utils/getCidr.d.ts +0 -8
  64. package/dist/lib/utils/getCidr.js +0 -40
@@ -1,8 +1,23 @@
1
1
  import { type IConstruct } from "constructs";
2
2
  /**
3
- * Tag a resource directly on the CloudFormation resource.
4
- * This is used for resources that need tags at construction time,
5
- * like VPC IPAM pool tags.
3
+ * Apply tags directly to a specific resource.
4
+ *
5
+ * This uses CDK's native Tags.of().add() API which:
6
+ * - Properly merges with existing tags from L2 constructs
7
+ * - Works regardless of when it's called during construction
8
+ * - Applies tags to the resource and all its children
9
+ *
10
+ * Use this for resources that need specific tags beyond the standard Fjall tags,
11
+ * like VPC IPAM pool tags or resource-specific metadata.
12
+ *
13
+ * @param resource - The construct to tag
14
+ * @param tags - Key-value pairs of tags to apply
15
+ *
16
+ * @example
17
+ * // Apply specific tags to a resource
18
+ * tagResource(myVpc, {
19
+ * "fjall:operations:pool": "pool-123"
20
+ * });
6
21
  */
7
22
  export default function tagResource(resource: IConstruct, tags: {
8
23
  [key: string]: string;
@@ -1,13 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = tagResource;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
4
5
  /**
5
- * Tag a resource directly on the CloudFormation resource.
6
- * This is used for resources that need tags at construction time,
7
- * like VPC IPAM pool tags.
6
+ * Apply tags directly to a specific resource.
7
+ *
8
+ * This uses CDK's native Tags.of().add() API which:
9
+ * - Properly merges with existing tags from L2 constructs
10
+ * - Works regardless of when it's called during construction
11
+ * - Applies tags to the resource and all its children
12
+ *
13
+ * Use this for resources that need specific tags beyond the standard Fjall tags,
14
+ * like VPC IPAM pool tags or resource-specific metadata.
15
+ *
16
+ * @param resource - The construct to tag
17
+ * @param tags - Key-value pairs of tags to apply
18
+ *
19
+ * @example
20
+ * // Apply specific tags to a resource
21
+ * tagResource(myVpc, {
22
+ * "fjall:operations:pool": "pool-123"
23
+ * });
8
24
  */
9
25
  function tagResource(resource, tags) {
10
- // Add a metadata marker that will be processed by StandardTagsAspect
11
- resource.node.addMetadata("fjall:direct-tags", tags);
26
+ Object.entries(tags).forEach(([key, value]) => {
27
+ aws_cdk_lib_1.Tags.of(resource).add(key, value);
28
+ });
12
29
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvdGFnUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSw4QkFNQztBQVhEOzs7O0dBSUc7QUFDSCxTQUF3QixXQUFXLENBQ2pDLFFBQW9CLEVBQ3BCLElBQStCO0lBRS9CLHFFQUFxRTtJQUNyRSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBUYWcgYSByZXNvdXJjZSBkaXJlY3RseSBvbiB0aGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIHJlc291cmNlcyB0aGF0IG5lZWQgdGFncyBhdCBjb25zdHJ1Y3Rpb24gdGltZSxcbiAqIGxpa2UgVlBDIElQQU0gcG9vbCB0YWdzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0YWdSZXNvdXJjZShcbiAgcmVzb3VyY2U6IElDb25zdHJ1Y3QsXG4gIHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbikge1xuICAvLyBBZGQgYSBtZXRhZGF0YSBtYXJrZXIgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZCBieSBTdGFuZGFyZFRhZ3NBc3BlY3RcbiAgcmVzb3VyY2Uubm9kZS5hZGRNZXRhZGF0YShcImZqYWxsOmRpcmVjdC10YWdzXCIsIHRhZ3MpO1xufVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvdGFnUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1QkEsOEJBT0M7QUE5QkQsNkNBQW1DO0FBR25DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBd0IsV0FBVyxDQUNqQyxRQUFvQixFQUNwQixJQUErQjtJQUUvQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDNUMsa0JBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYWdzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0eXBlIElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFwcGx5IHRhZ3MgZGlyZWN0bHkgdG8gYSBzcGVjaWZpYyByZXNvdXJjZS5cbiAqXG4gKiBUaGlzIHVzZXMgQ0RLJ3MgbmF0aXZlIFRhZ3Mub2YoKS5hZGQoKSBBUEkgd2hpY2g6XG4gKiAtIFByb3Blcmx5IG1lcmdlcyB3aXRoIGV4aXN0aW5nIHRhZ3MgZnJvbSBMMiBjb25zdHJ1Y3RzXG4gKiAtIFdvcmtzIHJlZ2FyZGxlc3Mgb2Ygd2hlbiBpdCdzIGNhbGxlZCBkdXJpbmcgY29uc3RydWN0aW9uXG4gKiAtIEFwcGxpZXMgdGFncyB0byB0aGUgcmVzb3VyY2UgYW5kIGFsbCBpdHMgY2hpbGRyZW5cbiAqXG4gKiBVc2UgdGhpcyBmb3IgcmVzb3VyY2VzIHRoYXQgbmVlZCBzcGVjaWZpYyB0YWdzIGJleW9uZCB0aGUgc3RhbmRhcmQgRmphbGwgdGFncyxcbiAqIGxpa2UgVlBDIElQQU0gcG9vbCB0YWdzIG9yIHJlc291cmNlLXNwZWNpZmljIG1ldGFkYXRhLlxuICpcbiAqIEBwYXJhbSByZXNvdXJjZSAtIFRoZSBjb25zdHJ1Y3QgdG8gdGFnXG4gKiBAcGFyYW0gdGFncyAtIEtleS12YWx1ZSBwYWlycyBvZiB0YWdzIHRvIGFwcGx5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFwcGx5IHNwZWNpZmljIHRhZ3MgdG8gYSByZXNvdXJjZVxuICogdGFnUmVzb3VyY2UobXlWcGMsIHtcbiAqICAgXCJmamFsbDpvcGVyYXRpb25zOnBvb2xcIjogXCJwb29sLTEyM1wiXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGFnUmVzb3VyY2UoXG4gIHJlc291cmNlOiBJQ29uc3RydWN0LFxuICB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4pOiB2b2lkIHtcbiAgT2JqZWN0LmVudHJpZXModGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgVGFncy5vZihyZXNvdXJjZSkuYWRkKGtleSwgdmFsdWUpO1xuICB9KTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjall/components-infrastructure",
3
- "version": "0.77.4",
3
+ "version": "0.78.5",
4
4
  "bin": {
5
5
  "infrastructure": "bin/infrastructure.js"
6
6
  },
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@aws-sdk/client-organizations": "^3.716.0",
38
- "@fjall/util": "^0.77.4",
38
+ "@fjall/util": "^0.78.5",
39
39
  "@pepperize/cdk-organizations": "^0.7.135",
40
40
  "cdk-time-sleep": "^1.0.0",
41
41
  "constructs": "^10.0.0",
@@ -44,7 +44,7 @@
44
44
  "overrides": {
45
45
  "@smithy/core": "2.5.5"
46
46
  },
47
- "gitHead": "17bf417663a49ac8656c6d52468bc2f5589bff04",
47
+ "gitHead": "d8d1590fa29c852b5d26ebc4cc1da21ab86b686a",
48
48
  "peerDependencies": {
49
49
  "aws-cdk": "^2.206.0",
50
50
  "aws-cdk-lib": "^2.206.0",
@@ -1,41 +0,0 @@
1
- import { IAspect } from "aws-cdk-lib";
2
- import { IConstruct } from "constructs";
3
- /**
4
- * Resource metadata extracted from CDK constructs
5
- */
6
- export interface ResourceMetadata {
7
- resource_type: string;
8
- name: string;
9
- stack_name: string;
10
- }
11
- /**
12
- * Complete resource inventory for an application
13
- */
14
- export interface ResourceInventory {
15
- resources: ResourceMetadata[];
16
- generated_at: string;
17
- app_name: string;
18
- }
19
- /**
20
- * Aspect to collect resource metadata during CDK synthesis.
21
- * Visits all constructs in the tree and extracts metadata for AWS resources.
22
- *
23
- * Usage:
24
- * const aspect = new ResourceInventoryAspect();
25
- * Aspects.of(app).add(aspect);
26
- * app.synth();
27
- * const inventory = aspect.getInventory();
28
- */
29
- export declare class ResourceInventoryAspect implements IAspect {
30
- private resources;
31
- private processedResources;
32
- visit(node: IConstruct): void;
33
- /**
34
- * Extract metadata from a CloudFormation resource
35
- */
36
- private extractMetadata;
37
- /**
38
- * Get collected resource inventory
39
- */
40
- getInventory(): ResourceMetadata[];
41
- }
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResourceInventoryAspect = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- /**
6
- * Aspect to collect resource metadata during CDK synthesis.
7
- * Visits all constructs in the tree and extracts metadata for AWS resources.
8
- *
9
- * Usage:
10
- * const aspect = new ResourceInventoryAspect();
11
- * Aspects.of(app).add(aspect);
12
- * app.synth();
13
- * const inventory = aspect.getInventory();
14
- */
15
- class ResourceInventoryAspect {
16
- constructor() {
17
- this.resources = [];
18
- this.processedResources = new WeakSet();
19
- }
20
- visit(node) {
21
- // Skip if already processed
22
- if (this.processedResources.has(node)) {
23
- return;
24
- }
25
- // Only process L1 (CFN) resources
26
- if (aws_cdk_lib_1.CfnResource.isCfnResource(node)) {
27
- const metadata = this.extractMetadata(node);
28
- if (metadata) {
29
- this.resources.push(metadata);
30
- }
31
- this.processedResources.add(node);
32
- }
33
- }
34
- /**
35
- * Extract metadata from a CloudFormation resource
36
- */
37
- extractMetadata(resource) {
38
- const resourceType = resource.cfnResourceType;
39
- const stack = aws_cdk_lib_1.Stack.of(resource);
40
- const logicalId = stack.getLogicalId(resource);
41
- const stackName = stack.stackName;
42
- return {
43
- resource_type: resourceType,
44
- name: logicalId,
45
- stack_name: stackName
46
- };
47
- }
48
- /**
49
- * Get collected resource inventory
50
- */
51
- getInventory() {
52
- return this.resources;
53
- }
54
- }
55
- exports.ResourceInventoryAspect = ResourceInventoryAspect;
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VJbnZlbnRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvYXNwZWN0cy9yZXNvdXJjZUludmVudG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFxQjFEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsdUJBQXVCO0lBQXBDO1FBQ1UsY0FBUyxHQUF1QixFQUFFLENBQUM7UUFDbkMsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztJQXdDekQsQ0FBQztJQXRDQyxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLElBQUkseUJBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQW1CLENBQUMsQ0FBQztZQUMzRCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsUUFBcUI7UUFDM0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFbEMsT0FBTztZQUNMLGFBQWEsRUFBRSxZQUFZO1lBQzNCLElBQUksRUFBRSxTQUFTO1lBQ2YsVUFBVSxFQUFFLFNBQVM7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQTFDRCwwREEwQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQXNwZWN0LCBDZm5SZXNvdXJjZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIFJlc291cmNlIG1ldGFkYXRhIGV4dHJhY3RlZCBmcm9tIENESyBjb25zdHJ1Y3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VNZXRhZGF0YSB7XG4gIHJlc291cmNlX3R5cGU6IHN0cmluZzsgLy8gZS5nLiwgQVdTOjpTMzo6QnVja2V0LCBBV1M6OkVDUzo6U2VydmljZSwgQ3VzdG9tOjpDb21wdXRlXG4gIG5hbWU6IHN0cmluZzsgLy8gTG9naWNhbCBJRCBmcm9tIGNvbnN0cnVjdFxuICBzdGFja19uYW1lOiBzdHJpbmc7IC8vIFdoaWNoIHN0YWNrIChOZXR3b3JrL1N0b3JhZ2UvQ29tcHV0ZSlcbn1cblxuLyoqXG4gKiBDb21wbGV0ZSByZXNvdXJjZSBpbnZlbnRvcnkgZm9yIGFuIGFwcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VJbnZlbnRvcnkge1xuICByZXNvdXJjZXM6IFJlc291cmNlTWV0YWRhdGFbXTtcbiAgZ2VuZXJhdGVkX2F0OiBzdHJpbmc7XG4gIGFwcF9uYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXNwZWN0IHRvIGNvbGxlY3QgcmVzb3VyY2UgbWV0YWRhdGEgZHVyaW5nIENESyBzeW50aGVzaXMuXG4gKiBWaXNpdHMgYWxsIGNvbnN0cnVjdHMgaW4gdGhlIHRyZWUgYW5kIGV4dHJhY3RzIG1ldGFkYXRhIGZvciBBV1MgcmVzb3VyY2VzLlxuICpcbiAqIFVzYWdlOlxuICogICBjb25zdCBhc3BlY3QgPSBuZXcgUmVzb3VyY2VJbnZlbnRvcnlBc3BlY3QoKTtcbiAqICAgQXNwZWN0cy5vZihhcHApLmFkZChhc3BlY3QpO1xuICogICBhcHAuc3ludGgoKTtcbiAqICAgY29uc3QgaW52ZW50b3J5ID0gYXNwZWN0LmdldEludmVudG9yeSgpO1xuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VJbnZlbnRvcnlBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZXNvdXJjZXM6IFJlc291cmNlTWV0YWRhdGFbXSA9IFtdO1xuICBwcml2YXRlIHByb2Nlc3NlZFJlc291cmNlcyA9IG5ldyBXZWFrU2V0PElDb25zdHJ1Y3Q+KCk7XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIFNraXAgaWYgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICBpZiAodGhpcy5wcm9jZXNzZWRSZXNvdXJjZXMuaGFzKG5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT25seSBwcm9jZXNzIEwxIChDRk4pIHJlc291cmNlc1xuICAgIGlmIChDZm5SZXNvdXJjZS5pc0NmblJlc291cmNlKG5vZGUpKSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZXh0cmFjdE1ldGFkYXRhKG5vZGUgYXMgQ2ZuUmVzb3VyY2UpO1xuICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgIHRoaXMucmVzb3VyY2VzLnB1c2gobWV0YWRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jZXNzZWRSZXNvdXJjZXMuYWRkKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IG1ldGFkYXRhIGZyb20gYSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0TWV0YWRhdGEocmVzb3VyY2U6IENmblJlc291cmNlKTogUmVzb3VyY2VNZXRhZGF0YSB8IG51bGwge1xuICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IHJlc291cmNlLmNmblJlc291cmNlVHlwZTtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICBjb25zdCBsb2dpY2FsSWQgPSBzdGFjay5nZXRMb2dpY2FsSWQocmVzb3VyY2UpO1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IHN0YWNrLnN0YWNrTmFtZTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXNvdXJjZV90eXBlOiByZXNvdXJjZVR5cGUsXG4gICAgICBuYW1lOiBsb2dpY2FsSWQsXG4gICAgICBzdGFja19uYW1lOiBzdGFja05hbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb2xsZWN0ZWQgcmVzb3VyY2UgaW52ZW50b3J5XG4gICAqL1xuICBwdWJsaWMgZ2V0SW52ZW50b3J5KCk6IFJlc291cmNlTWV0YWRhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzO1xuICB9XG59XG4iXX0=
@@ -1,18 +0,0 @@
1
- /**
2
- * Audit configuration for cross-account CloudQuery access
3
- */
4
- export declare const FJALL_AUDIT_CONFIG: {
5
- /**
6
- * Fjall webapp AWS account ID
7
- * This account will be granted permission to assume audit roles for CloudQuery
8
- */
9
- readonly webappAwsAccountId: "985539798308";
10
- /**
11
- * IAM role naming convention
12
- */
13
- readonly roleNamePrefix: "FjallAudit";
14
- /**
15
- * IAM role path (for organizational structure)
16
- */
17
- readonly rolePath: "/";
18
- };
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FJALL_AUDIT_CONFIG = void 0;
4
- /**
5
- * Audit configuration for cross-account CloudQuery access
6
- */
7
- exports.FJALL_AUDIT_CONFIG = {
8
- /**
9
- * Fjall webapp AWS account ID
10
- * This account will be granted permission to assume audit roles for CloudQuery
11
- */
12
- webappAwsAccountId: "985539798308", // Fjall platform account
13
- /**
14
- * IAM role naming convention
15
- */
16
- roleNamePrefix: "FjallAudit",
17
- /**
18
- * IAM role path (for organizational structure)
19
- */
20
- rolePath: "/"
21
- };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29uZmlnL2F1ZGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ1UsUUFBQSxrQkFBa0IsR0FBRztJQUNoQzs7O09BR0c7SUFDSCxrQkFBa0IsRUFBRSxjQUFjLEVBQUUseUJBQXlCO0lBRTdEOztPQUVHO0lBQ0gsY0FBYyxFQUFFLFlBQVk7SUFFNUI7O09BRUc7SUFDSCxRQUFRLEVBQUUsR0FBRztDQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1ZGl0IGNvbmZpZ3VyYXRpb24gZm9yIGNyb3NzLWFjY291bnQgQ2xvdWRRdWVyeSBhY2Nlc3NcbiAqL1xuZXhwb3J0IGNvbnN0IEZKQUxMX0FVRElUX0NPTkZJRyA9IHtcbiAgLyoqXG4gICAqIEZqYWxsIHdlYmFwcCBBV1MgYWNjb3VudCBJRFxuICAgKiBUaGlzIGFjY291bnQgd2lsbCBiZSBncmFudGVkIHBlcm1pc3Npb24gdG8gYXNzdW1lIGF1ZGl0IHJvbGVzIGZvciBDbG91ZFF1ZXJ5XG4gICAqL1xuICB3ZWJhcHBBd3NBY2NvdW50SWQ6IFwiOTg1NTM5Nzk4MzA4XCIsIC8vIEZqYWxsIHBsYXRmb3JtIGFjY291bnRcblxuICAvKipcbiAgICogSUFNIHJvbGUgbmFtaW5nIGNvbnZlbnRpb25cbiAgICovXG4gIHJvbGVOYW1lUHJlZml4OiBcIkZqYWxsQXVkaXRcIixcblxuICAvKipcbiAgICogSUFNIHJvbGUgcGF0aCAoZm9yIG9yZ2FuaXphdGlvbmFsIHN0cnVjdHVyZSlcbiAgICovXG4gIHJvbGVQYXRoOiBcIi9cIlxufSBhcyBjb25zdDtcbiJdfQ==
@@ -1,44 +0,0 @@
1
- import { Construct } from "constructs";
2
- import { Role } from "aws-cdk-lib/aws-iam";
3
- export interface AuditRoleProps {
4
- /**
5
- * Override the default Fjall webapp account ID
6
- * Defaults to the account ID specified in FJALL_AUDIT_CONFIG
7
- */
8
- webappAccountId?: string;
9
- /**
10
- * External ID for additional security when assuming the role
11
- * If not provided, a unique external ID will be generated
12
- */
13
- externalId?: string;
14
- }
15
- /**
16
- * High-level pattern for adding CloudQuery audit capabilities to an application.
17
- *
18
- * This creates a cross-account IAM role that grants the Fjall platform read-only
19
- * access to all AWS resources for security auditing via CloudQuery.
20
- *
21
- * @example
22
- * ```typescript
23
- * import { App, AuditRole } from "@fjall/components-infrastructure";
24
- *
25
- * const app = App.getApp("MyApp");
26
- *
27
- * // Explicit opt-in to audit capabilities
28
- * const auditRole = new AuditRole(app, "AuditRole");
29
- *
30
- * // Continue with normal application setup
31
- * app.addCompute(/* ... *\/);
32
- * ```
33
- */
34
- export declare class AuditRole extends Construct {
35
- readonly role: Role;
36
- readonly externalId: string;
37
- constructor(scope: Construct, id: string, props?: AuditRoleProps);
38
- /**
39
- * Generate a unique external ID for this application
40
- * Format: fjall-audit-{appName}-{timestamp}
41
- */
42
- private generateExternalId;
43
- }
44
- export default AuditRole;
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AuditRole = void 0;
4
- const constructs_1 = require("constructs");
5
- const app_1 = require("../../app");
6
- const auditRole_1 = require("../../resources/aws/audit/auditRole");
7
- const audit_1 = require("../../config/audit");
8
- /**
9
- * High-level pattern for adding CloudQuery audit capabilities to an application.
10
- *
11
- * This creates a cross-account IAM role that grants the Fjall platform read-only
12
- * access to all AWS resources for security auditing via CloudQuery.
13
- *
14
- * @example
15
- * ```typescript
16
- * import { App, AuditRole } from "@fjall/components-infrastructure";
17
- *
18
- * const app = App.getApp("MyApp");
19
- *
20
- * // Explicit opt-in to audit capabilities
21
- * const auditRole = new AuditRole(app, "AuditRole");
22
- *
23
- * // Continue with normal application setup
24
- * app.addCompute(/* ... *\/);
25
- * ```
26
- */
27
- class AuditRole extends constructs_1.Construct {
28
- constructor(scope, id, props) {
29
- super(scope, id);
30
- // Get the App instance to access the network stack
31
- const app = scope instanceof app_1.default ? scope : app_1.default.getInstance();
32
- const networkStack = app.getDefaultNetworkStack();
33
- // Generate or use provided external ID
34
- this.externalId = props?.externalId || this.generateExternalId(app);
35
- // Create the audit role using the factory
36
- this.role = auditRole_1.default.build(`${app["name"]}AuditRole`, {
37
- webappAccountId: props?.webappAccountId || audit_1.FJALL_AUDIT_CONFIG.webappAwsAccountId,
38
- appName: app["name"],
39
- externalId: this.externalId,
40
- roleNamePrefix: audit_1.FJALL_AUDIT_CONFIG.roleNamePrefix,
41
- rolePath: audit_1.FJALL_AUDIT_CONFIG.rolePath
42
- })(app, networkStack.getStack());
43
- // Register the role with the network stack
44
- networkStack.addConstruct(this.role);
45
- }
46
- /**
47
- * Generate a unique external ID for this application
48
- * Format: fjall-audit-{appName}-{timestamp}
49
- */
50
- generateExternalId(app) {
51
- const appName = app["name"];
52
- const timestamp = Date.now();
53
- return `fjall-audit-${appName.toLowerCase()}-${timestamp}`;
54
- }
55
- }
56
- exports.AuditRole = AuditRole;
57
- exports.default = AuditRole;
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXRSb2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9hdWRpdFJvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBRXZDLG1DQUE0QjtBQUM1QixtRUFBbUU7QUFDbkUsOENBQXdEO0FBZ0J4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsc0JBQVM7SUFJdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLG1EQUFtRDtRQUNuRCxNQUFNLEdBQUcsR0FBRyxLQUFLLFlBQVksYUFBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3RCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUVsRCx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwRSwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUM1RCxlQUFlLEVBQ2IsS0FBSyxFQUFFLGVBQWUsSUFBSSwwQkFBa0IsQ0FBQyxrQkFBa0I7WUFDakUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDcEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGNBQWMsRUFBRSwwQkFBa0IsQ0FBQyxjQUFjO1lBQ2pELFFBQVEsRUFBRSwwQkFBa0IsQ0FBQyxRQUFRO1NBQ3RDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFakMsMkNBQTJDO1FBQzNDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0IsQ0FBQyxHQUFRO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsT0FBTyxlQUFlLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0NBQ0Y7QUFyQ0QsOEJBcUNDO0FBRUQsa0JBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5pbXBvcnQgQXVkaXRSb2xlRmFjdG9yeSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9hdWRpdC9hdWRpdFJvbGVcIjtcbmltcG9ydCB7IEZKQUxMX0FVRElUX0NPTkZJRyB9IGZyb20gXCIuLi8uLi9jb25maWcvYXVkaXRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdFJvbGVQcm9wcyB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBGamFsbCB3ZWJhcHAgYWNjb3VudCBJRFxuICAgKiBEZWZhdWx0cyB0byB0aGUgYWNjb3VudCBJRCBzcGVjaWZpZWQgaW4gRkpBTExfQVVESVRfQ09ORklHXG4gICAqL1xuICB3ZWJhcHBBY2NvdW50SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIElEIGZvciBhZGRpdGlvbmFsIHNlY3VyaXR5IHdoZW4gYXNzdW1pbmcgdGhlIHJvbGVcbiAgICogSWYgbm90IHByb3ZpZGVkLCBhIHVuaXF1ZSBleHRlcm5hbCBJRCB3aWxsIGJlIGdlbmVyYXRlZFxuICAgKi9cbiAgZXh0ZXJuYWxJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIaWdoLWxldmVsIHBhdHRlcm4gZm9yIGFkZGluZyBDbG91ZFF1ZXJ5IGF1ZGl0IGNhcGFiaWxpdGllcyB0byBhbiBhcHBsaWNhdGlvbi5cbiAqXG4gKiBUaGlzIGNyZWF0ZXMgYSBjcm9zcy1hY2NvdW50IElBTSByb2xlIHRoYXQgZ3JhbnRzIHRoZSBGamFsbCBwbGF0Zm9ybSByZWFkLW9ubHlcbiAqIGFjY2VzcyB0byBhbGwgQVdTIHJlc291cmNlcyBmb3Igc2VjdXJpdHkgYXVkaXRpbmcgdmlhIENsb3VkUXVlcnkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEFwcCwgQXVkaXRSb2xlIH0gZnJvbSBcIkBmamFsbC9jb21wb25lbnRzLWluZnJhc3RydWN0dXJlXCI7XG4gKlxuICogY29uc3QgYXBwID0gQXBwLmdldEFwcChcIk15QXBwXCIpO1xuICpcbiAqIC8vIEV4cGxpY2l0IG9wdC1pbiB0byBhdWRpdCBjYXBhYmlsaXRpZXNcbiAqIGNvbnN0IGF1ZGl0Um9sZSA9IG5ldyBBdWRpdFJvbGUoYXBwLCBcIkF1ZGl0Um9sZVwiKTtcbiAqXG4gKiAvLyBDb250aW51ZSB3aXRoIG5vcm1hbCBhcHBsaWNhdGlvbiBzZXR1cFxuICogYXBwLmFkZENvbXB1dGUoLyogLi4uICpcXC8pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBdWRpdFJvbGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogUm9sZTtcbiAgcHVibGljIHJlYWRvbmx5IGV4dGVybmFsSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IEF1ZGl0Um9sZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEdldCB0aGUgQXBwIGluc3RhbmNlIHRvIGFjY2VzcyB0aGUgbmV0d29yayBzdGFja1xuICAgIGNvbnN0IGFwcCA9IHNjb3BlIGluc3RhbmNlb2YgQXBwID8gc2NvcGUgOiBBcHAuZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBuZXR3b3JrU3RhY2sgPSBhcHAuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgLy8gR2VuZXJhdGUgb3IgdXNlIHByb3ZpZGVkIGV4dGVybmFsIElEXG4gICAgdGhpcy5leHRlcm5hbElkID0gcHJvcHM/LmV4dGVybmFsSWQgfHwgdGhpcy5nZW5lcmF0ZUV4dGVybmFsSWQoYXBwKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgYXVkaXQgcm9sZSB1c2luZyB0aGUgZmFjdG9yeVxuICAgIHRoaXMucm9sZSA9IEF1ZGl0Um9sZUZhY3RvcnkuYnVpbGQoYCR7YXBwW1wibmFtZVwiXX1BdWRpdFJvbGVgLCB7XG4gICAgICB3ZWJhcHBBY2NvdW50SWQ6XG4gICAgICAgIHByb3BzPy53ZWJhcHBBY2NvdW50SWQgfHwgRkpBTExfQVVESVRfQ09ORklHLndlYmFwcEF3c0FjY291bnRJZCxcbiAgICAgIGFwcE5hbWU6IGFwcFtcIm5hbWVcIl0sXG4gICAgICBleHRlcm5hbElkOiB0aGlzLmV4dGVybmFsSWQsXG4gICAgICByb2xlTmFtZVByZWZpeDogRkpBTExfQVVESVRfQ09ORklHLnJvbGVOYW1lUHJlZml4LFxuICAgICAgcm9sZVBhdGg6IEZKQUxMX0FVRElUX0NPTkZJRy5yb2xlUGF0aFxuICAgIH0pKGFwcCwgbmV0d29ya1N0YWNrLmdldFN0YWNrKCkpO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIHJvbGUgd2l0aCB0aGUgbmV0d29yayBzdGFja1xuICAgIG5ldHdvcmtTdGFjay5hZGRDb25zdHJ1Y3QodGhpcy5yb2xlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHVuaXF1ZSBleHRlcm5hbCBJRCBmb3IgdGhpcyBhcHBsaWNhdGlvblxuICAgKiBGb3JtYXQ6IGZqYWxsLWF1ZGl0LXthcHBOYW1lfS17dGltZXN0YW1wfVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUV4dGVybmFsSWQoYXBwOiBBcHApOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwcE5hbWUgPSBhcHBbXCJuYW1lXCJdO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIGBmamFsbC1hdWRpdC0ke2FwcE5hbWUudG9Mb3dlckNhc2UoKX0tJHt0aW1lc3RhbXB9YDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdWRpdFJvbGU7XG4iXX0=
File without changes
@@ -1,150 +0,0 @@
1
- "use strict";
2
- // import AwsStack, { AwsStackProps } from "../../resources/aws/base/awsStack";
3
- // import { Vpc } from "../../resources/aws/networking/vpc";
4
- // import Fargate, {
5
- // ContainerSecret,
6
- // ScalingType,
7
- // Protocol
8
- // } from "../../resources/aws/compute/ecs";
9
- // import Database from "../../resources/aws/database/database";
10
- // import { Secret } from "../../resources/aws/secrets";
11
- // import { Ecr } from "../../resources/aws/storage";
12
- // import { Fn, SecretValue } from "aws-cdk-lib";
13
- // import { IManagedPolicy, PolicyDocument } from "aws-cdk-lib/aws-iam";
14
- // import { KeyValue } from "../../types";
15
- // /**
16
- // * Intersected with BasicAppProps in the getProps method. This allows the BasicApp construct
17
- // * to treat these as required properties and avoid constant null checking.
18
- // */
19
- // export interface BasicAppPropDefaults {
20
- // tags: KeyValue;
21
- // serviceName: string;
22
- // clusterName: string;
23
- // protocol: Protocol;
24
- // scalingType: ScalingType;
25
- // containerPort: number;
26
- // }
27
- // export interface BasicAppProps {
28
- // accountId?: string;
29
- // clusterName?: string;
30
- // containerCommand?: string[];
31
- // containerEnvironment?: KeyValue;
32
- // containerPort?: number;
33
- // containerSecrets?: string[];
34
- // environment: string;
35
- // // The team/domain/business-unit that is responsible for this service
36
- // owner?: string;
37
- // parentDomain?: string; // Fix to make a dependency of protocol
38
- // listenerPort?: number;
39
- // protocol?: Protocol;
40
- // region?: string;
41
- // scalingType?: ScalingType;
42
- // serviceName?: string;
43
- // taskRoleInlinePolicies?: {
44
- // [name: string]: PolicyDocument;
45
- // };
46
- // taskRoleManagedPolicies?: IManagedPolicy[];
47
- // tags?: KeyValue;
48
- // }
49
- // export class BasicApp {
50
- // private vpcStack: AwsStack;
51
- // private databaseStack: AwsStack;
52
- // private secretStack: AwsStack;
53
- // private computeStack: AwsStack;
54
- // constructor(id: string, rawProps: BasicAppProps) {
55
- // const props = this.getProps(id, rawProps);
56
- // const stackProps = this.getStackProps(props);
57
- // this.vpcStack = new AwsStack(`${id}Network`, [], stackProps)
58
- // .addNetwork(
59
- // Vpc.build(`${id}Vpc`, {
60
- // accountId: props.accountId,
61
- // ipv4IpamPoolId: Fn.importValue(`IpamPoolId${props?.accountId}`),
62
- // region: props.region,
63
- // tags: props.tags
64
- // })
65
- // )
66
- // .addContainerRegistry(Ecr.build(`${id}Ecr`));
67
- // this.databaseStack = new AwsStack(
68
- // `${id}Database`,
69
- // this.vpcStack,
70
- // stackProps
71
- // )
72
- // .addNetwork(this.vpcStack.getNetwork())
73
- // .addResource(Database.build(`${id}Database`));
74
- // //TODO: validate id does not contain special characters (no hyphens - no slashes etc) database instances won't allow it
75
- // const dbResource = this.databaseStack.getResource(
76
- // `${id}Database`
77
- // ) as Database;
78
- // const secretObjectValue: ContainerSecret = {};
79
- // if (props.containerSecrets) {
80
- // for (const secretObject of props.containerSecrets) {
81
- // secretObjectValue[secretObject] = SecretValue.unsafePlainText("");
82
- // }
83
- // }
84
- // this.secretStack = new AwsStack(`${id}Secret`, [], stackProps).addResource(
85
- // Secret.build(`${id}Secret`, {
86
- // secretName: `/${props.clusterName}/${props.serviceName}`,
87
- // secretObjectValue: secretObjectValue,
88
- // tags: props.tags
89
- // })
90
- // );
91
- // this.computeStack = new AwsStack(
92
- // `${id}Compute`,
93
- // [this.vpcStack, this.databaseStack, this.secretStack],
94
- // stackProps
95
- // )
96
- // .addNetwork(this.vpcStack.getNetwork())
97
- // .addResource(
98
- // Fargate.build(`${id}Fargate`, {
99
- // clusterName: props.clusterName,
100
- // protocol: props.protocol,
101
- // //TODO: This should work via line 126, but doesn't work (at least on update)
102
- // databaseConnection: dbResource.connections,
103
- // containerCommand: props.containerCommand,
104
- // containerEnvironment: props.containerEnvironment,
105
- // containerPort: props.containerPort,
106
- // containerSecrets: secretObjectValue,
107
- // ecrRepository: this.vpcStack.getContainerRegistry(),
108
- // parentDomain: props.parentDomain?.toLowerCase(),
109
- // listenerPort: props.listenerPort,
110
- // scalingType: props.scalingType,
111
- // serviceName: props.serviceName,
112
- // taskRoleInlinePolicies: props.taskRoleInlinePolicies,
113
- // taskRoleManagedPolicies: props.taskRoleManagedPolicies,
114
- // tags: props.tags
115
- // })
116
- // )
117
- // .connect(`${id}Fargate`, `${id}Database`, 5432);
118
- // }
119
- // getStackProps(props: BasicAppProps): AwsStackProps | undefined {
120
- // if (!props) return;
121
- // return {
122
- // accountId: props.accountId,
123
- // region: props.region
124
- // };
125
- // }
126
- // getProps(
127
- // id: string,
128
- // rawProps: BasicAppProps
129
- // ): BasicAppProps & BasicAppPropDefaults {
130
- // const defaultProps = {
131
- // tags: {
132
- // "fjall:costAllocation:service": "app",
133
- // "fjall:costAllocation:environment":
134
- // rawProps.environment || "production",
135
- // "fjall:costAllocation:owner": rawProps.owner || "engineer"
136
- // },
137
- // scalingType: ScalingType.CPU,
138
- // protocol: rawProps.parentDomain ? Protocol.HTTPS : Protocol.HTTP,
139
- // containerPort: 3000,
140
- // serviceName: `${id}Service`,
141
- // clusterName: `${id}Cluster`
142
- // };
143
- // return {
144
- // ...defaultProps,
145
- // ...rawProps
146
- // };
147
- // }
148
- // }
149
- // export default BasicApp;
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNBcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2Jhc2ljQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrRUFBK0U7QUFDL0UsNERBQTREO0FBQzVELG9CQUFvQjtBQUNwQixxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYiw0Q0FBNEM7QUFDNUMsZ0VBQWdFO0FBQ2hFLHdEQUF3RDtBQUN4RCxxREFBcUQ7QUFDckQsaURBQWlEO0FBQ2pELHdFQUF3RTtBQUN4RSwwQ0FBMEM7QUFFMUMsTUFBTTtBQUNOLCtGQUErRjtBQUMvRiw2RUFBNkU7QUFDN0UsTUFBTTtBQUNOLDBDQUEwQztBQUMxQyxvQkFBb0I7QUFDcEIseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qix3QkFBd0I7QUFDeEIsOEJBQThCO0FBQzlCLDJCQUEyQjtBQUMzQixJQUFJO0FBRUosbUNBQW1DO0FBQ25DLHdCQUF3QjtBQUN4QiwwQkFBMEI7QUFDMUIsaUNBQWlDO0FBQ2pDLHFDQUFxQztBQUNyQyw0QkFBNEI7QUFDNUIsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6QiwwRUFBMEU7QUFDMUUsb0JBQW9CO0FBQ3BCLG1FQUFtRTtBQUNuRSwyQkFBMkI7QUFDM0IseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQiwrQkFBK0I7QUFDL0IsMEJBQTBCO0FBQzFCLCtCQUErQjtBQUMvQixzQ0FBc0M7QUFDdEMsT0FBTztBQUNQLGdEQUFnRDtBQUNoRCxxQkFBcUI7QUFDckIsSUFBSTtBQUVKLDBCQUEwQjtBQUMxQixnQ0FBZ0M7QUFDaEMscUNBQXFDO0FBQ3JDLG1DQUFtQztBQUNuQyxvQ0FBb0M7QUFFcEMsdURBQXVEO0FBQ3ZELGlEQUFpRDtBQUNqRCxvREFBb0Q7QUFFcEQsbUVBQW1FO0FBQ25FLHFCQUFxQjtBQUNyQixrQ0FBa0M7QUFDbEMsd0NBQXdDO0FBQ3hDLDZFQUE2RTtBQUM3RSxrQ0FBa0M7QUFDbEMsNkJBQTZCO0FBQzdCLGFBQWE7QUFDYixVQUFVO0FBQ1Ysc0RBQXNEO0FBRXRELHlDQUF5QztBQUN6Qyx5QkFBeUI7QUFDekIsdUJBQXVCO0FBQ3ZCLG1CQUFtQjtBQUNuQixRQUFRO0FBQ1IsZ0RBQWdEO0FBQ2hELHVEQUF1RDtBQUV2RCw4SEFBOEg7QUFFOUgseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4QixxQkFBcUI7QUFFckIscURBQXFEO0FBQ3JELG9DQUFvQztBQUNwQyw2REFBNkQ7QUFDN0QsNkVBQTZFO0FBQzdFLFVBQVU7QUFDVixRQUFRO0FBRVIsa0ZBQWtGO0FBQ2xGLHNDQUFzQztBQUN0QyxvRUFBb0U7QUFDcEUsZ0RBQWdEO0FBQ2hELDJCQUEyQjtBQUMzQixXQUFXO0FBQ1gsU0FBUztBQUVULHdDQUF3QztBQUN4Qyx3QkFBd0I7QUFDeEIsK0RBQStEO0FBQy9ELG1CQUFtQjtBQUNuQixRQUFRO0FBQ1IsZ0RBQWdEO0FBQ2hELHNCQUFzQjtBQUN0QiwwQ0FBMEM7QUFDMUMsNENBQTRDO0FBQzVDLHNDQUFzQztBQUN0Qyx5RkFBeUY7QUFDekYsd0RBQXdEO0FBQ3hELHNEQUFzRDtBQUN0RCw4REFBOEQ7QUFDOUQsZ0RBQWdEO0FBQ2hELGlEQUFpRDtBQUNqRCxpRUFBaUU7QUFDakUsNkRBQTZEO0FBQzdELDhDQUE4QztBQUM5Qyw0Q0FBNEM7QUFDNUMsNENBQTRDO0FBQzVDLGtFQUFrRTtBQUNsRSxvRUFBb0U7QUFDcEUsNkJBQTZCO0FBQzdCLGFBQWE7QUFDYixVQUFVO0FBQ1YseURBQXlEO0FBQ3pELE1BQU07QUFFTixxRUFBcUU7QUFDckUsMEJBQTBCO0FBRTFCLGVBQWU7QUFDZixvQ0FBb0M7QUFDcEMsNkJBQTZCO0FBQzdCLFNBQVM7QUFDVCxNQUFNO0FBRU4sY0FBYztBQUNkLGtCQUFrQjtBQUNsQiw4QkFBOEI7QUFDOUIsOENBQThDO0FBQzlDLDZCQUE2QjtBQUM3QixnQkFBZ0I7QUFDaEIsaURBQWlEO0FBQ2pELDhDQUE4QztBQUM5QyxrREFBa0Q7QUFDbEQscUVBQXFFO0FBQ3JFLFdBQVc7QUFDWCxzQ0FBc0M7QUFDdEMsMEVBQTBFO0FBQzFFLDZCQUE2QjtBQUM3QixxQ0FBcUM7QUFDckMsb0NBQW9DO0FBQ3BDLFNBQVM7QUFFVCxlQUFlO0FBQ2YseUJBQXlCO0FBQ3pCLG9CQUFvQjtBQUNwQixTQUFTO0FBQ1QsTUFBTTtBQUNOLElBQUk7QUFDSiwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgQXdzU3RhY2ssIHsgQXdzU3RhY2tQcm9wcyB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2Jhc2UvYXdzU3RhY2tcIjtcbi8vIGltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvdnBjXCI7XG4vLyBpbXBvcnQgRmFyZ2F0ZSwge1xuLy8gICBDb250YWluZXJTZWNyZXQsXG4vLyAgIFNjYWxpbmdUeXBlLFxuLy8gICBQcm90b2NvbFxuLy8gfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1wiO1xuLy8gaW1wb3J0IERhdGFiYXNlIGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2RhdGFiYXNlXCI7XG4vLyBpbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG4vLyBpbXBvcnQgeyBFY3IgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlXCI7XG4vLyBpbXBvcnQgeyBGbiwgU2VjcmV0VmFsdWUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbi8vIGltcG9ydCB7IElNYW5hZ2VkUG9saWN5LCBQb2xpY3lEb2N1bWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG4vLyBpbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG4vLyAvKipcbi8vICAqIEludGVyc2VjdGVkIHdpdGggQmFzaWNBcHBQcm9wcyBpbiB0aGUgZ2V0UHJvcHMgbWV0aG9kLiBUaGlzIGFsbG93cyB0aGUgQmFzaWNBcHAgY29uc3RydWN0XG4vLyAgKiB0byB0cmVhdCB0aGVzZSBhcyByZXF1aXJlZCBwcm9wZXJ0aWVzIGFuZCBhdm9pZCBjb25zdGFudCBudWxsIGNoZWNraW5nLlxuLy8gICovXG4vLyBleHBvcnQgaW50ZXJmYWNlIEJhc2ljQXBwUHJvcERlZmF1bHRzIHtcbi8vICAgdGFnczogS2V5VmFsdWU7XG4vLyAgIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4vLyAgIGNsdXN0ZXJOYW1lOiBzdHJpbmc7XG4vLyAgIHByb3RvY29sOiBQcm90b2NvbDtcbi8vICAgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlO1xuLy8gICBjb250YWluZXJQb3J0OiBudW1iZXI7XG4vLyB9XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgQmFzaWNBcHBQcm9wcyB7XG4vLyAgIGFjY291bnRJZD86IHN0cmluZztcbi8vICAgY2x1c3Rlck5hbWU/OiBzdHJpbmc7XG4vLyAgIGNvbnRhaW5lckNvbW1hbmQ/OiBzdHJpbmdbXTtcbi8vICAgY29udGFpbmVyRW52aXJvbm1lbnQ/OiBLZXlWYWx1ZTtcbi8vICAgY29udGFpbmVyUG9ydD86IG51bWJlcjtcbi8vICAgY29udGFpbmVyU2VjcmV0cz86IHN0cmluZ1tdO1xuLy8gICBlbnZpcm9ubWVudDogc3RyaW5nO1xuLy8gICAvLyBUaGUgdGVhbS9kb21haW4vYnVzaW5lc3MtdW5pdCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIHNlcnZpY2Vcbi8vICAgb3duZXI/OiBzdHJpbmc7XG4vLyAgIHBhcmVudERvbWFpbj86IHN0cmluZzsgLy8gRml4IHRvIG1ha2UgYSBkZXBlbmRlbmN5IG9mIHByb3RvY29sXG4vLyAgIGxpc3RlbmVyUG9ydD86IG51bWJlcjtcbi8vICAgcHJvdG9jb2w/OiBQcm90b2NvbDtcbi8vICAgcmVnaW9uPzogc3RyaW5nO1xuLy8gICBzY2FsaW5nVHlwZT86IFNjYWxpbmdUeXBlO1xuLy8gICBzZXJ2aWNlTmFtZT86IHN0cmluZztcbi8vICAgdGFza1JvbGVJbmxpbmVQb2xpY2llcz86IHtcbi8vICAgICBbbmFtZTogc3RyaW5nXTogUG9saWN5RG9jdW1lbnQ7XG4vLyAgIH07XG4vLyAgIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzPzogSU1hbmFnZWRQb2xpY3lbXTtcbi8vICAgdGFncz86IEtleVZhbHVlO1xuLy8gfVxuXG4vLyBleHBvcnQgY2xhc3MgQmFzaWNBcHAge1xuLy8gICBwcml2YXRlIHZwY1N0YWNrOiBBd3NTdGFjaztcbi8vICAgcHJpdmF0ZSBkYXRhYmFzZVN0YWNrOiBBd3NTdGFjaztcbi8vICAgcHJpdmF0ZSBzZWNyZXRTdGFjazogQXdzU3RhY2s7XG4vLyAgIHByaXZhdGUgY29tcHV0ZVN0YWNrOiBBd3NTdGFjaztcblxuLy8gICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCByYXdQcm9wczogQmFzaWNBcHBQcm9wcykge1xuLy8gICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhpZCwgcmF3UHJvcHMpO1xuLy8gICAgIGNvbnN0IHN0YWNrUHJvcHMgPSB0aGlzLmdldFN0YWNrUHJvcHMocHJvcHMpO1xuXG4vLyAgICAgdGhpcy52cGNTdGFjayA9IG5ldyBBd3NTdGFjayhgJHtpZH1OZXR3b3JrYCwgW10sIHN0YWNrUHJvcHMpXG4vLyAgICAgICAuYWRkTmV0d29yayhcbi8vICAgICAgICAgVnBjLmJ1aWxkKGAke2lkfVZwY2AsIHtcbi8vICAgICAgICAgICBhY2NvdW50SWQ6IHByb3BzLmFjY291bnRJZCxcbi8vICAgICAgICAgICBpcHY0SXBhbVBvb2xJZDogRm4uaW1wb3J0VmFsdWUoYElwYW1Qb29sSWQke3Byb3BzPy5hY2NvdW50SWR9YCksXG4vLyAgICAgICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4vLyAgICAgICAgICAgdGFnczogcHJvcHMudGFnc1xuLy8gICAgICAgICB9KVxuLy8gICAgICAgKVxuLy8gICAgICAgLmFkZENvbnRhaW5lclJlZ2lzdHJ5KEVjci5idWlsZChgJHtpZH1FY3JgKSk7XG5cbi8vICAgICB0aGlzLmRhdGFiYXNlU3RhY2sgPSBuZXcgQXdzU3RhY2soXG4vLyAgICAgICBgJHtpZH1EYXRhYmFzZWAsXG4vLyAgICAgICB0aGlzLnZwY1N0YWNrLFxuLy8gICAgICAgc3RhY2tQcm9wc1xuLy8gICAgIClcbi8vICAgICAgIC5hZGROZXR3b3JrKHRoaXMudnBjU3RhY2suZ2V0TmV0d29yaygpKVxuLy8gICAgICAgLmFkZFJlc291cmNlKERhdGFiYXNlLmJ1aWxkKGAke2lkfURhdGFiYXNlYCkpO1xuXG4vLyAgICAgLy9UT0RPOiB2YWxpZGF0ZSBpZCBkb2VzIG5vdCBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycyAobm8gaHlwaGVucyAtIG5vIHNsYXNoZXMgZXRjKSBkYXRhYmFzZSBpbnN0YW5jZXMgd29uJ3QgYWxsb3cgaXRcblxuLy8gICAgIGNvbnN0IGRiUmVzb3VyY2UgPSB0aGlzLmRhdGFiYXNlU3RhY2suZ2V0UmVzb3VyY2UoXG4vLyAgICAgICBgJHtpZH1EYXRhYmFzZWBcbi8vICAgICApIGFzIERhdGFiYXNlO1xuXG4vLyAgICAgY29uc3Qgc2VjcmV0T2JqZWN0VmFsdWU6IENvbnRhaW5lclNlY3JldCA9IHt9O1xuLy8gICAgIGlmIChwcm9wcy5jb250YWluZXJTZWNyZXRzKSB7XG4vLyAgICAgICBmb3IgKGNvbnN0IHNlY3JldE9iamVjdCBvZiBwcm9wcy5jb250YWluZXJTZWNyZXRzKSB7XG4vLyAgICAgICAgIHNlY3JldE9iamVjdFZhbHVlW3NlY3JldE9iamVjdF0gPSBTZWNyZXRWYWx1ZS51bnNhZmVQbGFpblRleHQoXCJcIik7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuXG4vLyAgICAgdGhpcy5zZWNyZXRTdGFjayA9IG5ldyBBd3NTdGFjayhgJHtpZH1TZWNyZXRgLCBbXSwgc3RhY2tQcm9wcykuYWRkUmVzb3VyY2UoXG4vLyAgICAgICBTZWNyZXQuYnVpbGQoYCR7aWR9U2VjcmV0YCwge1xuLy8gICAgICAgICBzZWNyZXROYW1lOiBgLyR7cHJvcHMuY2x1c3Rlck5hbWV9LyR7cHJvcHMuc2VydmljZU5hbWV9YCxcbi8vICAgICAgICAgc2VjcmV0T2JqZWN0VmFsdWU6IHNlY3JldE9iamVjdFZhbHVlLFxuLy8gICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4vLyAgICAgICB9KVxuLy8gICAgICk7XG5cbi8vICAgICB0aGlzLmNvbXB1dGVTdGFjayA9IG5ldyBBd3NTdGFjayhcbi8vICAgICAgIGAke2lkfUNvbXB1dGVgLFxuLy8gICAgICAgW3RoaXMudnBjU3RhY2ssIHRoaXMuZGF0YWJhc2VTdGFjaywgdGhpcy5zZWNyZXRTdGFja10sXG4vLyAgICAgICBzdGFja1Byb3BzXG4vLyAgICAgKVxuLy8gICAgICAgLmFkZE5ldHdvcmsodGhpcy52cGNTdGFjay5nZXROZXR3b3JrKCkpXG4vLyAgICAgICAuYWRkUmVzb3VyY2UoXG4vLyAgICAgICAgIEZhcmdhdGUuYnVpbGQoYCR7aWR9RmFyZ2F0ZWAsIHtcbi8vICAgICAgICAgICBjbHVzdGVyTmFtZTogcHJvcHMuY2x1c3Rlck5hbWUsXG4vLyAgICAgICAgICAgcHJvdG9jb2w6IHByb3BzLnByb3RvY29sLFxuLy8gICAgICAgICAgIC8vVE9ETzogVGhpcyBzaG91bGQgd29yayB2aWEgbGluZSAxMjYsIGJ1dCBkb2Vzbid0IHdvcmsgKGF0IGxlYXN0IG9uIHVwZGF0ZSlcbi8vICAgICAgICAgICBkYXRhYmFzZUNvbm5lY3Rpb246IGRiUmVzb3VyY2UuY29ubmVjdGlvbnMsXG4vLyAgICAgICAgICAgY29udGFpbmVyQ29tbWFuZDogcHJvcHMuY29udGFpbmVyQ29tbWFuZCxcbi8vICAgICAgICAgICBjb250YWluZXJFbnZpcm9ubWVudDogcHJvcHMuY29udGFpbmVyRW52aXJvbm1lbnQsXG4vLyAgICAgICAgICAgY29udGFpbmVyUG9ydDogcHJvcHMuY29udGFpbmVyUG9ydCxcbi8vICAgICAgICAgICBjb250YWluZXJTZWNyZXRzOiBzZWNyZXRPYmplY3RWYWx1ZSxcbi8vICAgICAgICAgICBlY3JSZXBvc2l0b3J5OiB0aGlzLnZwY1N0YWNrLmdldENvbnRhaW5lclJlZ2lzdHJ5KCksXG4vLyAgICAgICAgICAgcGFyZW50RG9tYWluOiBwcm9wcy5wYXJlbnREb21haW4/LnRvTG93ZXJDYXNlKCksXG4vLyAgICAgICAgICAgbGlzdGVuZXJQb3J0OiBwcm9wcy5saXN0ZW5lclBvcnQsXG4vLyAgICAgICAgICAgc2NhbGluZ1R5cGU6IHByb3BzLnNjYWxpbmdUeXBlLFxuLy8gICAgICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbi8vICAgICAgICAgICB0YXNrUm9sZUlubGluZVBvbGljaWVzOiBwcm9wcy50YXNrUm9sZUlubGluZVBvbGljaWVzLFxuLy8gICAgICAgICAgIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzOiBwcm9wcy50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbi8vICAgICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4vLyAgICAgICAgIH0pXG4vLyAgICAgICApXG4vLyAgICAgICAuY29ubmVjdChgJHtpZH1GYXJnYXRlYCwgYCR7aWR9RGF0YWJhc2VgLCA1NDMyKTtcbi8vICAgfVxuXG4vLyAgIGdldFN0YWNrUHJvcHMocHJvcHM6IEJhc2ljQXBwUHJvcHMpOiBBd3NTdGFja1Byb3BzIHwgdW5kZWZpbmVkIHtcbi8vICAgICBpZiAoIXByb3BzKSByZXR1cm47XG5cbi8vICAgICByZXR1cm4ge1xuLy8gICAgICAgYWNjb3VudElkOiBwcm9wcy5hY2NvdW50SWQsXG4vLyAgICAgICByZWdpb246IHByb3BzLnJlZ2lvblxuLy8gICAgIH07XG4vLyAgIH1cblxuLy8gICBnZXRQcm9wcyhcbi8vICAgICBpZDogc3RyaW5nLFxuLy8gICAgIHJhd1Byb3BzOiBCYXNpY0FwcFByb3BzXG4vLyAgICk6IEJhc2ljQXBwUHJvcHMgJiBCYXNpY0FwcFByb3BEZWZhdWx0cyB7XG4vLyAgICAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuLy8gICAgICAgdGFnczoge1xuLy8gICAgICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogXCJhcHBcIixcbi8vICAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOlxuLy8gICAgICAgICAgIHJhd1Byb3BzLmVudmlyb25tZW50IHx8IFwicHJvZHVjdGlvblwiLFxuLy8gICAgICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IHJhd1Byb3BzLm93bmVyIHx8IFwiZW5naW5lZXJcIlxuLy8gICAgICAgfSxcbi8vICAgICAgIHNjYWxpbmdUeXBlOiBTY2FsaW5nVHlwZS5DUFUsXG4vLyAgICAgICBwcm90b2NvbDogcmF3UHJvcHMucGFyZW50RG9tYWluID8gUHJvdG9jb2wuSFRUUFMgOiBQcm90b2NvbC5IVFRQLFxuLy8gICAgICAgY29udGFpbmVyUG9ydDogMzAwMCxcbi8vICAgICAgIHNlcnZpY2VOYW1lOiBgJHtpZH1TZXJ2aWNlYCxcbi8vICAgICAgIGNsdXN0ZXJOYW1lOiBgJHtpZH1DbHVzdGVyYFxuLy8gICAgIH07XG5cbi8vICAgICByZXR1cm4ge1xuLy8gICAgICAgLi4uZGVmYXVsdFByb3BzLFxuLy8gICAgICAgLi4ucmF3UHJvcHNcbi8vICAgICB9O1xuLy8gICB9XG4vLyB9XG4vLyBleHBvcnQgZGVmYXVsdCBCYXNpY0FwcDtcbiJdfQ==
@@ -1,43 +0,0 @@
1
- import { BlockDevice, IMachineImage, IVpc, SubnetType, UserData, SecurityGroup, IConnectable, Connections } from "aws-cdk-lib/aws-ec2";
2
- import { Construct } from "constructs";
3
- import { StackProps } from "aws-cdk-lib";
4
- import { Role } from "aws-cdk-lib/aws-iam";
5
- import { KeyValue } from "../../types";
6
- interface ExistingVpcConfig {
7
- vpcId?: string;
8
- subnetType?: SubnetType;
9
- }
10
- interface NewVpcConfig {
11
- subnetType: SubnetType;
12
- }
13
- export type VpcProps = ExistingVpcConfig | NewVpcConfig;
14
- interface Ec2InstanceProps extends StackProps {
15
- spotCapacityPercentage?: number;
16
- blockDevices?: BlockDevice[];
17
- accountId?: string;
18
- serviceName: string;
19
- vpc: VpcProps;
20
- minCapcity?: number;
21
- maxCapacity?: number;
22
- instanceType: string;
23
- machineImage?: IMachineImage;
24
- userData?: UserData;
25
- role?: Role;
26
- enableSSH?: boolean;
27
- tags: KeyValue;
28
- }
29
- export declare class Ec2Instance extends Construct implements IConnectable {
30
- private launchTemplate;
31
- vpc: IVpc;
32
- asgSecurityGroup: SecurityGroup;
33
- private autoScalingGroup;
34
- private keyPair;
35
- constructor(scope: Construct, id: string, props: Ec2InstanceProps);
36
- connections: Connections;
37
- addVpc(props: Ec2InstanceProps): void;
38
- addKeyPair(props: Ec2InstanceProps): void;
39
- addLaunchTemplate(props: Ec2InstanceProps): void;
40
- addAutoScalingGroup(props: Ec2InstanceProps): void;
41
- suspendAutoScaling(): void;
42
- }
43
- export {};