@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.
- package/dist/lib/app.d.ts +8 -5
- package/dist/lib/app.js +19 -7
- package/dist/lib/patterns/aws/buildkite.js +4 -7
- package/dist/lib/patterns/aws/compute.d.ts +479 -48
- package/dist/lib/patterns/aws/compute.js +307 -94
- package/dist/lib/patterns/aws/database.d.ts +1 -0
- package/dist/lib/patterns/aws/database.js +4 -1
- package/dist/lib/patterns/aws/hostedZone.js +4 -7
- package/dist/lib/patterns/aws/loadBalancer.d.ts +163 -0
- package/dist/lib/patterns/aws/loadBalancer.js +278 -0
- package/dist/lib/patterns/aws/network.d.ts +1 -0
- package/dist/lib/patterns/aws/network.js +2 -1
- package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.d.ts +20 -0
- package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.js +180 -0
- package/dist/lib/resources/aws/compute/ecs.d.ts +294 -57
- package/dist/lib/resources/aws/compute/ecs.js +745 -261
- package/dist/lib/resources/aws/compute/ecsFreeTier.js +1 -1
- package/dist/lib/resources/aws/compute/ecsSpot.js +1 -1
- package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.d.ts +20 -0
- package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +180 -0
- package/dist/lib/resources/aws/database/rdsAurora.d.ts +1 -0
- package/dist/lib/resources/aws/database/rdsAurora.js +2 -2
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +1 -0
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +2 -1
- package/dist/lib/resources/aws/database/rdsDeletionWaiter.d.ts +33 -0
- package/dist/lib/resources/aws/database/rdsDeletionWaiter.js +74 -0
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +1 -0
- package/dist/lib/resources/aws/database/rdsInstance.js +3 -3
- package/dist/lib/resources/aws/networking/vpc.d.ts +1 -0
- package/dist/lib/resources/aws/networking/vpc.js +4 -3
- package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +2 -2
- package/dist/lib/resources/aws/networking/vpcEndpoint.js +1 -1
- package/dist/lib/resources/aws/networking/vpcEndpoints.d.ts +71 -0
- package/dist/lib/resources/aws/networking/vpcEndpoints.js +125 -0
- package/dist/lib/resources/aws/secrets/kms.d.ts +14 -0
- package/dist/lib/resources/aws/secrets/kms.js +5 -2
- package/dist/lib/resources/aws/secrets/secret.js +1 -1
- package/dist/lib/utils/standardTagsAspect.d.ts +26 -12
- package/dist/lib/utils/standardTagsAspect.js +67 -477
- package/dist/lib/utils/tagResource.d.ts +18 -3
- package/dist/lib/utils/tagResource.js +23 -6
- package/package.json +3 -3
- package/dist/lib/aspects/resourceInventory.d.ts +0 -41
- package/dist/lib/aspects/resourceInventory.js +0 -56
- package/dist/lib/config/audit.d.ts +0 -18
- package/dist/lib/config/audit.js +0 -22
- package/dist/lib/patterns/aws/auditRole.d.ts +0 -44
- package/dist/lib/patterns/aws/auditRole.js +0 -58
- package/dist/lib/patterns/aws/basicApp.d.ts +0 -0
- package/dist/lib/patterns/aws/basicApp.js +0 -150
- package/dist/lib/patterns/aws/ec2.d.ts +0 -43
- package/dist/lib/patterns/aws/ec2.js +0 -123
- package/dist/lib/patterns/aws/freeTierApp.d.ts +0 -44
- package/dist/lib/patterns/aws/freeTierApp.js +0 -83
- package/dist/lib/patterns/aws/spotInstanceApp.d.ts +0 -45
- package/dist/lib/patterns/aws/spotInstanceApp.js +0 -85
- package/dist/lib/resources/aws/audit/auditRole.d.ts +0 -32
- package/dist/lib/resources/aws/audit/auditRole.js +0 -46
- package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +0 -15
- package/dist/lib/resources/aws/database/databaseFreeTier.js +0 -29
- package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +0 -37
- package/dist/lib/resources/aws/database/rdsFreeTier.js +0 -84
- package/dist/lib/utils/getCidr.d.ts +0 -8
- package/dist/lib/utils/getCidr.js +0 -40
|
@@ -1,8 +1,23 @@
|
|
|
1
1
|
import { type IConstruct } from "constructs";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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
|
-
|
|
11
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
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": "
|
|
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
|
-
};
|
package/dist/lib/config/audit.js
DELETED
|
@@ -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 {};
|