@aws-mdaa/ecs-constructs 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # Construct Overview
2
+
3
+ Opinionated implementation of the Layer 2 CDK Constructs.
4
+
5
+ ## Security/Compliance
6
+
7
+ ### ECS Clusters
8
+ * Enforce Cluster Name
9
+ * Enforces KMS CMK encryption at rest
10
+ * Enforces container insights
11
+ * Enforces CloudWatch logging
12
+
13
+ ### Fargate Services
14
+ * Enforce Fargate Name
15
+ * Enforces non-public IP
16
+
17
+ ### Container Definitions
18
+ * Enforce Definition Name
19
+ * Enforces CloudWatch logging
@@ -0,0 +1,50 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { MdaaConstructProps } from '@aws-mdaa/construct';
6
+ import { IVpc } from 'aws-cdk-lib/aws-ec2';
7
+ import { AddCapacityOptions, CloudMapNamespaceOptions, Cluster } from 'aws-cdk-lib/aws-ecs';
8
+ import { IKey } from 'aws-cdk-lib/aws-kms';
9
+ import { ILogGroup } from 'aws-cdk-lib/aws-logs';
10
+ import { Construct } from 'constructs';
11
+ /**
12
+ * Properties for creating a Compliance ECS cluster
13
+ */
14
+ export interface MdaaECSClusterProps extends MdaaConstructProps {
15
+ readonly clusterName?: string;
16
+ /**
17
+ * Q-ENHANCED-PROPERTY
18
+ * Required VPC for ECS cluster deployment providing network isolation and security controls for containerized applications. Defines the network environment where ECS instances and ENIs will be deployed for secure container networking and connectivity.
19
+ *
20
+ * Use cases: Network isolation; VPC integration; Secure networking; Container connectivity
21
+ *
22
+ * AWS: Amazon VPC for ECS cluster network isolation and secure container deployment
23
+ *
24
+ * Validation: Must be valid IVpc interface; required for ECS cluster network deployment and security
25
+ * * See: https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.IVpc.html
26
+ **/
27
+ readonly vpc: IVpc;
28
+ readonly defaultCloudMapNamespace?: CloudMapNamespaceOptions;
29
+ /**
30
+ * Q-ENHANCED-PROPERTY
31
+ * Optional EC2 capacity configuration for ECS cluster compute resources enabling container hosting and scaling capabilities. Provides EC2-based compute capacity for container workloads with auto-scaling and resource management capabilities.
32
+ *
33
+ * Use cases: EC2 capacity; Container hosting; Compute scaling; Resource management
34
+ *
35
+ * AWS: Amazon EC2 capacity for ECS cluster compute resources and container hosting
36
+ *
37
+ * Validation: Must be valid AddCapacityOptions if provided; enables EC2-based container compute capacity
38
+ * **/
39
+ readonly capacity?: AddCapacityOptions;
40
+ readonly enableFargateCapacityProviders?: boolean;
41
+ readonly kmsKey: IKey;
42
+ readonly logGroup: ILogGroup;
43
+ }
44
+ /**
45
+ * A construct for creating a compliant ECS cluster resource.
46
+ */
47
+ export declare class MdaaECSCluster extends Cluster {
48
+ private static setProps;
49
+ constructor(scope: Construct, id: string, props: MdaaECSClusterProps);
50
+ }
package/lib/cluster.js ADDED
@@ -0,0 +1,53 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ "use strict";
7
+ var _a;
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MdaaECSCluster = void 0;
10
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
11
+
12
+ const construct_1 = require("@aws-mdaa/construct"); //NOSONAR
13
+ const aws_ecs_1 = require("aws-cdk-lib/aws-ecs");
14
+ /**
15
+ * A construct for creating a compliant ECS cluster resource.
16
+ */
17
+ class MdaaECSCluster extends aws_ecs_1.Cluster {
18
+ static setProps(props) {
19
+ const overrideProps = {
20
+ clusterName: props.naming.resourceName(props.clusterName, 255),
21
+ containerInsights: true,
22
+ executeCommandConfiguration: {
23
+ kmsKey: props.kmsKey,
24
+ logConfiguration: {
25
+ cloudWatchEncryptionEnabled: true,
26
+ cloudWatchLogGroup: props.logGroup,
27
+ },
28
+ logging: aws_ecs_1.ExecuteCommandLogging.OVERRIDE,
29
+ },
30
+ };
31
+ const allProps = {
32
+ ...props,
33
+ ...overrideProps,
34
+ };
35
+ return allProps;
36
+ }
37
+ constructor(scope, id, props) {
38
+ super(scope, id, MdaaECSCluster.setProps(props));
39
+ new construct_1.MdaaParamAndOutput(this, {
40
+ ...{
41
+ resourceType: 'cluster',
42
+ resourceId: props.clusterName,
43
+ name: 'arn',
44
+ value: this.clusterArn,
45
+ },
46
+ ...props,
47
+ }, scope);
48
+ }
49
+ }
50
+ exports.MdaaECSCluster = MdaaECSCluster;
51
+ _a = JSII_RTTI_SYMBOL_1;
52
+ MdaaECSCluster[_a] = { fqn: "@aws-mdaa/ecs-constructs.MdaaECSCluster", version: "1.2.0" };
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsdXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7O0dBR0c7QUFFSCxtREFBNkUsQ0FBQyxTQUFTO0FBRXZGLGlEQU02QjtBQXVDN0I7O0dBRUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxpQkFBTztJQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQTBCO1FBQ2hELE1BQU0sYUFBYSxHQUFHO1lBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztZQUM5RCxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLDJCQUEyQixFQUFFO2dCQUMzQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07Z0JBQ3BCLGdCQUFnQixFQUFFO29CQUNoQiwyQkFBMkIsRUFBRSxJQUFJO29CQUNqQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsUUFBUTtpQkFDbkM7Z0JBQ0QsT0FBTyxFQUFFLCtCQUFxQixDQUFDLFFBQVE7YUFDeEM7U0FDRixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQWlCO1lBQzdCLEdBQUcsS0FBSztZQUNSLEdBQUcsYUFBYTtTQUNqQixDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWpELElBQUksOEJBQWtCLENBQ3BCLElBQUksRUFDSjtZQUNFLEdBQUc7Z0JBQ0QsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLFVBQVUsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDN0IsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQ3ZCO1lBQ0QsR0FBRyxLQUFLO1NBQ1QsRUFDRCxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7O0FBckNILHdDQXNDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IE1kYWFDb25zdHJ1Y3RQcm9wcywgTWRhYVBhcmFtQW5kT3V0cHV0IH0gZnJvbSAnQGF3cy1tZGFhL2NvbnN0cnVjdCc7IC8vTk9TT05BUlxuaW1wb3J0IHsgSVZwYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHtcbiAgQWRkQ2FwYWNpdHlPcHRpb25zLFxuICBDbG91ZE1hcE5hbWVzcGFjZU9wdGlvbnMsXG4gIENsdXN0ZXIsXG4gIENsdXN0ZXJQcm9wcyxcbiAgRXhlY3V0ZUNvbW1hbmRMb2dnaW5nLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCB7IElLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IElMb2dHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgQ29tcGxpYW5jZSBFQ1MgY2x1c3RlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1kYWFFQ1NDbHVzdGVyUHJvcHMgZXh0ZW5kcyBNZGFhQ29uc3RydWN0UHJvcHMge1xuICByZWFkb25seSBjbHVzdGVyTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgVlBDIGZvciBFQ1MgY2x1c3RlciBkZXBsb3ltZW50IHByb3ZpZGluZyBuZXR3b3JrIGlzb2xhdGlvbiBhbmQgc2VjdXJpdHkgY29udHJvbHMgZm9yIGNvbnRhaW5lcml6ZWQgYXBwbGljYXRpb25zLiBEZWZpbmVzIHRoZSBuZXR3b3JrIGVudmlyb25tZW50IHdoZXJlIEVDUyBpbnN0YW5jZXMgYW5kIEVOSXMgd2lsbCBiZSBkZXBsb3llZCBmb3Igc2VjdXJlIGNvbnRhaW5lciBuZXR3b3JraW5nIGFuZCBjb25uZWN0aXZpdHkuXG4gICAqXG4gICAqIFVzZSBjYXNlczogTmV0d29yayBpc29sYXRpb247IFZQQyBpbnRlZ3JhdGlvbjsgU2VjdXJlIG5ldHdvcmtpbmc7IENvbnRhaW5lciBjb25uZWN0aXZpdHlcbiAgICpcbiAgICogQVdTOiBBbWF6b24gVlBDIGZvciBFQ1MgY2x1c3RlciBuZXR3b3JrIGlzb2xhdGlvbiBhbmQgc2VjdXJlIGNvbnRhaW5lciBkZXBsb3ltZW50XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgSVZwYyBpbnRlcmZhY2U7IHJlcXVpcmVkIGZvciBFQ1MgY2x1c3RlciBuZXR3b3JrIGRlcGxveW1lbnQgYW5kIHNlY3VyaXR5XG4gICAqICAgKiBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuYXdzX2VjMi5JVnBjLmh0bWxcbiAgICoqL1xuICByZWFkb25seSB2cGM6IElWcGM7XG4gIHJlYWRvbmx5IGRlZmF1bHRDbG91ZE1hcE5hbWVzcGFjZT86IENsb3VkTWFwTmFtZXNwYWNlT3B0aW9ucztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgRUMyIGNhcGFjaXR5IGNvbmZpZ3VyYXRpb24gZm9yIEVDUyBjbHVzdGVyIGNvbXB1dGUgcmVzb3VyY2VzIGVuYWJsaW5nIGNvbnRhaW5lciBob3N0aW5nIGFuZCBzY2FsaW5nIGNhcGFiaWxpdGllcy4gUHJvdmlkZXMgRUMyLWJhc2VkIGNvbXB1dGUgY2FwYWNpdHkgZm9yIGNvbnRhaW5lciB3b3JrbG9hZHMgd2l0aCBhdXRvLXNjYWxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEVDMiBjYXBhY2l0eTsgQ29udGFpbmVyIGhvc3Rpbmc7IENvbXB1dGUgc2NhbGluZzsgUmVzb3VyY2UgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBFQzIgY2FwYWNpdHkgZm9yIEVDUyBjbHVzdGVyIGNvbXB1dGUgcmVzb3VyY2VzIGFuZCBjb250YWluZXIgaG9zdGluZ1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIEFkZENhcGFjaXR5T3B0aW9ucyBpZiBwcm92aWRlZDsgZW5hYmxlcyBFQzItYmFzZWQgY29udGFpbmVyIGNvbXB1dGUgY2FwYWNpdHlcbiAgICogICAqKi9cbiAgcmVhZG9ubHkgY2FwYWNpdHk/OiBBZGRDYXBhY2l0eU9wdGlvbnM7XG4gIHJlYWRvbmx5IGVuYWJsZUZhcmdhdGVDYXBhY2l0eVByb3ZpZGVycz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGttc0tleTogSUtleTtcbiAgcmVhZG9ubHkgbG9nR3JvdXA6IElMb2dHcm91cDtcbn1cblxuLyoqXG4gKiBBIGNvbnN0cnVjdCBmb3IgY3JlYXRpbmcgYSBjb21wbGlhbnQgRUNTIGNsdXN0ZXIgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZGFhRUNTQ2x1c3RlciBleHRlbmRzIENsdXN0ZXIge1xuICBwcml2YXRlIHN0YXRpYyBzZXRQcm9wcyhwcm9wczogTWRhYUVDU0NsdXN0ZXJQcm9wcyk6IENsdXN0ZXJQcm9wcyB7XG4gICAgY29uc3Qgb3ZlcnJpZGVQcm9wcyA9IHtcbiAgICAgIGNsdXN0ZXJOYW1lOiBwcm9wcy5uYW1pbmcucmVzb3VyY2VOYW1lKHByb3BzLmNsdXN0ZXJOYW1lLCAyNTUpLFxuICAgICAgY29udGFpbmVySW5zaWdodHM6IHRydWUsXG4gICAgICBleGVjdXRlQ29tbWFuZENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAga21zS2V5OiBwcm9wcy5rbXNLZXksXG4gICAgICAgIGxvZ0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjbG91ZFdhdGNoRW5jcnlwdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgY2xvdWRXYXRjaExvZ0dyb3VwOiBwcm9wcy5sb2dHcm91cCxcbiAgICAgICAgfSxcbiAgICAgICAgbG9nZ2luZzogRXhlY3V0ZUNvbW1hbmRMb2dnaW5nLk9WRVJSSURFLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGFsbFByb3BzOiBDbHVzdGVyUHJvcHMgPSB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIC4uLm92ZXJyaWRlUHJvcHMsXG4gICAgfTtcbiAgICByZXR1cm4gYWxsUHJvcHM7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTWRhYUVDU0NsdXN0ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgTWRhYUVDU0NsdXN0ZXIuc2V0UHJvcHMocHJvcHMpKTtcblxuICAgIG5ldyBNZGFhUGFyYW1BbmRPdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAge1xuICAgICAgICAuLi57XG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiAnY2x1c3RlcicsXG4gICAgICAgICAgcmVzb3VyY2VJZDogcHJvcHMuY2x1c3Rlck5hbWUsXG4gICAgICAgICAgbmFtZTogJ2FybicsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuY2x1c3RlckFybixcbiAgICAgICAgfSxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICB9LFxuICAgICAgc2NvcGUsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,208 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { MdaaConstructProps } from '@aws-mdaa/construct';
6
+ import { Duration } from 'aws-cdk-lib';
7
+ import { ContainerDefinition, ContainerImage, EnvironmentFile, HealthCheck, LinuxParameters, PortMapping, Secret, SystemControl, TaskDefinition, Ulimit } from 'aws-cdk-lib/aws-ecs';
8
+ import { ILogGroup } from 'aws-cdk-lib/aws-logs';
9
+ import { Construct } from 'constructs';
10
+ /**
11
+ * Properties for creating a Compliance ECS containerdefinition
12
+ */
13
+ export interface MdaaECSContainerDefinitionProps extends MdaaConstructProps {
14
+ readonly taskDefinition: TaskDefinition;
15
+ readonly image: ContainerImage;
16
+ readonly containerName?: string;
17
+ /**
18
+ * Q-ENHANCED-PROPERTY
19
+ * Optional command array for container execution overriding the default CMD built into the container image. Provides custom command execution for container startup and application initialization with proper command-line argument handling.
20
+ *
21
+ * Use cases: Custom command execution; Application startup; Command override; Container initialization
22
+ *
23
+ * AWS: Docker container command for custom execution and application startup configuration
24
+ *
25
+ * Validation: Must be array of command strings if provided; overrides container image CMD when specified
26
+ **/
27
+ readonly command?: string[];
28
+ readonly cpu?: number;
29
+ readonly disableNetworking?: boolean;
30
+ readonly dnsSearchDomains?: string[];
31
+ readonly dnsServers?: string[];
32
+ readonly dockerLabels?: {
33
+ [key: string]: string;
34
+ };
35
+ readonly dockerSecurityOptions?: string[];
36
+ readonly entryPoint?: string[];
37
+ /**
38
+ * Q-ENHANCED-PROPERTY
39
+ * Optional environment variables map for container configuration enabling application configuration and runtime parameter passing. Provides environment variables for container applications with secure configuration management and runtime customization.
40
+ *
41
+ * Use cases: Application configuration; Runtime parameters; Environment setup; Configuration management
42
+ *
43
+ * AWS: Container environment variables for application configuration and runtime parameter management
44
+ *
45
+ * Validation: Must be object with string keys and values if provided; enables application configuration
46
+ * **/
47
+ readonly environment?: {
48
+ [key: string]: string;
49
+ };
50
+ readonly environmentFiles?: EnvironmentFile[];
51
+ readonly secrets?: {
52
+ [key: string]: Secret;
53
+ };
54
+ /**
55
+ * Time duration (in seconds) to wait before giving up on resolving dependencies for a container.
56
+ * @default - none
57
+ */
58
+ readonly startTimeout?: Duration;
59
+ /**
60
+ * Time duration (in seconds) to wait before the container is forcefully killed if it doesn't exit normally on its own.
61
+ * @default - none
62
+ */
63
+ readonly stopTimeout?: Duration;
64
+ /**
65
+ * Specifies whether the container is marked essential.
66
+ * If the essential parameter of a container is marked as true, and that container fails
67
+ * or stops for any reason, all other containers that are part of the task are stopped.
68
+ * If the essential parameter of a container is marked as false, then its failure does not
69
+ * affect the rest of the containers in a task. All tasks must have at least one essential container.
70
+ * If this parameter is omitted, a container is assumed to be essential.
71
+ * @default true
72
+ */
73
+ readonly essential?: boolean;
74
+ /**
75
+ * A list of hostnames and IP address mappings to append to the /etc/hosts file on the container.
76
+ * @default - No extra hosts.
77
+ */
78
+ readonly extraHosts?: {
79
+ [name: string]: string;
80
+ };
81
+ /**
82
+ * The health check command and associated configuration parameters for the container.
83
+ * @default - Health check configuration from container.
84
+ */
85
+ readonly healthCheck?: HealthCheck;
86
+ /**
87
+ * The hostname to use for your container.
88
+ * @default - Automatic hostname.
89
+ */
90
+ readonly hostname?: string;
91
+ /**
92
+ * The amount (in MiB) of memory to present to the container.
93
+ * If your container attempts to exceed the allocated memory, the container
94
+ * is terminated.
95
+ * At least one of memoryLimitMiB and memoryReservationMiB is required for non-Fargate services.
96
+ * @default - No memory limit.
97
+ */
98
+ readonly memoryLimitMiB?: number;
99
+ /**
100
+ * The soft limit (in MiB) of memory to reserve for the container.
101
+ * When system memory is under heavy contention, Docker attempts to keep the
102
+ * container memory to this soft limit. However, your container can consume more
103
+ * memory when it needs to, up to either the hard limit specified with the memory
104
+ * parameter (if applicable), or all of the available memory on the container
105
+ * instance, whichever comes first.
106
+ * At least one of memoryLimitMiB and memoryReservationMiB is required for non-Fargate services.
107
+ * @default - No memory reserved.
108
+ */
109
+ readonly memoryReservationMiB?: number;
110
+ /**
111
+ * Specifies whether the container is marked as privileged.
112
+ * When this parameter is true, the container is given elevated privileges on the host container instance (similar to the root user).
113
+ * @default false
114
+ */
115
+ readonly privileged?: boolean;
116
+ /**
117
+ * When this parameter is true, the container is given read-only access to its root file system.
118
+ * @default false
119
+ */
120
+ readonly readonlyRootFilesystem?: boolean;
121
+ /**
122
+ * The user name to use inside the container.
123
+ * @default root
124
+ */
125
+ readonly user?: string;
126
+ /**
127
+ * The working directory in which to run commands inside the container.
128
+ * @default /
129
+ */
130
+ readonly workingDirectory?: string;
131
+ /**
132
+ * Linux-specific modifications that are applied to the container, such as Linux kernel capabilities.
133
+ * For more information see [KernelCapabilities](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_KernelCapabilities.html).
134
+ * @default - No Linux parameters.
135
+ */
136
+ readonly linuxParameters?: LinuxParameters;
137
+ /**
138
+ * The number of GPUs assigned to the container.
139
+ * @default - No GPUs assigned.
140
+ */
141
+ readonly gpuCount?: number;
142
+ /**
143
+ * The port mappings to add to the container definition.
144
+ * @default - No ports are mapped.
145
+ */
146
+ readonly portMappings?: PortMapping[];
147
+ /**
148
+ * The inference accelerators referenced by the container.
149
+ * @default - No inference accelerators assigned.
150
+ */
151
+ readonly inferenceAcceleratorResources?: string[];
152
+ /**
153
+ * A list of namespaced kernel parameters to set in the container.
154
+ * @default - No system controls are set.
155
+ * See: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-systemcontrol.html
156
+ * See: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_systemcontrols
157
+ */
158
+ readonly systemControls?: SystemControl[];
159
+ /**
160
+ * When this parameter is true, a TTY is allocated. This parameter maps to Tty in the "Create a container section" of the
161
+ * Docker Remote API and the --tty option to `docker run`.
162
+ * @default - false
163
+ * See: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_pseudoterminal
164
+ */
165
+ readonly pseudoTerminal?: boolean;
166
+ /**
167
+ * An array of ulimits to set in the container.
168
+ */
169
+ readonly ulimits?: Ulimit[];
170
+ /**
171
+ * Prefix for the log streams
172
+ * The awslogs-stream-prefix option allows you to associate a log stream
173
+ * with the specified prefix, the container name, and the ID of the Amazon
174
+ * ECS task to which the container belongs. If you specify a prefix with
175
+ * this option, then the log stream takes the following format:
176
+ * prefix-name/container-name/ecs-task-id
177
+ */
178
+ readonly streamPrefix: string;
179
+ /**
180
+ * The log group to log to
181
+ * @default - A log group is automatically created.
182
+ */
183
+ readonly logGroup: ILogGroup;
184
+ /**
185
+ * This option defines a multiline start pattern in Python strftime format.
186
+ * A log message consists of a line that matches the pattern and any
187
+ * following lines that don’t match the pattern. Thus the matched line is
188
+ * the delimiter between log messages.
189
+ * @default - No multiline matching.
190
+ */
191
+ readonly datetimeFormat?: string;
192
+ /**
193
+ * This option defines a multiline start pattern using a regular expression.
194
+ * A log message consists of a line that matches the pattern and any
195
+ * following lines that don’t match the pattern. Thus the matched line is
196
+ * the delimiter between log messages.
197
+ * This option is ignored if datetimeFormat is also configured.
198
+ * @default - No multiline matching.
199
+ */
200
+ readonly multilinePattern?: string;
201
+ }
202
+ /**
203
+ * A construct for creating a compliant ECS containerdefinition resource.
204
+ */
205
+ export declare class MdaaECSContainerDefinition extends ContainerDefinition {
206
+ private static setProps;
207
+ constructor(scope: Construct, id: string, props: MdaaECSContainerDefinitionProps);
208
+ }
@@ -0,0 +1,71 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ "use strict";
7
+ var _a;
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MdaaECSContainerDefinition = void 0;
10
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
11
+
12
+ const construct_1 = require("@aws-mdaa/construct"); //NOSONAR
13
+ const aws_ecs_1 = require("aws-cdk-lib/aws-ecs");
14
+ const construct_2 = require("@aws-mdaa/construct"); //NOSONAR
15
+ /**
16
+ * A construct for creating a compliant ECS containerdefinition resource.
17
+ */
18
+ class MdaaECSContainerDefinition extends aws_ecs_1.ContainerDefinition {
19
+ static setProps(props) {
20
+ const overrideProps = {
21
+ containerName: props.naming.resourceName(props.containerName, 255),
22
+ logging: aws_ecs_1.LogDriver.awsLogs({
23
+ logGroup: props.logGroup,
24
+ streamPrefix: props.streamPrefix,
25
+ datetimeFormat: props.datetimeFormat,
26
+ multilinePattern: props.multilinePattern,
27
+ }),
28
+ };
29
+ const allProps = {
30
+ ...props,
31
+ ...overrideProps,
32
+ };
33
+ return allProps;
34
+ }
35
+ constructor(scope, id, props) {
36
+ super(scope, id, MdaaECSContainerDefinition.setProps(props));
37
+ if (this.taskDefinition.executionRole) {
38
+ construct_2.MdaaNagSuppressions.addCodeResourceSuppressions(this.taskDefinition.executionRole, [
39
+ {
40
+ id: 'AwsSolutions-IAM5',
41
+ reason: 'Access limited to Log Group. Log Stream name not known at deployment time.',
42
+ },
43
+ {
44
+ id: 'NIST.800.53.R5-IAMNoInlinePolicy',
45
+ reason: 'Inline policy is specific to task logging and is appropriate.',
46
+ },
47
+ {
48
+ id: 'HIPAA.Security-IAMNoInlinePolicy',
49
+ reason: 'Inline policy is specific to task logging and is appropriate.',
50
+ },
51
+ {
52
+ id: 'PCI.DSS.321-IAMNoInlinePolicy',
53
+ reason: 'Inline policy is specific to task logging and is appropriate.',
54
+ },
55
+ ], true);
56
+ }
57
+ new construct_1.MdaaParamAndOutput(this, {
58
+ ...{
59
+ resourceType: 'containerdefinition',
60
+ resourceId: props.containerName,
61
+ name: 'name',
62
+ value: this.containerName,
63
+ },
64
+ ...props,
65
+ }, scope);
66
+ }
67
+ }
68
+ exports.MdaaECSContainerDefinition = MdaaECSContainerDefinition;
69
+ _a = JSII_RTTI_SYMBOL_1;
70
+ MdaaECSContainerDefinition[_a] = { fqn: "@aws-mdaa/ecs-constructs.MdaaECSContainerDefinition", version: "1.2.0" };
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLWRlZmluaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb250YWluZXItZGVmaW5pdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7R0FHRztBQUVILG1EQUE2RSxDQUFDLFNBQVM7QUFFdkYsaURBYTZCO0FBRTdCLG1EQUEwRCxDQUFDLFNBQVM7QUF3TXBFOztHQUVHO0FBQ0gsTUFBYSwwQkFBMkIsU0FBUSw2QkFBbUI7SUFDekQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFzQztRQUM1RCxNQUFNLGFBQWEsR0FBRztZQUNwQixhQUFhLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUM7WUFDbEUsT0FBTyxFQUFFLG1CQUFTLENBQUMsT0FBTyxDQUFDO2dCQUN6QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7Z0JBQ3hCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtnQkFDaEMsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO2dCQUNwQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO2FBQ3pDLENBQUM7U0FDSCxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQTZCO1lBQ3pDLEdBQUcsS0FBSztZQUNSLEdBQUcsYUFBYTtTQUNqQixDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0M7UUFDOUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsMEJBQTBCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFN0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RDLCtCQUFtQixDQUFDLDJCQUEyQixDQUM3QyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFDakM7Z0JBQ0U7b0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtvQkFDdkIsTUFBTSxFQUFFLDRFQUE0RTtpQkFDckY7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLGtDQUFrQztvQkFDdEMsTUFBTSxFQUFFLCtEQUErRDtpQkFDeEU7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLGtDQUFrQztvQkFDdEMsTUFBTSxFQUFFLCtEQUErRDtpQkFDeEU7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLCtCQUErQjtvQkFDbkMsTUFBTSxFQUFFLCtEQUErRDtpQkFDeEU7YUFDRixFQUNELElBQUksQ0FDTCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksOEJBQWtCLENBQ3BCLElBQUksRUFDSjtZQUNFLEdBQUc7Z0JBQ0QsWUFBWSxFQUFFLHFCQUFxQjtnQkFDbkMsVUFBVSxFQUFFLEtBQUssQ0FBQyxhQUFhO2dCQUMvQixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWE7YUFDMUI7WUFDRCxHQUFHLEtBQUs7U0FDVCxFQUNELEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQzs7QUEzREgsZ0VBNERDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgTWRhYUNvbnN0cnVjdFByb3BzLCBNZGFhUGFyYW1BbmRPdXRwdXQgfSBmcm9tICdAYXdzLW1kYWEvY29uc3RydWN0JzsgLy9OT1NPTkFSXG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIENvbnRhaW5lckRlZmluaXRpb24sXG4gIENvbnRhaW5lckRlZmluaXRpb25Qcm9wcyxcbiAgQ29udGFpbmVySW1hZ2UsXG4gIEVudmlyb25tZW50RmlsZSxcbiAgSGVhbHRoQ2hlY2ssXG4gIExpbnV4UGFyYW1ldGVycyxcbiAgTG9nRHJpdmVyLFxuICBQb3J0TWFwcGluZyxcbiAgU2VjcmV0LFxuICBTeXN0ZW1Db250cm9sLFxuICBUYXNrRGVmaW5pdGlvbixcbiAgVWxpbWl0LFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCB7IElMb2dHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IE1kYWFOYWdTdXBwcmVzc2lvbnMgfSBmcm9tICdAYXdzLW1kYWEvY29uc3RydWN0JzsgLy9OT1NPTkFSXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIENvbXBsaWFuY2UgRUNTIGNvbnRhaW5lcmRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZGFhRUNTQ29udGFpbmVyRGVmaW5pdGlvblByb3BzIGV4dGVuZHMgTWRhYUNvbnN0cnVjdFByb3BzIHtcbiAgcmVhZG9ubHkgdGFza0RlZmluaXRpb246IFRhc2tEZWZpbml0aW9uO1xuICByZWFkb25seSBpbWFnZTogQ29udGFpbmVySW1hZ2U7XG4gIHJlYWRvbmx5IGNvbnRhaW5lck5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGNvbW1hbmQgYXJyYXkgZm9yIGNvbnRhaW5lciBleGVjdXRpb24gb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBDTUQgYnVpbHQgaW50byB0aGUgY29udGFpbmVyIGltYWdlLiBQcm92aWRlcyBjdXN0b20gY29tbWFuZCBleGVjdXRpb24gZm9yIGNvbnRhaW5lciBzdGFydHVwIGFuZCBhcHBsaWNhdGlvbiBpbml0aWFsaXphdGlvbiB3aXRoIHByb3BlciBjb21tYW5kLWxpbmUgYXJndW1lbnQgaGFuZGxpbmcuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ3VzdG9tIGNvbW1hbmQgZXhlY3V0aW9uOyBBcHBsaWNhdGlvbiBzdGFydHVwOyBDb21tYW5kIG92ZXJyaWRlOyBDb250YWluZXIgaW5pdGlhbGl6YXRpb25cbiAgICpcbiAgICogQVdTOiBEb2NrZXIgY29udGFpbmVyIGNvbW1hbmQgZm9yIGN1c3RvbSBleGVjdXRpb24gYW5kIGFwcGxpY2F0aW9uIHN0YXJ0dXAgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIGNvbW1hbmQgc3RyaW5ncyBpZiBwcm92aWRlZDsgb3ZlcnJpZGVzIGNvbnRhaW5lciBpbWFnZSBDTUQgd2hlbiBzcGVjaWZpZWRcbiAgICoqL1xuICByZWFkb25seSBjb21tYW5kPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGNwdT86IG51bWJlcjtcbiAgcmVhZG9ubHkgZGlzYWJsZU5ldHdvcmtpbmc/OiBib29sZWFuO1xuICByZWFkb25seSBkbnNTZWFyY2hEb21haW5zPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGRuc1NlcnZlcnM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgZG9ja2VyTGFiZWxzPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfTtcbiAgcmVhZG9ubHkgZG9ja2VyU2VjdXJpdHlPcHRpb25zPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGVudHJ5UG9pbnQ/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIG1hcCBmb3IgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gZW5hYmxpbmcgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBhbmQgcnVudGltZSBwYXJhbWV0ZXIgcGFzc2luZy4gUHJvdmlkZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjb250YWluZXIgYXBwbGljYXRpb25zIHdpdGggc2VjdXJlIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBhbmQgcnVudGltZSBjdXN0b21pemF0aW9uLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb247IFJ1bnRpbWUgcGFyYW1ldGVyczsgRW52aXJvbm1lbnQgc2V0dXA7IENvbmZpZ3VyYXRpb24gbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IENvbnRhaW5lciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIHJ1bnRpbWUgcGFyYW1ldGVyIG1hbmFnZW1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBvYmplY3Qgd2l0aCBzdHJpbmcga2V5cyBhbmQgdmFsdWVzIGlmIHByb3ZpZGVkOyBlbmFibGVzIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogICAqKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xuICByZWFkb25seSBlbnZpcm9ubWVudEZpbGVzPzogRW52aXJvbm1lbnRGaWxlW107XG4gIHJlYWRvbmx5IHNlY3JldHM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogU2VjcmV0O1xuICB9O1xuICAvKipcbiAgICogVGltZSBkdXJhdGlvbiAoaW4gc2Vjb25kcykgdG8gd2FpdCBiZWZvcmUgZ2l2aW5nIHVwIG9uIHJlc29sdmluZyBkZXBlbmRlbmNpZXMgZm9yIGEgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0VGltZW91dD86IER1cmF0aW9uO1xuICAvKipcbiAgICogVGltZSBkdXJhdGlvbiAoaW4gc2Vjb25kcykgdG8gd2FpdCBiZWZvcmUgdGhlIGNvbnRhaW5lciBpcyBmb3JjZWZ1bGx5IGtpbGxlZCBpZiBpdCBkb2Vzbid0IGV4aXQgbm9ybWFsbHkgb24gaXRzIG93bi5cbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBzdG9wVGltZW91dD86IER1cmF0aW9uO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBpcyBtYXJrZWQgZXNzZW50aWFsLlxuICAgKiBJZiB0aGUgZXNzZW50aWFsIHBhcmFtZXRlciBvZiBhIGNvbnRhaW5lciBpcyBtYXJrZWQgYXMgdHJ1ZSwgYW5kIHRoYXQgY29udGFpbmVyIGZhaWxzXG4gICAqIG9yIHN0b3BzIGZvciBhbnkgcmVhc29uLCBhbGwgb3RoZXIgY29udGFpbmVycyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSB0YXNrIGFyZSBzdG9wcGVkLlxuICAgKiBJZiB0aGUgZXNzZW50aWFsIHBhcmFtZXRlciBvZiBhIGNvbnRhaW5lciBpcyBtYXJrZWQgYXMgZmFsc2UsIHRoZW4gaXRzIGZhaWx1cmUgZG9lcyBub3RcbiAgICogYWZmZWN0IHRoZSByZXN0IG9mIHRoZSBjb250YWluZXJzIGluIGEgdGFzay4gQWxsIHRhc2tzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZXNzZW50aWFsIGNvbnRhaW5lci5cbiAgICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZCwgYSBjb250YWluZXIgaXMgYXNzdW1lZCB0byBiZSBlc3NlbnRpYWwuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVzc2VudGlhbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgaG9zdG5hbWVzIGFuZCBJUCBhZGRyZXNzIG1hcHBpbmdzIHRvIGFwcGVuZCB0byB0aGUgL2V0Yy9ob3N0cyBmaWxlIG9uIHRoZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IC0gTm8gZXh0cmEgaG9zdHMuXG4gICAqL1xuICByZWFkb25seSBleHRyYUhvc3RzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7XG4gIH07XG4gIC8qKlxuICAgKiBUaGUgaGVhbHRoIGNoZWNrIGNvbW1hbmQgYW5kIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCAtIEhlYWx0aCBjaGVjayBjb25maWd1cmF0aW9uIGZyb20gY29udGFpbmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoQ2hlY2s/OiBIZWFsdGhDaGVjaztcbiAgLyoqXG4gICAqIFRoZSBob3N0bmFtZSB0byB1c2UgZm9yIHlvdXIgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBob3N0bmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RuYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGFtb3VudCAoaW4gTWlCKSBvZiBtZW1vcnkgdG8gcHJlc2VudCB0byB0aGUgY29udGFpbmVyLlxuICAgKiBJZiB5b3VyIGNvbnRhaW5lciBhdHRlbXB0cyB0byBleGNlZWQgdGhlIGFsbG9jYXRlZCBtZW1vcnksIHRoZSBjb250YWluZXJcbiAgICogaXMgdGVybWluYXRlZC5cbiAgICogQXQgbGVhc3Qgb25lIG9mIG1lbW9yeUxpbWl0TWlCIGFuZCBtZW1vcnlSZXNlcnZhdGlvbk1pQiBpcyByZXF1aXJlZCBmb3Igbm9uLUZhcmdhdGUgc2VydmljZXMuXG4gICAqIEBkZWZhdWx0IC0gTm8gbWVtb3J5IGxpbWl0LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgc29mdCBsaW1pdCAoaW4gTWlCKSBvZiBtZW1vcnkgdG8gcmVzZXJ2ZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICogV2hlbiBzeXN0ZW0gbWVtb3J5IGlzIHVuZGVyIGhlYXZ5IGNvbnRlbnRpb24sIERvY2tlciBhdHRlbXB0cyB0byBrZWVwIHRoZVxuICAgKiBjb250YWluZXIgbWVtb3J5IHRvIHRoaXMgc29mdCBsaW1pdC4gSG93ZXZlciwgeW91ciBjb250YWluZXIgY2FuIGNvbnN1bWUgbW9yZVxuICAgKiBtZW1vcnkgd2hlbiBpdCBuZWVkcyB0bywgdXAgdG8gZWl0aGVyIHRoZSBoYXJkIGxpbWl0IHNwZWNpZmllZCB3aXRoIHRoZSBtZW1vcnlcbiAgICogcGFyYW1ldGVyIChpZiBhcHBsaWNhYmxlKSwgb3IgYWxsIG9mIHRoZSBhdmFpbGFibGUgbWVtb3J5IG9uIHRoZSBjb250YWluZXJcbiAgICogaW5zdGFuY2UsIHdoaWNoZXZlciBjb21lcyBmaXJzdC5cbiAgICogQXQgbGVhc3Qgb25lIG9mIG1lbW9yeUxpbWl0TWlCIGFuZCBtZW1vcnlSZXNlcnZhdGlvbk1pQiBpcyByZXF1aXJlZCBmb3Igbm9uLUZhcmdhdGUgc2VydmljZXMuXG4gICAqIEBkZWZhdWx0IC0gTm8gbWVtb3J5IHJlc2VydmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5UmVzZXJ2YXRpb25NaUI/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgY29udGFpbmVyIGlzIG1hcmtlZCBhcyBwcml2aWxlZ2VkLlxuICAgKiBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIHRydWUsIHRoZSBjb250YWluZXIgaXMgZ2l2ZW4gZWxldmF0ZWQgcHJpdmlsZWdlcyBvbiB0aGUgaG9zdCBjb250YWluZXIgaW5zdGFuY2UgKHNpbWlsYXIgdG8gdGhlIHJvb3QgdXNlcikuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcml2aWxlZ2VkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZSwgdGhlIGNvbnRhaW5lciBpcyBnaXZlbiByZWFkLW9ubHkgYWNjZXNzIHRvIGl0cyByb290IGZpbGUgc3lzdGVtLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZG9ubHlSb290RmlsZXN5c3RlbT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgdXNlciBuYW1lIHRvIHVzZSBpbnNpZGUgdGhlIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgcm9vdFxuICAgKi9cbiAgcmVhZG9ubHkgdXNlcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBpbiB3aGljaCB0byBydW4gY29tbWFuZHMgaW5zaWRlIHRoZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IC9cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMaW51eC1zcGVjaWZpYyBtb2RpZmljYXRpb25zIHRoYXQgYXJlIGFwcGxpZWQgdG8gdGhlIGNvbnRhaW5lciwgc3VjaCBhcyBMaW51eCBrZXJuZWwgY2FwYWJpbGl0aWVzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgW0tlcm5lbENhcGFiaWxpdGllc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9LZXJuZWxDYXBhYmlsaXRpZXMuaHRtbCkuXG4gICAqIEBkZWZhdWx0IC0gTm8gTGludXggcGFyYW1ldGVycy5cbiAgICovXG4gIHJlYWRvbmx5IGxpbnV4UGFyYW1ldGVycz86IExpbnV4UGFyYW1ldGVycztcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgR1BVcyBhc3NpZ25lZCB0byB0aGUgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCAtIE5vIEdQVXMgYXNzaWduZWQuXG4gICAqL1xuICByZWFkb25seSBncHVDb3VudD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBwb3J0IG1hcHBpbmdzIHRvIGFkZCB0byB0aGUgY29udGFpbmVyIGRlZmluaXRpb24uXG4gICAqIEBkZWZhdWx0IC0gTm8gcG9ydHMgYXJlIG1hcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnRNYXBwaW5ncz86IFBvcnRNYXBwaW5nW107XG4gIC8qKlxuICAgKiBUaGUgaW5mZXJlbmNlIGFjY2VsZXJhdG9ycyByZWZlcmVuY2VkIGJ5IHRoZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IC0gTm8gaW5mZXJlbmNlIGFjY2VsZXJhdG9ycyBhc3NpZ25lZC5cbiAgICovXG4gIHJlYWRvbmx5IGluZmVyZW5jZUFjY2VsZXJhdG9yUmVzb3VyY2VzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgbmFtZXNwYWNlZCBrZXJuZWwgcGFyYW1ldGVycyB0byBzZXQgaW4gdGhlIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgLSBObyBzeXN0ZW0gY29udHJvbHMgYXJlIHNldC5cbiAgICogU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tc3lzdGVtY29udHJvbC5odG1sXG4gICAqIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbml0aW9uX3BhcmFtZXRlcnMuaHRtbCNjb250YWluZXJfZGVmaW5pdGlvbl9zeXN0ZW1jb250cm9sc1xuICAgKi9cbiAgcmVhZG9ubHkgc3lzdGVtQ29udHJvbHM/OiBTeXN0ZW1Db250cm9sW107XG4gIC8qKlxuICAgKiBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIHRydWUsIGEgVFRZIGlzIGFsbG9jYXRlZC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBUdHkgaW4gdGhlIFwiQ3JlYXRlIGEgY29udGFpbmVyIHNlY3Rpb25cIiBvZiB0aGVcbiAgICogRG9ja2VyIFJlbW90ZSBBUEkgYW5kIHRoZSAtLXR0eSBvcHRpb24gdG8gYGRvY2tlciBydW5gLlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbml0aW9uX3BhcmFtZXRlcnMuaHRtbCNjb250YWluZXJfZGVmaW5pdGlvbl9wc2V1ZG90ZXJtaW5hbFxuICAgKi9cbiAgcmVhZG9ubHkgcHNldWRvVGVybWluYWw/OiBib29sZWFuO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgdWxpbWl0cyB0byBzZXQgaW4gdGhlIGNvbnRhaW5lci5cbiAgICovXG4gIHJlYWRvbmx5IHVsaW1pdHM/OiBVbGltaXRbXTtcblxuICAvKipcbiAgICogUHJlZml4IGZvciB0aGUgbG9nIHN0cmVhbXNcbiAgICogVGhlIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBvcHRpb24gYWxsb3dzIHlvdSB0byBhc3NvY2lhdGUgYSBsb2cgc3RyZWFtXG4gICAqIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXgsIHRoZSBjb250YWluZXIgbmFtZSwgYW5kIHRoZSBJRCBvZiB0aGUgQW1hem9uXG4gICAqIEVDUyB0YXNrIHRvIHdoaWNoIHRoZSBjb250YWluZXIgYmVsb25ncy4gSWYgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aFxuICAgKiB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSB0YWtlcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAgICogICAgIHByZWZpeC1uYW1lL2NvbnRhaW5lci1uYW1lL2Vjcy10YXNrLWlkXG4gICAqL1xuICByZWFkb25seSBzdHJlYW1QcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxvZyBncm91cCB0byBsb2cgdG9cbiAgICogQGRlZmF1bHQgLSBBIGxvZyBncm91cCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cDogSUxvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gaW4gUHl0aG9uIHN0cmZ0aW1lIGZvcm1hdC5cbiAgICogQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnlcbiAgICogZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGh1cyB0aGUgbWF0Y2hlZCBsaW5lIGlzXG4gICAqIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuXG4gICAqIEBkZWZhdWx0IC0gTm8gbXVsdGlsaW5lIG1hdGNoaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0ZXRpbWVGb3JtYXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICogQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnlcbiAgICogZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGh1cyB0aGUgbWF0Y2hlZCBsaW5lIGlzXG4gICAqIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuXG4gICAqIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgZGF0ZXRpbWVGb3JtYXQgaXMgYWxzbyBjb25maWd1cmVkLlxuICAgKiBAZGVmYXVsdCAtIE5vIG11bHRpbGluZSBtYXRjaGluZy5cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpbGluZVBhdHRlcm4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBjb25zdHJ1Y3QgZm9yIGNyZWF0aW5nIGEgY29tcGxpYW50IEVDUyBjb250YWluZXJkZWZpbml0aW9uIHJlc291cmNlLlxuICovXG5leHBvcnQgY2xhc3MgTWRhYUVDU0NvbnRhaW5lckRlZmluaXRpb24gZXh0ZW5kcyBDb250YWluZXJEZWZpbml0aW9uIHtcbiAgcHJpdmF0ZSBzdGF0aWMgc2V0UHJvcHMocHJvcHM6IE1kYWFFQ1NDb250YWluZXJEZWZpbml0aW9uUHJvcHMpOiBDb250YWluZXJEZWZpbml0aW9uUHJvcHMge1xuICAgIGNvbnN0IG92ZXJyaWRlUHJvcHMgPSB7XG4gICAgICBjb250YWluZXJOYW1lOiBwcm9wcy5uYW1pbmcucmVzb3VyY2VOYW1lKHByb3BzLmNvbnRhaW5lck5hbWUsIDI1NSksXG4gICAgICBsb2dnaW5nOiBMb2dEcml2ZXIuYXdzTG9ncyh7XG4gICAgICAgIGxvZ0dyb3VwOiBwcm9wcy5sb2dHcm91cCxcbiAgICAgICAgc3RyZWFtUHJlZml4OiBwcm9wcy5zdHJlYW1QcmVmaXgsXG4gICAgICAgIGRhdGV0aW1lRm9ybWF0OiBwcm9wcy5kYXRldGltZUZvcm1hdCxcbiAgICAgICAgbXVsdGlsaW5lUGF0dGVybjogcHJvcHMubXVsdGlsaW5lUGF0dGVybixcbiAgICAgIH0pLFxuICAgIH07XG4gICAgY29uc3QgYWxsUHJvcHM6IENvbnRhaW5lckRlZmluaXRpb25Qcm9wcyA9IHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgLi4ub3ZlcnJpZGVQcm9wcyxcbiAgICB9O1xuICAgIHJldHVybiBhbGxQcm9wcztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNZGFhRUNTQ29udGFpbmVyRGVmaW5pdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBNZGFhRUNTQ29udGFpbmVyRGVmaW5pdGlvbi5zZXRQcm9wcyhwcm9wcykpO1xuXG4gICAgaWYgKHRoaXMudGFza0RlZmluaXRpb24uZXhlY3V0aW9uUm9sZSkge1xuICAgICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICAgIHRoaXMudGFza0RlZmluaXRpb24uZXhlY3V0aW9uUm9sZSxcbiAgICAgICAgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgICAgICAgcmVhc29uOiAnQWNjZXNzIGxpbWl0ZWQgdG8gTG9nIEdyb3VwLiBMb2cgU3RyZWFtIG5hbWUgbm90IGtub3duIGF0IGRlcGxveW1lbnQgdGltZS4nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdOSVNULjgwMC41My5SNS1JQU1Ob0lubGluZVBvbGljeScsXG4gICAgICAgICAgICByZWFzb246ICdJbmxpbmUgcG9saWN5IGlzIHNwZWNpZmljIHRvIHRhc2sgbG9nZ2luZyBhbmQgaXMgYXBwcm9wcmlhdGUuJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnSElQQUEuU2VjdXJpdHktSUFNTm9JbmxpbmVQb2xpY3knLFxuICAgICAgICAgICAgcmVhc29uOiAnSW5saW5lIHBvbGljeSBpcyBzcGVjaWZpYyB0byB0YXNrIGxvZ2dpbmcgYW5kIGlzIGFwcHJvcHJpYXRlLicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ1BDSS5EU1MuMzIxLUlBTU5vSW5saW5lUG9saWN5JyxcbiAgICAgICAgICAgIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgaXMgc3BlY2lmaWMgdG8gdGFzayBsb2dnaW5nIGFuZCBpcyBhcHByb3ByaWF0ZS4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH1cblxuICAgIG5ldyBNZGFhUGFyYW1BbmRPdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAge1xuICAgICAgICAuLi57XG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiAnY29udGFpbmVyZGVmaW5pdGlvbicsXG4gICAgICAgICAgcmVzb3VyY2VJZDogcHJvcHMuY29udGFpbmVyTmFtZSxcbiAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuY29udGFpbmVyTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICB9LFxuICAgICAgc2NvcGUsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,69 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { MdaaConstructProps } from '@aws-mdaa/construct';
6
+ import { Duration } from 'aws-cdk-lib';
7
+ import { ISecurityGroup, ISubnet } from 'aws-cdk-lib/aws-ec2';
8
+ import { CapacityProviderStrategy, CloudMapOptions, DeploymentCircuitBreaker, DeploymentController, FargateService, ICluster, PropagatedTagSource, ServiceConnectProps, TaskDefinition } from 'aws-cdk-lib/aws-ecs';
9
+ import { Construct } from 'constructs';
10
+ /**
11
+ * Properties for creating a Compliance ECS fargateservice
12
+ */
13
+ export interface MdaaECSFargateServiceProps extends MdaaConstructProps {
14
+ readonly taskDefinition: TaskDefinition;
15
+ /**
16
+ * Q-ENHANCED-PROPERTY
17
+ * Required array of subnets for Fargate service network placement enabling VPC connectivity and network isolation. Defines the network subnets where Fargate tasks will be deployed for secure networking and connectivity within the VPC environment.
18
+ *
19
+ * Use cases: Network placement; VPC connectivity; Subnet distribution; Network isolation
20
+ *
21
+ * AWS: VPC subnets for ECS Fargate service network placement and connectivity
22
+ *
23
+ * Validation: Must be array of valid ISubnet interfaces; required for Fargate service network placement
24
+ * * See: https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.ISubnet.html
25
+ **/
26
+ readonly subnets: ISubnet[];
27
+ /**
28
+ * Q-ENHANCED-PROPERTY
29
+ * Required array of security groups for Fargate service network access control defining inbound and outbound traffic rules. Provides network-level security controls for Fargate tasks ensuring secure communication and access control within the VPC.
30
+ *
31
+ * Use cases: Network security; Access control; Traffic filtering; Security group management
32
+ *
33
+ * AWS: VPC security groups for ECS Fargate service network security and access control
34
+ *
35
+ * Validation: Must be array of valid ISecurityGroup interfaces; required for network security and access control
36
+ * * See: https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.ISecurityGroup.html
37
+ **/
38
+ readonly securityGroups: ISecurityGroup[];
39
+ readonly cluster: ICluster;
40
+ readonly desiredCount?: number;
41
+ readonly serviceName?: string;
42
+ readonly maxHealthyPercent?: number;
43
+ readonly minHealthyPercent?: number;
44
+ readonly healthCheckGracePeriod?: Duration;
45
+ readonly cloudMapOptions?: CloudMapOptions;
46
+ readonly propagateTags: PropagatedTagSource.TASK_DEFINITION | PropagatedTagSource.SERVICE;
47
+ readonly enableECSManagedTags?: boolean;
48
+ readonly deploymentController?: DeploymentController;
49
+ readonly circuitBreaker?: DeploymentCircuitBreaker;
50
+ readonly capacityProviderStrategies?: CapacityProviderStrategy[];
51
+ /**
52
+ * Whether to enable the ability to execute into a container
53
+ * @default - undefined
54
+ */
55
+ readonly enableExecuteCommand?: boolean;
56
+ /**
57
+ * Configuration for Service Connect.
58
+ * @default No ports are advertised via Service Connect on this service, and the service
59
+ * cannot make requests to other services via Service Connect.
60
+ */
61
+ readonly serviceConnectConfiguration?: ServiceConnectProps;
62
+ }
63
+ /**
64
+ * A construct for creating a compliant ECS fargateservice resource.
65
+ */
66
+ export declare class MdaaECSFargateService extends FargateService {
67
+ private static setProps;
68
+ constructor(scope: Construct, id: string, props: MdaaECSFargateServiceProps);
69
+ }
@@ -0,0 +1,58 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ "use strict";
7
+ var _a;
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MdaaECSFargateService = void 0;
10
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
11
+
12
+ const construct_1 = require("@aws-mdaa/construct"); //NOSONAR
13
+ const aws_ecs_1 = require("aws-cdk-lib/aws-ecs");
14
+ /**
15
+ * A construct for creating a compliant ECS fargateservice resource.
16
+ */
17
+ class MdaaECSFargateService extends aws_ecs_1.FargateService {
18
+ static setProps(props) {
19
+ const overrideProps = {
20
+ serviceName: props.naming.resourceName(props.serviceName, 255),
21
+ assignPublicIp: false,
22
+ platformVersion: aws_ecs_1.FargatePlatformVersion.LATEST,
23
+ vpcSubnets: {
24
+ subnets: props.subnets,
25
+ },
26
+ };
27
+ const allProps = {
28
+ ...props,
29
+ ...overrideProps,
30
+ };
31
+ return allProps;
32
+ }
33
+ constructor(scope, id, props) {
34
+ super(scope, id, MdaaECSFargateService.setProps(props));
35
+ new construct_1.MdaaParamAndOutput(this, {
36
+ ...{
37
+ resourceType: 'fargateservice',
38
+ resourceId: props.serviceName,
39
+ name: 'arn',
40
+ value: this.serviceArn,
41
+ },
42
+ ...props,
43
+ }, scope);
44
+ new construct_1.MdaaParamAndOutput(this, {
45
+ ...{
46
+ resourceType: 'fargateservice',
47
+ resourceId: props.serviceName,
48
+ name: 'name',
49
+ value: this.serviceName,
50
+ },
51
+ ...props,
52
+ }, scope);
53
+ }
54
+ }
55
+ exports.MdaaECSFargateService = MdaaECSFargateService;
56
+ _a = JSII_RTTI_SYMBOL_1;
57
+ MdaaECSFargateService[_a] = { fqn: "@aws-mdaa/ecs-constructs.MdaaECSFargateService", version: "1.2.0" };
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFyZ2F0ZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmFyZ2F0ZS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7OztHQUdHO0FBRUgsbURBQTZFLENBQUMsU0FBUztBQUd2RixpREFZNkI7QUF5RDdCOztHQUVHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSx3QkFBYztJQUMvQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWlDO1FBQ3ZELE1BQU0sYUFBYSxHQUFHO1lBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztZQUM5RCxjQUFjLEVBQUUsS0FBSztZQUNyQixlQUFlLEVBQUUsZ0NBQXNCLENBQUMsTUFBTTtZQUM5QyxVQUFVLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQ3ZCO1NBQ0YsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUF3QjtZQUNwQyxHQUFHLEtBQUs7WUFDUixHQUFHLGFBQWE7U0FDakIsQ0FBQztRQUNGLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXhELElBQUksOEJBQWtCLENBQ3BCLElBQUksRUFDSjtZQUNFLEdBQUc7Z0JBQ0QsWUFBWSxFQUFFLGdCQUFnQjtnQkFDOUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM3QixJQUFJLEVBQUUsS0FBSztnQkFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDdkI7WUFDRCxHQUFHLEtBQUs7U0FDVCxFQUNELEtBQUssQ0FDTixDQUFDO1FBQ0YsSUFBSSw4QkFBa0IsQ0FDcEIsSUFBSSxFQUNKO1lBQ0UsR0FBRztnQkFDRCxZQUFZLEVBQUUsZ0JBQWdCO2dCQUM5QixVQUFVLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQzdCLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVzthQUN4QjtZQUNELEdBQUcsS0FBSztTQUNULEVBQ0QsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDOztBQTlDSCxzREErQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBNZGFhQ29uc3RydWN0UHJvcHMsIE1kYWFQYXJhbUFuZE91dHB1dCB9IGZyb20gJ0Bhd3MtbWRhYS9jb25zdHJ1Y3QnOyAvL05PU09OQVJcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSVNlY3VyaXR5R3JvdXAsIElTdWJuZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7XG4gIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneSxcbiAgQ2xvdWRNYXBPcHRpb25zLFxuICBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXIsXG4gIERlcGxveW1lbnRDb250cm9sbGVyLFxuICBGYXJnYXRlUGxhdGZvcm1WZXJzaW9uLFxuICBGYXJnYXRlU2VydmljZSxcbiAgRmFyZ2F0ZVNlcnZpY2VQcm9wcyxcbiAgSUNsdXN0ZXIsXG4gIFByb3BhZ2F0ZWRUYWdTb3VyY2UsXG4gIFNlcnZpY2VDb25uZWN0UHJvcHMsXG4gIFRhc2tEZWZpbml0aW9uLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgQ29tcGxpYW5jZSBFQ1MgZmFyZ2F0ZXNlcnZpY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZGFhRUNTRmFyZ2F0ZVNlcnZpY2VQcm9wcyBleHRlbmRzIE1kYWFDb25zdHJ1Y3RQcm9wcyB7XG4gIHJlYWRvbmx5IHRhc2tEZWZpbml0aW9uOiBUYXNrRGVmaW5pdGlvbjtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgYXJyYXkgb2Ygc3VibmV0cyBmb3IgRmFyZ2F0ZSBzZXJ2aWNlIG5ldHdvcmsgcGxhY2VtZW50IGVuYWJsaW5nIFZQQyBjb25uZWN0aXZpdHkgYW5kIG5ldHdvcmsgaXNvbGF0aW9uLiBEZWZpbmVzIHRoZSBuZXR3b3JrIHN1Ym5ldHMgd2hlcmUgRmFyZ2F0ZSB0YXNrcyB3aWxsIGJlIGRlcGxveWVkIGZvciBzZWN1cmUgbmV0d29ya2luZyBhbmQgY29ubmVjdGl2aXR5IHdpdGhpbiB0aGUgVlBDIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IE5ldHdvcmsgcGxhY2VtZW50OyBWUEMgY29ubmVjdGl2aXR5OyBTdWJuZXQgZGlzdHJpYnV0aW9uOyBOZXR3b3JrIGlzb2xhdGlvblxuICAgKlxuICAgKiBBV1M6IFZQQyBzdWJuZXRzIGZvciBFQ1MgRmFyZ2F0ZSBzZXJ2aWNlIG5ldHdvcmsgcGxhY2VtZW50IGFuZCBjb25uZWN0aXZpdHlcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBJU3VibmV0IGludGVyZmFjZXM7IHJlcXVpcmVkIGZvciBGYXJnYXRlIHNlcnZpY2UgbmV0d29yayBwbGFjZW1lbnRcbiAgICogICAqIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWMyLklTdWJuZXQuaHRtbFxuICAgKiovXG4gIHJlYWRvbmx5IHN1Ym5ldHM6IElTdWJuZXRbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgYXJyYXkgb2Ygc2VjdXJpdHkgZ3JvdXBzIGZvciBGYXJnYXRlIHNlcnZpY2UgbmV0d29yayBhY2Nlc3MgY29udHJvbCBkZWZpbmluZyBpbmJvdW5kIGFuZCBvdXRib3VuZCB0cmFmZmljIHJ1bGVzLiBQcm92aWRlcyBuZXR3b3JrLWxldmVsIHNlY3VyaXR5IGNvbnRyb2xzIGZvciBGYXJnYXRlIHRhc2tzIGVuc3VyaW5nIHNlY3VyZSBjb21tdW5pY2F0aW9uIGFuZCBhY2Nlc3MgY29udHJvbCB3aXRoaW4gdGhlIFZQQy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBOZXR3b3JrIHNlY3VyaXR5OyBBY2Nlc3MgY29udHJvbDsgVHJhZmZpYyBmaWx0ZXJpbmc7IFNlY3VyaXR5IGdyb3VwIG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBWUEMgc2VjdXJpdHkgZ3JvdXBzIGZvciBFQ1MgRmFyZ2F0ZSBzZXJ2aWNlIG5ldHdvcmsgc2VjdXJpdHkgYW5kIGFjY2VzcyBjb250cm9sXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgSVNlY3VyaXR5R3JvdXAgaW50ZXJmYWNlczsgcmVxdWlyZWQgZm9yIG5ldHdvcmsgc2VjdXJpdHkgYW5kIGFjY2VzcyBjb250cm9sXG4gICAqICAgKiBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuYXdzX2VjMi5JU2VjdXJpdHlHcm91cC5odG1sXG4gICAqKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM6IElTZWN1cml0eUdyb3VwW107XG4gIHJlYWRvbmx5IGNsdXN0ZXI6IElDbHVzdGVyO1xuICByZWFkb25seSBkZXNpcmVkQ291bnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBtYXhIZWFsdGh5UGVyY2VudD86IG51bWJlcjtcbiAgcmVhZG9ubHkgbWluSGVhbHRoeVBlcmNlbnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrR3JhY2VQZXJpb2Q/OiBEdXJhdGlvbjtcbiAgcmVhZG9ubHkgY2xvdWRNYXBPcHRpb25zPzogQ2xvdWRNYXBPcHRpb25zO1xuICByZWFkb25seSBwcm9wYWdhdGVUYWdzOiBQcm9wYWdhdGVkVGFnU291cmNlLlRBU0tfREVGSU5JVElPTiB8IFByb3BhZ2F0ZWRUYWdTb3VyY2UuU0VSVklDRTtcbiAgcmVhZG9ubHkgZW5hYmxlRUNTTWFuYWdlZFRhZ3M/OiBib29sZWFuO1xuICByZWFkb25seSBkZXBsb3ltZW50Q29udHJvbGxlcj86IERlcGxveW1lbnRDb250cm9sbGVyO1xuICByZWFkb25seSBjaXJjdWl0QnJlYWtlcj86IERlcGxveW1lbnRDaXJjdWl0QnJlYWtlcjtcbiAgcmVhZG9ubHkgY2FwYWNpdHlQcm92aWRlclN0cmF0ZWdpZXM/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgaW50byBhIGNvbnRhaW5lclxuICAgKiAgQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUV4ZWN1dGVDb21tYW5kPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIFNlcnZpY2UgQ29ubmVjdC5cbiAgICogQGRlZmF1bHQgTm8gcG9ydHMgYXJlIGFkdmVydGlzZWQgdmlhIFNlcnZpY2UgQ29ubmVjdCBvbiB0aGlzIHNlcnZpY2UsIGFuZCB0aGUgc2VydmljZVxuICAgKiBjYW5ub3QgbWFrZSByZXF1ZXN0cyB0byBvdGhlciBzZXJ2aWNlcyB2aWEgU2VydmljZSBDb25uZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uPzogU2VydmljZUNvbm5lY3RQcm9wcztcbn1cblxuLyoqXG4gKiBBIGNvbnN0cnVjdCBmb3IgY3JlYXRpbmcgYSBjb21wbGlhbnQgRUNTIGZhcmdhdGVzZXJ2aWNlIHJlc291cmNlLlxuICovXG5leHBvcnQgY2xhc3MgTWRhYUVDU0ZhcmdhdGVTZXJ2aWNlIGV4dGVuZHMgRmFyZ2F0ZVNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBzZXRQcm9wcyhwcm9wczogTWRhYUVDU0ZhcmdhdGVTZXJ2aWNlUHJvcHMpOiBGYXJnYXRlU2VydmljZVByb3BzIHtcbiAgICBjb25zdCBvdmVycmlkZVByb3BzID0ge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLm5hbWluZy5yZXNvdXJjZU5hbWUocHJvcHMuc2VydmljZU5hbWUsIDI1NSksXG4gICAgICBhc3NpZ25QdWJsaWNJcDogZmFsc2UsXG4gICAgICBwbGF0Zm9ybVZlcnNpb246IEZhcmdhdGVQbGF0Zm9ybVZlcnNpb24uTEFURVNULFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRzOiBwcm9wcy5zdWJuZXRzLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGFsbFByb3BzOiBGYXJnYXRlU2VydmljZVByb3BzID0ge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICAuLi5vdmVycmlkZVByb3BzLFxuICAgIH07XG4gICAgcmV0dXJuIGFsbFByb3BzO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1kYWFFQ1NGYXJnYXRlU2VydmljZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBNZGFhRUNTRmFyZ2F0ZVNlcnZpY2Uuc2V0UHJvcHMocHJvcHMpKTtcblxuICAgIG5ldyBNZGFhUGFyYW1BbmRPdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAge1xuICAgICAgICAuLi57XG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiAnZmFyZ2F0ZXNlcnZpY2UnLFxuICAgICAgICAgIHJlc291cmNlSWQ6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICAgIG5hbWU6ICdhcm4nLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnNlcnZpY2VBcm4sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgfSxcbiAgICAgIHNjb3BlLFxuICAgICk7XG4gICAgbmV3IE1kYWFQYXJhbUFuZE91dHB1dChcbiAgICAgIHRoaXMsXG4gICAgICB7XG4gICAgICAgIC4uLntcbiAgICAgICAgICByZXNvdXJjZVR5cGU6ICdmYXJnYXRlc2VydmljZScsXG4gICAgICAgICAgcmVzb3VyY2VJZDogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnNlcnZpY2VOYW1lLFxuICAgICAgICB9LFxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgIH0sXG4gICAgICBzY29wZSxcbiAgICApO1xuICB9XG59XG4iXX0=
package/lib/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ export * from './cluster';
6
+ export * from './fargate-service';
7
+ export * from './container-definition';
package/lib/index.js ADDED
@@ -0,0 +1,26 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ "use strict";
7
+
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ __exportStar(require("./cluster"), exports);
24
+ __exportStar(require("./fargate-service"), exports);
25
+ __exportStar(require("./container-definition"), exports);
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsNENBQTBCO0FBQzFCLG9EQUFrQztBQUNsQyx5REFBdUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2NsdXN0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9mYXJnYXRlLXNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250YWluZXItZGVmaW5pdGlvbic7XG4iXX0=