@aws-mdaa/ddb-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,12 @@
1
+ # Construct Overview
2
+
3
+ Opinionated L2 Constructs for DDB Tables.
4
+
5
+ ## Security/Compliance
6
+
7
+ ### DDB Table
8
+ * Enforce Table Name
9
+ * Enforce KMS CMK encryption
10
+ * Enforce retention on stack deletion
11
+ * Enforce Point in Time Recovery
12
+ * Enforce deletion protection
package/lib/index.d.ts ADDED
@@ -0,0 +1,110 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import * as mdaa_construct from '@aws-mdaa/construct';
6
+ import { Duration } from 'aws-cdk-lib';
7
+ import { Attribute, BillingMode, StreamViewType, Table, TableClass } from 'aws-cdk-lib/aws-dynamodb';
8
+ import { IStream } from 'aws-cdk-lib/aws-kinesis';
9
+ import { IKey } from 'aws-cdk-lib/aws-kms';
10
+ import { Construct } from 'constructs';
11
+ export interface MdaaDDBTableProps extends mdaa_construct.MdaaConstructProps {
12
+ /**
13
+ * Q-ENHANCED-PROPERTY
14
+ * Optional physical table name override for custom naming requirements bypassing automatic MDAA naming conventions. When specified, provides exact control over DynamoDB table naming for integration with existing systems or specific naming requirements.
15
+ *
16
+ * Use cases: Custom naming requirements; Legacy system integration; Specific naming conventions; External tool integration
17
+ *
18
+ * AWS: DynamoDB table name specification for custom naming and integration requirements
19
+ *
20
+ * Validation: Must be valid DynamoDB table name if provided; overrides automatic MDAA naming when specified
21
+ **/
22
+ readonly tableName?: string;
23
+ readonly kinesisStream?: IStream;
24
+ /**
25
+ * Q-ENHANCED-PROPERTY
26
+ * Optional read capacity units for provisioned throughput controlling read performance and cost management. Defines the number of read capacity units for the table when using provisioned billing mode for predictable performance and cost control.
27
+ *
28
+ * Use cases: Performance tuning; Cost management; Predictable workloads; Capacity planning
29
+ *
30
+ * AWS: DynamoDB read capacity units for provisioned throughput and performance control
31
+ *
32
+ * Validation: Must be positive integer if provided; only valid with PROVISIONED billing mode; defaults to 5
33
+ **/
34
+ readonly readCapacity?: number;
35
+ /**
36
+ * Q-ENHANCED-PROPERTY
37
+ * Optional write capacity units for provisioned throughput controlling write performance and cost management. Defines the number of write capacity units for the table when using provisioned billing mode for predictable performance and cost control.
38
+ *
39
+ * Use cases: Performance tuning; Cost management; Predictable workloads; Capacity planning
40
+ *
41
+ * AWS: DynamoDB write capacity units for provisioned throughput and performance control
42
+ *
43
+ * Validation: Must be positive integer if provided; only valid with PROVISIONED billing mode; defaults to 5
44
+ **/
45
+ readonly writeCapacity?: number;
46
+ /**
47
+ * Q-ENHANCED-PROPERTY
48
+ * Optional billing mode specification controlling cost model and capacity management for the DynamoDB table. Determines whether the table uses provisioned capacity with predictable costs or pay-per-request for variable workloads.
49
+ *
50
+ * Use cases: Cost optimization; Capacity management; Workload matching; Performance predictability
51
+ *
52
+ * AWS: DynamoDB billing mode for cost control and capacity management configuration
53
+ *
54
+ * Validation: Must be PROVISIONED or PAY_PER_REQUEST; defaults based on replication configuration
55
+ **/
56
+ readonly billingMode?: BillingMode;
57
+ readonly tableClass?: TableClass;
58
+ readonly encryptionKey: IKey;
59
+ /**
60
+ * Q-ENHANCED-PROPERTY
61
+ * Optional TTL attribute name for automatic item expiration enabling data lifecycle management and storage cost optimization. Provides automatic cleanup of expired items based on timestamp values for efficient data management and cost control.
62
+ *
63
+ * Use cases: Data lifecycle management; Automatic cleanup; Cost optimization; Storage management
64
+ *
65
+ * AWS: DynamoDB TTL attribute for automatic item expiration and data lifecycle management
66
+ *
67
+ * Validation: Must be valid attribute name if provided; enables automatic item expiration based on timestamp
68
+ **/
69
+ readonly timeToLiveAttribute?: string;
70
+ readonly stream?: StreamViewType;
71
+ readonly replicationRegions?: string[];
72
+ readonly replicationTimeout?: Duration;
73
+ readonly waitForReplicationToFinish?: boolean;
74
+ readonly contributorInsightsEnabled?: boolean;
75
+ /**
76
+ * Q-ENHANCED-PROPERTY
77
+ * Required partition key attribute definition for table primary key structure enabling data distribution and access patterns. Defines the primary key attribute that determines data distribution across partitions for optimal performance and access patterns.
78
+ *
79
+ * Use cases: Primary key definition; Data distribution; Access pattern optimization; Table structure design
80
+ *
81
+ * AWS: DynamoDB partition key attribute for primary key structure and data distribution
82
+ *
83
+ * Validation: Must be valid Attribute definition; required for table primary key structure and data distribution
84
+ **/
85
+ readonly partitionKey: Attribute;
86
+ /**
87
+ * Q-ENHANCED-PROPERTY
88
+ * Optional sort key attribute definition for composite primary key structure enabling range queries and data organization. Provides secondary key component for composite primary keys enabling range queries and hierarchical data organization within partitions.
89
+ *
90
+ * Use cases: Composite primary keys; Range queries; Data organization; Hierarchical data structure
91
+ *
92
+ * AWS: DynamoDB sort key attribute for composite primary key structure and range query capabilities
93
+ *
94
+ * Validation: Must be valid Attribute definition if provided; enables composite primary keys and range queries
95
+ **/
96
+ readonly sortKey?: Attribute;
97
+ }
98
+ /**
99
+ * Compliance construct for DDB Table
100
+ * Enforces:
101
+ * Table name convention
102
+ * KMS Encryption at Rest
103
+ * Deletion Protection
104
+ * PITR
105
+ * RETAIN RemovalPolicy
106
+ */
107
+ export declare class MdaaDDBTable extends Table {
108
+ private static setProps;
109
+ constructor(scope: Construct, id: string, props: MdaaDDBTableProps);
110
+ }
package/lib/index.js ADDED
@@ -0,0 +1,89 @@
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.MdaaDDBTable = void 0;
10
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
11
+
12
+ const mdaa_construct = require("@aws-mdaa/construct"); //NOSONAR
13
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
14
+ const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
15
+ const construct_1 = require("@aws-mdaa/construct"); //NOSONAR
16
+ /**
17
+ * Compliance construct for DDB Table
18
+ * Enforces:
19
+ * Table name convention
20
+ * KMS Encryption at Rest
21
+ * Deletion Protection
22
+ * PITR
23
+ * RETAIN RemovalPolicy
24
+ */
25
+ class MdaaDDBTable extends aws_dynamodb_1.Table {
26
+ static setProps(props) {
27
+ const overrideProps = {
28
+ tableName: props.naming.resourceName(props.tableName, 254),
29
+ encryption: aws_dynamodb_1.TableEncryption.CUSTOMER_MANAGED,
30
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN,
31
+ deletionProtection: true,
32
+ pointInTimeRecovery: true,
33
+ };
34
+ return { ...props, ...overrideProps };
35
+ }
36
+ constructor(scope, id, props) {
37
+ super(scope, id, MdaaDDBTable.setProps(props));
38
+ construct_1.MdaaNagSuppressions.addCodeResourceSuppressions(this, [
39
+ { id: 'HIPAA.Security-DynamoDBInBackupPlan', reason: 'MDAA does not enforce use of AWS Backup' },
40
+ { id: 'PCI.DSS.321-DynamoDBInBackupPlan', reason: 'MDAA does not enforce use of AWS Backup' },
41
+ { id: 'NIST.800.53.R5-DynamoDBInBackupPlan', reason: 'MDAA does not enforce use of AWS Backup' },
42
+ {
43
+ id: 'NIST.800.53.R5-DynamoDBAutoScalingEnabled',
44
+ reason: 'MDAA does not enforce use of Auto Scaling on Provisioned Capacity tables.',
45
+ },
46
+ {
47
+ id: 'HIPAA.Security-DynamoDBAutoScalingEnabled',
48
+ reason: 'MDAA does not enforce use of Auto Scaling on Provisioned Capacity tables.',
49
+ },
50
+ {
51
+ id: 'PCI.DSS.321-DynamoDBAutoScalingEnabled',
52
+ reason: 'MDAA does not enforce use of Auto Scaling on Provisioned Capacity tables.',
53
+ },
54
+ ], true);
55
+ new mdaa_construct.MdaaParamAndOutput(this, {
56
+ ...{
57
+ resourceType: 'table',
58
+ resourceId: props.tableName,
59
+ name: 'name',
60
+ value: this.tableName,
61
+ },
62
+ ...props,
63
+ });
64
+ new mdaa_construct.MdaaParamAndOutput(this, {
65
+ ...{
66
+ resourceType: 'table',
67
+ resourceId: props.tableName,
68
+ name: 'arn',
69
+ value: this.tableArn,
70
+ },
71
+ ...props,
72
+ });
73
+ if (this.tableStreamArn) {
74
+ new mdaa_construct.MdaaParamAndOutput(this, {
75
+ ...{
76
+ resourceType: 'table',
77
+ resourceId: props.tableName,
78
+ name: 'streamArn',
79
+ value: this.tableStreamArn,
80
+ },
81
+ ...props,
82
+ });
83
+ }
84
+ }
85
+ }
86
+ exports.MdaaDDBTable = MdaaDDBTable;
87
+ _a = JSII_RTTI_SYMBOL_1;
88
+ MdaaDDBTable[_a] = { fqn: "@aws-mdaa/ddb-constructs.MdaaDDBTable", version: "1.2.0" };
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7R0FHRztBQUVILHNEQUFzRCxDQUFDLFNBQVM7QUFDaEUsNkNBQXNEO0FBQ3RELDJEQVFrQztBQUlsQyxtREFBMEQsQ0FBQyxTQUFTO0FBMkZwRTs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsWUFBYSxTQUFRLG9CQUFLO0lBQzdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBd0I7UUFDOUMsTUFBTSxhQUFhLEdBQUc7WUFDcEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO1lBQzFELFVBQVUsRUFBRSw4QkFBZSxDQUFDLGdCQUFnQjtZQUM1QyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxNQUFNO1lBQ25DLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsbUJBQW1CLEVBQUUsSUFBSTtTQUMxQixDQUFDO1FBQ0YsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUNELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRS9DLCtCQUFtQixDQUFDLDJCQUEyQixDQUM3QyxJQUFJLEVBQ0o7WUFDRSxFQUFFLEVBQUUsRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLEVBQUUseUNBQXlDLEVBQUU7WUFDaEcsRUFBRSxFQUFFLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLHlDQUF5QyxFQUFFO1lBQzdGLEVBQUUsRUFBRSxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sRUFBRSx5Q0FBeUMsRUFBRTtZQUNoRztnQkFDRSxFQUFFLEVBQUUsMkNBQTJDO2dCQUMvQyxNQUFNLEVBQUUsMkVBQTJFO2FBQ3BGO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLDJDQUEyQztnQkFDL0MsTUFBTSxFQUFFLDJFQUEyRTthQUNwRjtZQUNEO2dCQUNFLEVBQUUsRUFBRSx3Q0FBd0M7Z0JBQzVDLE1BQU0sRUFBRSwyRUFBMkU7YUFDcEY7U0FDRixFQUNELElBQUksQ0FDTCxDQUFDO1FBRUYsSUFBSSxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO1lBQzFDLEdBQUc7Z0JBQ0QsWUFBWSxFQUFFLE9BQU87Z0JBQ3JCLFVBQVUsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDM0IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQ3RCO1lBQ0QsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO1lBQzFDLEdBQUc7Z0JBQ0QsWUFBWSxFQUFFLE9BQU87Z0JBQ3JCLFVBQVUsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDM0IsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3JCO1lBQ0QsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO2dCQUMxQyxHQUFHO29CQUNELFlBQVksRUFBRSxPQUFPO29CQUNyQixVQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVM7b0JBQzNCLElBQUksRUFBRSxXQUFXO29CQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWM7aUJBQzNCO2dCQUNELEdBQUcsS0FBSzthQUNULENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQWxFSCxvQ0FtRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgKiBhcyBtZGFhX2NvbnN0cnVjdCBmcm9tICdAYXdzLW1kYWEvY29uc3RydWN0JzsgLy9OT1NPTkFSXG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQmlsbGluZ01vZGUsXG4gIFN0cmVhbVZpZXdUeXBlLFxuICBUYWJsZSxcbiAgVGFibGVDbGFzcyxcbiAgVGFibGVFbmNyeXB0aW9uLFxuICBUYWJsZVByb3BzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0IHsgSVN0cmVhbSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1raW5lc2lzJztcbmltcG9ydCB7IElLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcblxuaW1wb3J0IHsgTWRhYU5hZ1N1cHByZXNzaW9ucyB9IGZyb20gJ0Bhd3MtbWRhYS9jb25zdHJ1Y3QnOyAvL05PU09OQVJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1kYWFEREJUYWJsZVByb3BzIGV4dGVuZHMgbWRhYV9jb25zdHJ1Y3QuTWRhYUNvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgcGh5c2ljYWwgdGFibGUgbmFtZSBvdmVycmlkZSBmb3IgY3VzdG9tIG5hbWluZyByZXF1aXJlbWVudHMgYnlwYXNzaW5nIGF1dG9tYXRpYyBNREFBIG5hbWluZyBjb252ZW50aW9ucy4gV2hlbiBzcGVjaWZpZWQsIHByb3ZpZGVzIGV4YWN0IGNvbnRyb2wgb3ZlciBEeW5hbW9EQiB0YWJsZSBuYW1pbmcgZm9yIGludGVncmF0aW9uIHdpdGggZXhpc3Rpbmcgc3lzdGVtcyBvciBzcGVjaWZpYyBuYW1pbmcgcmVxdWlyZW1lbnRzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEN1c3RvbSBuYW1pbmcgcmVxdWlyZW1lbnRzOyBMZWdhY3kgc3lzdGVtIGludGVncmF0aW9uOyBTcGVjaWZpYyBuYW1pbmcgY29udmVudGlvbnM7IEV4dGVybmFsIHRvb2wgaW50ZWdyYXRpb25cbiAgICpcbiAgICogQVdTOiBEeW5hbW9EQiB0YWJsZSBuYW1lIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbSBuYW1pbmcgYW5kIGludGVncmF0aW9uIHJlcXVpcmVtZW50c1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIER5bmFtb0RCIHRhYmxlIG5hbWUgaWYgcHJvdmlkZWQ7IG92ZXJyaWRlcyBhdXRvbWF0aWMgTURBQSBuYW1pbmcgd2hlbiBzcGVjaWZpZWRcbiAgICoqL1xuICByZWFkb25seSB0YWJsZU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtpbmVzaXNTdHJlYW0/OiBJU3RyZWFtO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCByZWFkIGNhcGFjaXR5IHVuaXRzIGZvciBwcm92aXNpb25lZCB0aHJvdWdocHV0IGNvbnRyb2xsaW5nIHJlYWQgcGVyZm9ybWFuY2UgYW5kIGNvc3QgbWFuYWdlbWVudC4gRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJlYWQgY2FwYWNpdHkgdW5pdHMgZm9yIHRoZSB0YWJsZSB3aGVuIHVzaW5nIHByb3Zpc2lvbmVkIGJpbGxpbmcgbW9kZSBmb3IgcHJlZGljdGFibGUgcGVyZm9ybWFuY2UgYW5kIGNvc3QgY29udHJvbC5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBQZXJmb3JtYW5jZSB0dW5pbmc7IENvc3QgbWFuYWdlbWVudDsgUHJlZGljdGFibGUgd29ya2xvYWRzOyBDYXBhY2l0eSBwbGFubmluZ1xuICAgKlxuICAgKiBBV1M6IER5bmFtb0RCIHJlYWQgY2FwYWNpdHkgdW5pdHMgZm9yIHByb3Zpc2lvbmVkIHRocm91Z2hwdXQgYW5kIHBlcmZvcm1hbmNlIGNvbnRyb2xcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHByb3ZpZGVkOyBvbmx5IHZhbGlkIHdpdGggUFJPVklTSU9ORUQgYmlsbGluZyBtb2RlOyBkZWZhdWx0cyB0byA1XG4gICAqKi9cbiAgcmVhZG9ubHkgcmVhZENhcGFjaXR5PzogbnVtYmVyO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCB3cml0ZSBjYXBhY2l0eSB1bml0cyBmb3IgcHJvdmlzaW9uZWQgdGhyb3VnaHB1dCBjb250cm9sbGluZyB3cml0ZSBwZXJmb3JtYW5jZSBhbmQgY29zdCBtYW5hZ2VtZW50LiBEZWZpbmVzIHRoZSBudW1iZXIgb2Ygd3JpdGUgY2FwYWNpdHkgdW5pdHMgZm9yIHRoZSB0YWJsZSB3aGVuIHVzaW5nIHByb3Zpc2lvbmVkIGJpbGxpbmcgbW9kZSBmb3IgcHJlZGljdGFibGUgcGVyZm9ybWFuY2UgYW5kIGNvc3QgY29udHJvbC5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBQZXJmb3JtYW5jZSB0dW5pbmc7IENvc3QgbWFuYWdlbWVudDsgUHJlZGljdGFibGUgd29ya2xvYWRzOyBDYXBhY2l0eSBwbGFubmluZ1xuICAgKlxuICAgKiBBV1M6IER5bmFtb0RCIHdyaXRlIGNhcGFjaXR5IHVuaXRzIGZvciBwcm92aXNpb25lZCB0aHJvdWdocHV0IGFuZCBwZXJmb3JtYW5jZSBjb250cm9sXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgcG9zaXRpdmUgaW50ZWdlciBpZiBwcm92aWRlZDsgb25seSB2YWxpZCB3aXRoIFBST1ZJU0lPTkVEIGJpbGxpbmcgbW9kZTsgZGVmYXVsdHMgdG8gNVxuICAgKiovXG4gIHJlYWRvbmx5IHdyaXRlQ2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGJpbGxpbmcgbW9kZSBzcGVjaWZpY2F0aW9uIGNvbnRyb2xsaW5nIGNvc3QgbW9kZWwgYW5kIGNhcGFjaXR5IG1hbmFnZW1lbnQgZm9yIHRoZSBEeW5hbW9EQiB0YWJsZS4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0YWJsZSB1c2VzIHByb3Zpc2lvbmVkIGNhcGFjaXR5IHdpdGggcHJlZGljdGFibGUgY29zdHMgb3IgcGF5LXBlci1yZXF1ZXN0IGZvciB2YXJpYWJsZSB3b3JrbG9hZHMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ29zdCBvcHRpbWl6YXRpb247IENhcGFjaXR5IG1hbmFnZW1lbnQ7IFdvcmtsb2FkIG1hdGNoaW5nOyBQZXJmb3JtYW5jZSBwcmVkaWN0YWJpbGl0eVxuICAgKlxuICAgKiBBV1M6IER5bmFtb0RCIGJpbGxpbmcgbW9kZSBmb3IgY29zdCBjb250cm9sIGFuZCBjYXBhY2l0eSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBQUk9WSVNJT05FRCBvciBQQVlfUEVSX1JFUVVFU1Q7IGRlZmF1bHRzIGJhc2VkIG9uIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICoqL1xuICByZWFkb25seSBiaWxsaW5nTW9kZT86IEJpbGxpbmdNb2RlO1xuICByZWFkb25seSB0YWJsZUNsYXNzPzogVGFibGVDbGFzcztcbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogSUtleTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgVFRMIGF0dHJpYnV0ZSBuYW1lIGZvciBhdXRvbWF0aWMgaXRlbSBleHBpcmF0aW9uIGVuYWJsaW5nIGRhdGEgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHN0b3JhZ2UgY29zdCBvcHRpbWl6YXRpb24uIFByb3ZpZGVzIGF1dG9tYXRpYyBjbGVhbnVwIG9mIGV4cGlyZWQgaXRlbXMgYmFzZWQgb24gdGltZXN0YW1wIHZhbHVlcyBmb3IgZWZmaWNpZW50IGRhdGEgbWFuYWdlbWVudCBhbmQgY29zdCBjb250cm9sLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERhdGEgbGlmZWN5Y2xlIG1hbmFnZW1lbnQ7IEF1dG9tYXRpYyBjbGVhbnVwOyBDb3N0IG9wdGltaXphdGlvbjsgU3RvcmFnZSBtYW5hZ2VtZW50XG4gICAqXG4gICAqIEFXUzogRHluYW1vREIgVFRMIGF0dHJpYnV0ZSBmb3IgYXV0b21hdGljIGl0ZW0gZXhwaXJhdGlvbiBhbmQgZGF0YSBsaWZlY3ljbGUgbWFuYWdlbWVudFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIGlmIHByb3ZpZGVkOyBlbmFibGVzIGF1dG9tYXRpYyBpdGVtIGV4cGlyYXRpb24gYmFzZWQgb24gdGltZXN0YW1wXG4gICAqKi9cbiAgcmVhZG9ubHkgdGltZVRvTGl2ZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RyZWFtPzogU3RyZWFtVmlld1R5cGU7XG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uUmVnaW9ucz86IHN0cmluZ1tdO1xuICByZWFkb25seSByZXBsaWNhdGlvblRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgcmVhZG9ubHkgd2FpdEZvclJlcGxpY2F0aW9uVG9GaW5pc2g/OiBib29sZWFuO1xuICByZWFkb25seSBjb250cmlidXRvckluc2lnaHRzRW5hYmxlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIFJlcXVpcmVkIHBhcnRpdGlvbiBrZXkgYXR0cmlidXRlIGRlZmluaXRpb24gZm9yIHRhYmxlIHByaW1hcnkga2V5IHN0cnVjdHVyZSBlbmFibGluZyBkYXRhIGRpc3RyaWJ1dGlvbiBhbmQgYWNjZXNzIHBhdHRlcm5zLiBEZWZpbmVzIHRoZSBwcmltYXJ5IGtleSBhdHRyaWJ1dGUgdGhhdCBkZXRlcm1pbmVzIGRhdGEgZGlzdHJpYnV0aW9uIGFjcm9zcyBwYXJ0aXRpb25zIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIGFuZCBhY2Nlc3MgcGF0dGVybnMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogUHJpbWFyeSBrZXkgZGVmaW5pdGlvbjsgRGF0YSBkaXN0cmlidXRpb247IEFjY2VzcyBwYXR0ZXJuIG9wdGltaXphdGlvbjsgVGFibGUgc3RydWN0dXJlIGRlc2lnblxuICAgKlxuICAgKiBBV1M6IER5bmFtb0RCIHBhcnRpdGlvbiBrZXkgYXR0cmlidXRlIGZvciBwcmltYXJ5IGtleSBzdHJ1Y3R1cmUgYW5kIGRhdGEgZGlzdHJpYnV0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgQXR0cmlidXRlIGRlZmluaXRpb247IHJlcXVpcmVkIGZvciB0YWJsZSBwcmltYXJ5IGtleSBzdHJ1Y3R1cmUgYW5kIGRhdGEgZGlzdHJpYnV0aW9uXG4gICAqKi9cbiAgcmVhZG9ubHkgcGFydGl0aW9uS2V5OiBBdHRyaWJ1dGU7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIHNvcnQga2V5IGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZvciBjb21wb3NpdGUgcHJpbWFyeSBrZXkgc3RydWN0dXJlIGVuYWJsaW5nIHJhbmdlIHF1ZXJpZXMgYW5kIGRhdGEgb3JnYW5pemF0aW9uLiBQcm92aWRlcyBzZWNvbmRhcnkga2V5IGNvbXBvbmVudCBmb3IgY29tcG9zaXRlIHByaW1hcnkga2V5cyBlbmFibGluZyByYW5nZSBxdWVyaWVzIGFuZCBoaWVyYXJjaGljYWwgZGF0YSBvcmdhbml6YXRpb24gd2l0aGluIHBhcnRpdGlvbnMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ29tcG9zaXRlIHByaW1hcnkga2V5czsgUmFuZ2UgcXVlcmllczsgRGF0YSBvcmdhbml6YXRpb247IEhpZXJhcmNoaWNhbCBkYXRhIHN0cnVjdHVyZVxuICAgKlxuICAgKiBBV1M6IER5bmFtb0RCIHNvcnQga2V5IGF0dHJpYnV0ZSBmb3IgY29tcG9zaXRlIHByaW1hcnkga2V5IHN0cnVjdHVyZSBhbmQgcmFuZ2UgcXVlcnkgY2FwYWJpbGl0aWVzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgQXR0cmlidXRlIGRlZmluaXRpb24gaWYgcHJvdmlkZWQ7IGVuYWJsZXMgY29tcG9zaXRlIHByaW1hcnkga2V5cyBhbmQgcmFuZ2UgcXVlcmllc1xuICAgKiovXG4gIHJlYWRvbmx5IHNvcnRLZXk/OiBBdHRyaWJ1dGU7XG59XG5cbi8qKlxuICogQ29tcGxpYW5jZSBjb25zdHJ1Y3QgZm9yIEREQiBUYWJsZVxuICogRW5mb3JjZXM6XG4gKiBUYWJsZSBuYW1lIGNvbnZlbnRpb25cbiAqIEtNUyBFbmNyeXB0aW9uIGF0IFJlc3RcbiAqIERlbGV0aW9uIFByb3RlY3Rpb25cbiAqIFBJVFJcbiAqIFJFVEFJTiBSZW1vdmFsUG9saWN5XG4gKi9cbmV4cG9ydCBjbGFzcyBNZGFhRERCVGFibGUgZXh0ZW5kcyBUYWJsZSB7XG4gIHByaXZhdGUgc3RhdGljIHNldFByb3BzKHByb3BzOiBNZGFhRERCVGFibGVQcm9wcyk6IFRhYmxlUHJvcHMge1xuICAgIGNvbnN0IG92ZXJyaWRlUHJvcHMgPSB7XG4gICAgICB0YWJsZU5hbWU6IHByb3BzLm5hbWluZy5yZXNvdXJjZU5hbWUocHJvcHMudGFibGVOYW1lLCAyNTQpLFxuICAgICAgZW5jcnlwdGlvbjogVGFibGVFbmNyeXB0aW9uLkNVU1RPTUVSX01BTkFHRUQsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogdHJ1ZSxcbiAgICAgIHBvaW50SW5UaW1lUmVjb3Zlcnk6IHRydWUsXG4gICAgfTtcbiAgICByZXR1cm4geyAuLi5wcm9wcywgLi4ub3ZlcnJpZGVQcm9wcyB9O1xuICB9XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNZGFhRERCVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgTWRhYUREQlRhYmxlLnNldFByb3BzKHByb3BzKSk7XG5cbiAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIHRoaXMsXG4gICAgICBbXG4gICAgICAgIHsgaWQ6ICdISVBBQS5TZWN1cml0eS1EeW5hbW9EQkluQmFja3VwUGxhbicsIHJlYXNvbjogJ01EQUEgZG9lcyBub3QgZW5mb3JjZSB1c2Ugb2YgQVdTIEJhY2t1cCcgfSxcbiAgICAgICAgeyBpZDogJ1BDSS5EU1MuMzIxLUR5bmFtb0RCSW5CYWNrdXBQbGFuJywgcmVhc29uOiAnTURBQSBkb2VzIG5vdCBlbmZvcmNlIHVzZSBvZiBBV1MgQmFja3VwJyB9LFxuICAgICAgICB7IGlkOiAnTklTVC44MDAuNTMuUjUtRHluYW1vREJJbkJhY2t1cFBsYW4nLCByZWFzb246ICdNREFBIGRvZXMgbm90IGVuZm9yY2UgdXNlIG9mIEFXUyBCYWNrdXAnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ05JU1QuODAwLjUzLlI1LUR5bmFtb0RCQXV0b1NjYWxpbmdFbmFibGVkJyxcbiAgICAgICAgICByZWFzb246ICdNREFBIGRvZXMgbm90IGVuZm9yY2UgdXNlIG9mIEF1dG8gU2NhbGluZyBvbiBQcm92aXNpb25lZCBDYXBhY2l0eSB0YWJsZXMuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnSElQQUEuU2VjdXJpdHktRHluYW1vREJBdXRvU2NhbGluZ0VuYWJsZWQnLFxuICAgICAgICAgIHJlYXNvbjogJ01EQUEgZG9lcyBub3QgZW5mb3JjZSB1c2Ugb2YgQXV0byBTY2FsaW5nIG9uIFByb3Zpc2lvbmVkIENhcGFjaXR5IHRhYmxlcy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdQQ0kuRFNTLjMyMS1EeW5hbW9EQkF1dG9TY2FsaW5nRW5hYmxlZCcsXG4gICAgICAgICAgcmVhc29uOiAnTURBQSBkb2VzIG5vdCBlbmZvcmNlIHVzZSBvZiBBdXRvIFNjYWxpbmcgb24gUHJvdmlzaW9uZWQgQ2FwYWNpdHkgdGFibGVzLicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgbmV3IG1kYWFfY29uc3RydWN0Lk1kYWFQYXJhbUFuZE91dHB1dCh0aGlzLCB7XG4gICAgICAuLi57XG4gICAgICAgIHJlc291cmNlVHlwZTogJ3RhYmxlJyxcbiAgICAgICAgcmVzb3VyY2VJZDogcHJvcHMudGFibGVOYW1lLFxuICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiB0aGlzLnRhYmxlTmFtZSxcbiAgICAgIH0sXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcblxuICAgIG5ldyBtZGFhX2NvbnN0cnVjdC5NZGFhUGFyYW1BbmRPdXRwdXQodGhpcywge1xuICAgICAgLi4ue1xuICAgICAgICByZXNvdXJjZVR5cGU6ICd0YWJsZScsXG4gICAgICAgIHJlc291cmNlSWQ6IHByb3BzLnRhYmxlTmFtZSxcbiAgICAgICAgbmFtZTogJ2FybicsXG4gICAgICAgIHZhbHVlOiB0aGlzLnRhYmxlQXJuLFxuICAgICAgfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnRhYmxlU3RyZWFtQXJuKSB7XG4gICAgICBuZXcgbWRhYV9jb25zdHJ1Y3QuTWRhYVBhcmFtQW5kT3V0cHV0KHRoaXMsIHtcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHJlc291cmNlVHlwZTogJ3RhYmxlJyxcbiAgICAgICAgICByZXNvdXJjZUlkOiBwcm9wcy50YWJsZU5hbWUsXG4gICAgICAgICAgbmFtZTogJ3N0cmVhbUFybicsXG4gICAgICAgICAgdmFsdWU6IHRoaXMudGFibGVTdHJlYW1Bcm4sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@aws-mdaa/ddb-constructs",
3
+ "version": "1.2.0",
4
+ "description": "MDAA DDB Constructs",
5
+ "license": "Apache-2.0",
6
+ "author": {
7
+ "name": "Amazon Web Services",
8
+ "url": "https://aws.amazon.com/solutions"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/aws/modern-data-architecture-accelerator"
13
+ },
14
+ "main": "lib/index.js",
15
+ "types": "lib/index.d.ts",
16
+ "scripts": {
17
+ "build": "export JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=1 && jsii --project-references",
18
+ "watch": "jsii -w --project-references",
19
+ "package": "jsii-pacmak --npmignore=false",
20
+ "test": "jest --passWithNoTests --coverage",
21
+ "lint": "eslint --max-warnings 0 -c ../../../../.eslintrc.json '**/*.{ts,tsx}' --ignore-pattern 'dist/*' --ignore-pattern 'node_modules/*' --ignore-pattern \"*.d.ts\" ",
22
+ "test-coverage": "jest --passWithNoTests --coverage"
23
+ },
24
+ "devDependencies": {
25
+ "@aws-mdaa/construct": "1.2.0",
26
+ "@aws-mdaa/kms-constructs": "1.2.0",
27
+ "@aws-mdaa/naming": "1.2.0",
28
+ "@aws-mdaa/testing": "1.2.0",
29
+ "@types/jest": "29.5.0",
30
+ "@types/node": "17.0.23",
31
+ "@types/prettier": "2.6.0",
32
+ "aws-cdk-lib": "2.201.0",
33
+ "cdk-nag": "2.37.1",
34
+ "constructs": "10.0.96",
35
+ "jest": "29.5.0",
36
+ "ts-jest": "29.1.0",
37
+ "ts-node": "10.9.1",
38
+ "typescript": "4.6.3",
39
+ "typescript-json-schema": "0.63.0"
40
+ },
41
+ "overrides": {
42
+ "aws-cdk-lib": "2.201.0",
43
+ "@types/babel__traverse": "7.18.2"
44
+ },
45
+ "dependencies": {
46
+ "@aws-mdaa/construct": "1.2.0",
47
+ "@aws-mdaa/kms-constructs": "1.2.0",
48
+ "@aws-mdaa/naming": "1.2.0",
49
+ "aws-cdk-lib": "2.201.0",
50
+ "cdk-nag": "2.37.1",
51
+ "constructs": "10.0.96"
52
+ },
53
+ "peerDependencies": {
54
+ "@aws-mdaa/construct": "1.2.0",
55
+ "@aws-mdaa/kms-constructs": "1.2.0",
56
+ "@aws-mdaa/naming": "1.2.0",
57
+ "aws-cdk-lib": "2.201.0",
58
+ "cdk-nag": "2.37.1",
59
+ "constructs": "10.0.96"
60
+ },
61
+ "gitHead": "8b49a2b371014baec046605ffdbfe38951099c31",
62
+ "stability": "experimental",
63
+ "jsii": {
64
+ "outdir": "jsii-dist",
65
+ "versionFormat": "full",
66
+ "targets": {
67
+ "java_disabled": {
68
+ "package": "software.amazon.awsmdaa.construct.ddb",
69
+ "maven": {
70
+ "groupId": "software.amazon.awsmdaa.construct",
71
+ "artifactId": "ddb"
72
+ }
73
+ },
74
+ "python_disabled": {
75
+ "distName": "aws-mdaa.ddb-constructs",
76
+ "module": "aws_mdaa.ddb_constructs"
77
+ }
78
+ }
79
+ }
80
+ }