@aws-cdk/aws-redshift-alpha 2.160.0-alpha.0 → 2.161.1-alpha.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/.jsii CHANGED
@@ -8,7 +8,7 @@
8
8
  "url": "https://aws.amazon.com"
9
9
  },
10
10
  "dependencies": {
11
- "aws-cdk-lib": "^2.160.0",
11
+ "aws-cdk-lib": "^2.161.1",
12
12
  "constructs": "^10.0.0"
13
13
  },
14
14
  "dependencyClosure": {
@@ -3882,7 +3882,7 @@
3882
3882
  },
3883
3883
  "name": "@aws-cdk/aws-redshift-alpha",
3884
3884
  "readme": {
3885
- "markdown": "# Amazon Redshift Construct Library\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n\n<!--END STABILITY BANNER-->\n\n## Starting a Redshift Cluster Database\n\nTo set up a Redshift cluster, define a `Cluster`. It will be launched in a VPC.\nYou can specify a VPC, otherwise one will be created. The nodes are always launched in private subnets and are encrypted by default.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\n\nconst vpc = new ec2.Vpc(this, 'Vpc');\nconst cluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc\n});\n```\n\nBy default, the master password will be generated and stored in AWS Secrets Manager.\n\nA default database named `default_db` will be created in the cluster. To change the name of this database set the `defaultDatabaseName` attribute in the constructor properties.\n\nBy default, the cluster will not be publicly accessible.\nDepending on your use case, you can make the cluster publicly accessible with the `publiclyAccessible` property.\n\n## Adding a logging bucket for database audit logging to S3\n\nAmazon Redshift logs information about connections and user activities in your database. These logs help you to monitor the database for security and troubleshooting purposes, a process called database auditing. To send these logs to an S3 bucket, specify the `loggingProperties` when creating a new cluster.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as s3 from 'aws-cdk-lib/aws-s3';\n\nconst vpc = new ec2.Vpc(this, 'Vpc');\nconst bucket = s3.Bucket.fromBucketName(this, 'bucket', 'logging-bucket');\n\nconst cluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc,\n loggingProperties: {\n loggingBucket: bucket,\n loggingKeyPrefix: 'prefix',\n }\n});\n```\n\n## Connecting\n\nTo control who can access the cluster, use the `.connections` attribute. Redshift Clusters have\na default port, so you don't need to specify the port:\n\n```ts fixture=cluster\ncluster.connections.allowDefaultPortFromAnyIpv4('Open to the world');\n```\n\nThe endpoint to access your database cluster will be available as the `.clusterEndpoint` attribute:\n\n```ts fixture=cluster\ncluster.clusterEndpoint.socketAddress; // \"HOSTNAME:PORT\"\n```\n\n## Database Resources\n\nThis module allows for the creation of non-CloudFormation database resources such as users\nand tables. This allows you to manage identities, permissions, and stateful resources\nwithin your Redshift cluster from your CDK application.\n\nBecause these resources are not available in CloudFormation, this library leverages\n[custom\nresources](https://docs.aws.amazon.com/cdk/api/latest/docs/custom-resources-readme.html)\nto manage them. In addition to the IAM permissions required to make Redshift service\ncalls, the execution role for the custom resource handler requires database credentials to\ncreate resources within the cluster.\n\nThese database credentials can be supplied explicitly through the `adminUser` properties\nof the various database resource constructs. Alternatively, the credentials can be\nautomatically pulled from the Redshift cluster's default administrator\ncredentials. However, this option is only available if the password for the credentials\nwas generated by the CDK application (ie., no value vas provided for [the `masterPassword`\nproperty](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-redshift.Login.html#masterpasswordspan-classapi-icon-api-icon-experimental-titlethis-api-element-is-experimental-it-may-change-without-noticespan)\nof\n[`Cluster.masterUser`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-redshift.Cluster.html#masteruserspan-classapi-icon-api-icon-experimental-titlethis-api-element-is-experimental-it-may-change-without-noticespan)).\n\n### Creating Users\n\nCreate a user within a Redshift cluster database by instantiating a `User` construct. This\nwill generate a username and password, store the credentials in a [AWS Secrets Manager\n`Secret`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-secretsmanager.Secret.html),\nand make a query to the Redshift cluster to create a new database user with the\ncredentials.\n\n```ts fixture=cluster\nnew User(this, 'User', {\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nBy default, the user credentials are encrypted with your AWS account's default Secrets\nManager encryption key. You can specify the encryption key used for this purpose by\nsupplying a key in the `encryptionKey` property.\n\n```ts fixture=cluster\nimport * as kms from 'aws-cdk-lib/aws-kms';\n\nconst encryptionKey = new kms.Key(this, 'Key');\nnew User(this, 'User', {\n encryptionKey: encryptionKey,\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nBy default, a username is automatically generated from the user construct ID and its path\nin the construct tree. You can specify a particular username by providing a value for the\n`username` property. Usernames must be valid identifiers; see: [Names and\nidentifiers](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html) in the *Amazon\nRedshift Database Developer Guide*.\n\n```ts fixture=cluster\nnew User(this, 'User', {\n username: 'myuser',\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nThe user password is generated by AWS Secrets Manager using the default configuration\nfound in\n[`secretsmanager.SecretStringGenerator`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-secretsmanager.SecretStringGenerator.html),\nexcept with password length `30` and some SQL-incompliant characters excluded. The\nplaintext for the password will never be present in the CDK application; instead, a\n[CloudFormation Dynamic\nReference](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)\nwill be used wherever the password value is required.\n\n### Creating Tables\n\nCreate a table within a Redshift cluster database by instantiating a `Table`\nconstruct. This will make a query to the Redshift cluster to create a new database table\nwith the supplied schema.\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nTables greater than v2.114.1 can have their table name changed, for versions <= v2.114.1, this would not be possible.\nTherefore, changing of table names for <= v2.114.1 have been disabled.\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableName: 'oldTableName' // This value can be change for versions greater than v2.114.1\n tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nThe table can be configured to have distStyle attribute and a distKey column:\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableColumns: [\n { name: 'col1', dataType: 'varchar(4)', distKey: true },\n { name: 'col2', dataType: 'float' },\n ],\n cluster: cluster,\n databaseName: 'databaseName',\n distStyle: TableDistStyle.KEY,\n});\n```\n\nThe table can also be configured to have sortStyle attribute and sortKey columns:\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableColumns: [\n { name: 'col1', dataType: 'varchar(4)', sortKey: true },\n { name: 'col2', dataType: 'float', sortKey: true },\n ],\n cluster: cluster,\n databaseName: 'databaseName',\n sortStyle: TableSortStyle.COMPOUND,\n});\n```\n\nTables and their respective columns can be configured to contain comments:\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableColumns: [\n { name: 'col1', dataType: 'varchar(4)', comment: 'This is a column comment' },\n { name: 'col2', dataType: 'float', comment: 'This is a another column comment' }\n ],\n cluster: cluster,\n databaseName: 'databaseName',\n tableComment: 'This is a table comment',\n});\n```\n\nTable columns can be configured to use a specific compression encoding:\n\n```ts fixture=cluster\nimport { ColumnEncoding } from '@aws-cdk/aws-redshift-alpha';\n\nnew Table(this, 'Table', {\n tableColumns: [\n { name: 'col1', dataType: 'varchar(4)', encoding: ColumnEncoding.TEXT32K },\n { name: 'col2', dataType: 'float', encoding: ColumnEncoding.DELTA32K },\n ],\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nTable columns can also contain an `id` attribute, which can allow table columns to be renamed.\n\n**NOTE** To use the `id` attribute, you must also enable the `@aws-cdk/aws-redshift:columnId` feature flag.\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableColumns: [\n { id: 'col1', name: 'col1', dataType: 'varchar(4)' },\n { id: 'col2', name: 'col2', dataType: 'float' }\n ],\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\n### Granting Privileges\n\nYou can give a user privileges to perform certain actions on a table by using the\n`Table.grant()` method.\n\n```ts fixture=cluster\nconst user = new User(this, 'User', {\n cluster: cluster,\n databaseName: 'databaseName',\n});\nconst table = new Table(this, 'Table', {\n tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],\n cluster: cluster,\n databaseName: 'databaseName',\n});\n\ntable.grant(user, TableAction.DROP, TableAction.SELECT);\n```\n\nTake care when managing privileges via the CDK, as attempting to manage a user's\nprivileges on the same table in multiple CDK applications could lead to accidentally\noverriding these permissions. Consider the following two CDK applications which both refer\nto the same user and table. In application 1, the resources are created and the user is\ngiven `INSERT` permissions on the table:\n\n```ts fixture=cluster\nconst databaseName = 'databaseName';\nconst username = 'myuser'\nconst tableName = 'mytable'\n\nconst user = new User(this, 'User', {\n username: username,\n cluster: cluster,\n databaseName: databaseName,\n});\nconst table = new Table(this, 'Table', {\n tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],\n cluster: cluster,\n databaseName: databaseName,\n});\ntable.grant(user, TableAction.INSERT);\n```\n\nIn application 2, the resources are imported and the user is given `INSERT` permissions on\nthe table:\n\n```ts fixture=cluster\nconst databaseName = 'databaseName';\nconst username = 'myuser'\nconst tableName = 'mytable'\n\nconst user = User.fromUserAttributes(this, 'User', {\n username: username,\n password: SecretValue.unsafePlainText('NOT_FOR_PRODUCTION'),\n cluster: cluster,\n databaseName: databaseName,\n});\nconst table = Table.fromTableAttributes(this, 'Table', {\n tableName: tableName,\n tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],\n cluster: cluster,\n databaseName: 'databaseName',\n});\ntable.grant(user, TableAction.INSERT);\n```\n\nBoth applications attempt to grant the user the appropriate privilege on the table by\nsubmitting a `GRANT USER` SQL query to the Redshift cluster. Note that the latter of these\ntwo calls will have no effect since the user has already been granted the privilege.\n\nNow, if application 1 were to remove the call to `grant`, a `REVOKE USER` SQL query is\nsubmitted to the Redshift cluster. In general, application 1 does not know that\napplication 2 has also granted this permission and thus cannot decide not to issue the\nrevocation. This leads to the undesirable state where application 2 still contains the\ncall to `grant` but the user does not have the specified permission.\n\nNote that this does not occur when duplicate privileges are granted within the same\napplication, as such privileges are de-duplicated before any SQL query is submitted.\n\n## Rotating credentials\n\nWhen the master password is generated and stored in AWS Secrets Manager, it can be rotated automatically:\n\n```ts fixture=cluster\ncluster.addRotationSingleUser(); // Will rotate automatically after 30 days\n```\n\nThe multi user rotation scheme is also available:\n\n```ts fixture=cluster\n\nconst user = new User(this, 'User', {\n cluster: cluster,\n databaseName: 'databaseName',\n});\ncluster.addRotationMultiUser('MultiUserRotation', {\n secret: user.secret,\n});\n```\n\n## Adding Parameters\n\nYou can add a parameter to a parameter group with`ClusterParameterGroup.addParameter()`.\n\n```ts\nimport { ClusterParameterGroup } from '@aws-cdk/aws-redshift-alpha';\n\nconst params = new ClusterParameterGroup(this, 'Params', {\n description: 'desc',\n parameters: {\n require_ssl: 'true',\n },\n});\n\nparams.addParameter('enable_user_activity_logging', 'true');\n```\n\nAdditionally, you can add a parameter to the cluster's associated parameter group with `Cluster.addToParameterGroup()`. If the cluster does not have an associated parameter group, a new parameter group is created.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as cdk from 'aws-cdk-lib';\ndeclare const vpc: ec2.Vpc;\n\nconst cluster = new Cluster(this, 'Cluster', {\n masterUser: {\n masterUsername: 'admin',\n masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),\n },\n vpc,\n});\n\ncluster.addToParameterGroup('enable_user_activity_logging', 'true');\n```\n\n## Rebooting for Parameter Updates\n\nIn most cases, existing clusters [must be manually rebooted](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html) to apply parameter changes. You can automate parameter related reboots by setting the cluster's `rebootForParameterChanges` property to `true` , or by using `Cluster.enableRebootForParameterChanges()`.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as cdk from 'aws-cdk-lib';\ndeclare const vpc: ec2.Vpc;\n\nconst cluster = new Cluster(this, 'Cluster', {\n masterUser: {\n masterUsername: 'admin',\n masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),\n },\n vpc,\n});\n\ncluster.addToParameterGroup('enable_user_activity_logging', 'true');\ncluster.enableRebootForParameterChanges()\n```\n\n## Elastic IP\n\nIf you configure your cluster to be publicly accessible, you can optionally select an *elastic IP address* to use for the external IP address. An elastic IP address is a static IP address that is associated with your AWS account. You can use an elastic IP address to connect to your cluster from outside the VPC. An elastic IP address gives you the ability to change your underlying configuration without affecting the IP address that clients use to connect to your cluster. This approach can be helpful for situations such as recovery after a failure.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as cdk from 'aws-cdk-lib';\ndeclare const vpc: ec2.Vpc;\n\nnew Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),\n },\n vpc,\n publiclyAccessible: true,\n elasticIp: '10.123.123.255', // A elastic ip you own\n})\n```\n\nIf the Cluster is in a VPC and you want to connect to it using the private IP address from within the cluster, it is important to enable *DNS resolution* and *DNS hostnames* in the VPC config. If these parameters would not be set, connections from within the VPC would connect to the elastic IP address and not the private IP address.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nconst vpc = new ec2.Vpc(this, 'VPC', {\n enableDnsSupport: true,\n enableDnsHostnames: true,\n});\n```\n\nNote that if there is already an existing, public accessible Cluster, which VPC configuration is changed to use *DNS hostnames* and *DNS resolution*, connections still use the elastic IP address until the cluster is resized.\n\n### Elastic IP vs. Cluster node public IP\n\nThe elastic IP address is an external IP address for accessing the cluster outside of a VPC. It's not related to the cluster node public IP addresses and private IP addresses that are accessible via the `clusterEndpoint` property. The public and private cluster node IP addresses appear regardless of whether the cluster is publicly accessible or not. They are used only in certain circumstances to configure ingress rules on the remote host. These circumstances occur when you load data from an Amazon EC2 instance or other remote host using a Secure Shell (SSH) connection.\n\n### Attach Elastic IP after Cluster creation\n\nIn some cases, you might want to associate the cluster with an elastic IP address or change an elastic IP address that is associated with the cluster. To attach an elastic IP address after the cluster is created, first update the cluster so that it is not publicly accessible, then make it both publicly accessible and add an Elastic IP address in the same operation.\n\n## Enhanced VPC Routing\n\nWhen you use Amazon Redshift enhanced VPC routing, Amazon Redshift forces all COPY and UNLOAD traffic between your cluster and your data repositories through your virtual private cloud (VPC) based on the Amazon VPC service. By using enhanced VPC routing, you can use standard VPC features, such as VPC security groups, network access control lists (ACLs), VPC endpoints, VPC endpoint policies, internet gateways, and Domain Name System (DNS) servers, as described in the Amazon VPC User Guide. You use these features to tightly manage the flow of data between your Amazon Redshift cluster and other resources. When you use enhanced VPC routing to route traffic through your VPC, you can also use VPC flow logs to monitor COPY and UNLOAD traffic.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as cdk from 'aws-cdk-lib';\ndeclare const vpc: ec2.Vpc;\n\nnew Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),\n },\n vpc,\n enhancedVpcRouting: true,\n})\n```\n\nIf enhanced VPC routing is not enabled, Amazon Redshift routes traffic through the internet, including traffic to other services within the AWS network.\n\n## Default IAM role\n\nSome Amazon Redshift features require Amazon Redshift to access other AWS services on your behalf. For your Amazon Redshift clusters to act on your behalf, you supply security credentials to your clusters. The preferred method to supply security credentials is to specify an AWS Identity and Access Management (IAM) role.\n\nWhen you create an IAM role and set it as the default for the cluster using console, you don't have to provide the IAM role's Amazon Resource Name (ARN) to perform authentication and authorization.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const vpc: ec2.Vpc;\n\nconst defaultRole = new iam.Role(this, 'DefaultRole', {\n assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),\n},\n);\n\nnew Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc,\n roles: [defaultRole],\n defaultRole: defaultRole,\n});\n```\n\nA default role can also be added to a cluster using the `addDefaultIamRole` method.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const vpc: ec2.Vpc;\n\nconst defaultRole = new iam.Role(this, 'DefaultRole', {\n assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),\n},\n);\n\nconst redshiftCluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc,\n roles: [defaultRole],\n});\n\nredshiftCluster.addDefaultIamRole(defaultRole);\n```\n\n## IAM roles\n\nAttaching IAM roles to a Redshift Cluster grants permissions to the Redshift service to perform actions on your behalf.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const vpc: ec2.Vpc\n\nconst role = new iam.Role(this, 'Role', {\n assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),\n});\nconst cluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc,\n roles: [role],\n});\n```\n\nAdditional IAM roles can be attached to a cluster using the `addIamRole` method.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const vpc: ec2.Vpc\n\nconst role = new iam.Role(this, 'Role', {\n assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),\n});\nconst cluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc,\n});\ncluster.addIamRole(role);\n```\n\n## Multi-AZ\n\nAmazon Redshift supports [multiple Availability Zones (Multi-AZ) deployments]((https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-multi-az.html)) for provisioned RA3 clusters.\nBy using Multi-AZ deployments, your Amazon Redshift data warehouse can continue operating in failure scenarios when an unexpected event happens in an Availability Zone.\n\nTo create a Multi-AZ cluster, set the `multiAz` property to `true` when creating the cluster.\n\n```ts\ndeclare const vpc: ec2.IVpc;\n\nnew redshift.Cluster(stack, 'Cluster', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc, // 3 AZs are required for Multi-AZ\n nodeType: redshift.NodeType.RA3_XLPLUS, // must be RA3 node type\n clusterType: redshift.ClusterType.MULTI_NODE, // must be MULTI_NODE\n numberOfNodes: 2, // must be 2 or more\n multiAz: true,\n});\n```\n\n## Resizing\n\nAs your data warehousing needs change, it's possible to resize your Redshift cluster. If the cluster was deployed via CDK,\nit's important to resize it via CDK so the change is registered in the AWS CloudFormation template.\nThere are two types of resize operations:\n\n* Elastic resize - Number of nodes and node type can be changed, but not at the same time. Elastic resize is the default behavior,\nas it's a fast operation and typically completes in minutes. Elastic resize is only supported on clusters of the following types:\n * dc1.large (if your cluster is in a VPC)\n * dc1.8xlarge (if your cluster is in a VPC)\n * dc2.large\n * dc2.8xlarge\n * ds2.xlarge\n * ds2.8xlarge\n * ra3.xlplus\n * ra3.4xlarge\n * ra3.16xlarge\n\n* Classic resize - Number of nodes, node type, or both, can be changed. This operation takes longer to complete,\nbut is useful when the resize operation doesn't meet the criteria of an elastic resize. If you prefer classic resizing,\nyou can set the `classicResizing` flag when creating the cluster.\n\nThere are other constraints to be aware of, for example, elastic resizing does not support single-node clusters and there are\nlimits on the number of nodes you can add to a cluster. See the [AWS Redshift Documentation](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-operations.html#rs-resize-tutorial) and [AWS API Documentation](https://docs.aws.amazon.com/redshift/latest/APIReference/API_ResizeCluster.html) for more details.\n"
3885
+ "markdown": "# Amazon Redshift Construct Library\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n\n<!--END STABILITY BANNER-->\n\n## Starting a Redshift Cluster Database\n\nTo set up a Redshift cluster, define a `Cluster`. It will be launched in a VPC.\nYou can specify a VPC, otherwise one will be created. The nodes are always launched in private subnets and are encrypted by default.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\n\nconst vpc = new ec2.Vpc(this, 'Vpc');\nconst cluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc\n});\n```\n\nBy default, the master password will be generated and stored in AWS Secrets Manager.\nYou can specify characters to not include in generated passwords by setting `excludeCharacters` property.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\n\nconst vpc = new ec2.Vpc(this, 'Vpc');\nconst cluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n excludeCharacters: '\"@/\\\\\\ \\'`',\n },\n vpc\n});\n```\n\nA default database named `default_db` will be created in the cluster. To change the name of this database set the `defaultDatabaseName` attribute in the constructor properties.\n\nBy default, the cluster will not be publicly accessible.\nDepending on your use case, you can make the cluster publicly accessible with the `publiclyAccessible` property.\n\n## Adding a logging bucket for database audit logging to S3\n\nAmazon Redshift logs information about connections and user activities in your database. These logs help you to monitor the database for security and troubleshooting purposes, a process called database auditing. To send these logs to an S3 bucket, specify the `loggingProperties` when creating a new cluster.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as s3 from 'aws-cdk-lib/aws-s3';\n\nconst vpc = new ec2.Vpc(this, 'Vpc');\nconst bucket = s3.Bucket.fromBucketName(this, 'bucket', 'logging-bucket');\n\nconst cluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc,\n loggingProperties: {\n loggingBucket: bucket,\n loggingKeyPrefix: 'prefix',\n }\n});\n```\n\n## Connecting\n\nTo control who can access the cluster, use the `.connections` attribute. Redshift Clusters have\na default port, so you don't need to specify the port:\n\n```ts fixture=cluster\ncluster.connections.allowDefaultPortFromAnyIpv4('Open to the world');\n```\n\nThe endpoint to access your database cluster will be available as the `.clusterEndpoint` attribute:\n\n```ts fixture=cluster\ncluster.clusterEndpoint.socketAddress; // \"HOSTNAME:PORT\"\n```\n\n## Database Resources\n\nThis module allows for the creation of non-CloudFormation database resources such as users\nand tables. This allows you to manage identities, permissions, and stateful resources\nwithin your Redshift cluster from your CDK application.\n\nBecause these resources are not available in CloudFormation, this library leverages\n[custom\nresources](https://docs.aws.amazon.com/cdk/api/latest/docs/custom-resources-readme.html)\nto manage them. In addition to the IAM permissions required to make Redshift service\ncalls, the execution role for the custom resource handler requires database credentials to\ncreate resources within the cluster.\n\nThese database credentials can be supplied explicitly through the `adminUser` properties\nof the various database resource constructs. Alternatively, the credentials can be\nautomatically pulled from the Redshift cluster's default administrator\ncredentials. However, this option is only available if the password for the credentials\nwas generated by the CDK application (ie., no value vas provided for [the `masterPassword`\nproperty](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-redshift.Login.html#masterpasswordspan-classapi-icon-api-icon-experimental-titlethis-api-element-is-experimental-it-may-change-without-noticespan)\nof\n[`Cluster.masterUser`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-redshift.Cluster.html#masteruserspan-classapi-icon-api-icon-experimental-titlethis-api-element-is-experimental-it-may-change-without-noticespan)).\n\n### Creating Users\n\nCreate a user within a Redshift cluster database by instantiating a `User` construct. This\nwill generate a username and password, store the credentials in a [AWS Secrets Manager\n`Secret`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-secretsmanager.Secret.html),\nand make a query to the Redshift cluster to create a new database user with the\ncredentials.\n\n```ts fixture=cluster\nnew User(this, 'User', {\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nBy default, the user credentials are encrypted with your AWS account's default Secrets\nManager encryption key. You can specify the encryption key used for this purpose by\nsupplying a key in the `encryptionKey` property.\n\n```ts fixture=cluster\nimport * as kms from 'aws-cdk-lib/aws-kms';\n\nconst encryptionKey = new kms.Key(this, 'Key');\nnew User(this, 'User', {\n encryptionKey: encryptionKey,\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nBy default, a username is automatically generated from the user construct ID and its path\nin the construct tree. You can specify a particular username by providing a value for the\n`username` property. Usernames must be valid identifiers; see: [Names and\nidentifiers](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html) in the *Amazon\nRedshift Database Developer Guide*.\n\n```ts fixture=cluster\nnew User(this, 'User', {\n username: 'myuser',\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nThe user password is generated by AWS Secrets Manager using the default configuration\nfound in\n[`secretsmanager.SecretStringGenerator`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-secretsmanager.SecretStringGenerator.html),\nexcept with password length `30` and some SQL-incompliant characters excluded. The\nplaintext for the password will never be present in the CDK application; instead, a\n[CloudFormation Dynamic\nReference](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)\nwill be used wherever the password value is required.\n\nYou can specify characters to not include in generated passwords by setting `excludeCharacters` property.\n\n```ts fixture=cluster\nnew User(this, 'User', {\n cluster: cluster,\n databaseName: 'databaseName',\n excludeCharacters: '\"@/\\\\\\ \\'`',\n});\n```\n\n### Creating Tables\n\nCreate a table within a Redshift cluster database by instantiating a `Table`\nconstruct. This will make a query to the Redshift cluster to create a new database table\nwith the supplied schema.\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nTables greater than v2.114.1 can have their table name changed, for versions <= v2.114.1, this would not be possible.\nTherefore, changing of table names for <= v2.114.1 have been disabled.\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableName: 'oldTableName' // This value can be change for versions greater than v2.114.1\n tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nThe table can be configured to have distStyle attribute and a distKey column:\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableColumns: [\n { name: 'col1', dataType: 'varchar(4)', distKey: true },\n { name: 'col2', dataType: 'float' },\n ],\n cluster: cluster,\n databaseName: 'databaseName',\n distStyle: TableDistStyle.KEY,\n});\n```\n\nThe table can also be configured to have sortStyle attribute and sortKey columns:\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableColumns: [\n { name: 'col1', dataType: 'varchar(4)', sortKey: true },\n { name: 'col2', dataType: 'float', sortKey: true },\n ],\n cluster: cluster,\n databaseName: 'databaseName',\n sortStyle: TableSortStyle.COMPOUND,\n});\n```\n\nTables and their respective columns can be configured to contain comments:\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableColumns: [\n { name: 'col1', dataType: 'varchar(4)', comment: 'This is a column comment' },\n { name: 'col2', dataType: 'float', comment: 'This is a another column comment' }\n ],\n cluster: cluster,\n databaseName: 'databaseName',\n tableComment: 'This is a table comment',\n});\n```\n\nTable columns can be configured to use a specific compression encoding:\n\n```ts fixture=cluster\nimport { ColumnEncoding } from '@aws-cdk/aws-redshift-alpha';\n\nnew Table(this, 'Table', {\n tableColumns: [\n { name: 'col1', dataType: 'varchar(4)', encoding: ColumnEncoding.TEXT32K },\n { name: 'col2', dataType: 'float', encoding: ColumnEncoding.DELTA32K },\n ],\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\nTable columns can also contain an `id` attribute, which can allow table columns to be renamed.\n\n**NOTE** To use the `id` attribute, you must also enable the `@aws-cdk/aws-redshift:columnId` feature flag.\n\n```ts fixture=cluster\nnew Table(this, 'Table', {\n tableColumns: [\n { id: 'col1', name: 'col1', dataType: 'varchar(4)' },\n { id: 'col2', name: 'col2', dataType: 'float' }\n ],\n cluster: cluster,\n databaseName: 'databaseName',\n});\n```\n\n### Granting Privileges\n\nYou can give a user privileges to perform certain actions on a table by using the\n`Table.grant()` method.\n\n```ts fixture=cluster\nconst user = new User(this, 'User', {\n cluster: cluster,\n databaseName: 'databaseName',\n});\nconst table = new Table(this, 'Table', {\n tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],\n cluster: cluster,\n databaseName: 'databaseName',\n});\n\ntable.grant(user, TableAction.DROP, TableAction.SELECT);\n```\n\nTake care when managing privileges via the CDK, as attempting to manage a user's\nprivileges on the same table in multiple CDK applications could lead to accidentally\noverriding these permissions. Consider the following two CDK applications which both refer\nto the same user and table. In application 1, the resources are created and the user is\ngiven `INSERT` permissions on the table:\n\n```ts fixture=cluster\nconst databaseName = 'databaseName';\nconst username = 'myuser'\nconst tableName = 'mytable'\n\nconst user = new User(this, 'User', {\n username: username,\n cluster: cluster,\n databaseName: databaseName,\n});\nconst table = new Table(this, 'Table', {\n tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],\n cluster: cluster,\n databaseName: databaseName,\n});\ntable.grant(user, TableAction.INSERT);\n```\n\nIn application 2, the resources are imported and the user is given `INSERT` permissions on\nthe table:\n\n```ts fixture=cluster\nconst databaseName = 'databaseName';\nconst username = 'myuser'\nconst tableName = 'mytable'\n\nconst user = User.fromUserAttributes(this, 'User', {\n username: username,\n password: SecretValue.unsafePlainText('NOT_FOR_PRODUCTION'),\n cluster: cluster,\n databaseName: databaseName,\n});\nconst table = Table.fromTableAttributes(this, 'Table', {\n tableName: tableName,\n tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],\n cluster: cluster,\n databaseName: 'databaseName',\n});\ntable.grant(user, TableAction.INSERT);\n```\n\nBoth applications attempt to grant the user the appropriate privilege on the table by\nsubmitting a `GRANT USER` SQL query to the Redshift cluster. Note that the latter of these\ntwo calls will have no effect since the user has already been granted the privilege.\n\nNow, if application 1 were to remove the call to `grant`, a `REVOKE USER` SQL query is\nsubmitted to the Redshift cluster. In general, application 1 does not know that\napplication 2 has also granted this permission and thus cannot decide not to issue the\nrevocation. This leads to the undesirable state where application 2 still contains the\ncall to `grant` but the user does not have the specified permission.\n\nNote that this does not occur when duplicate privileges are granted within the same\napplication, as such privileges are de-duplicated before any SQL query is submitted.\n\n## Rotating credentials\n\nWhen the master password is generated and stored in AWS Secrets Manager, it can be rotated automatically:\n\n```ts fixture=cluster\ncluster.addRotationSingleUser(); // Will rotate automatically after 30 days\n```\n\nThe multi user rotation scheme is also available:\n\n```ts fixture=cluster\n\nconst user = new User(this, 'User', {\n cluster: cluster,\n databaseName: 'databaseName',\n});\ncluster.addRotationMultiUser('MultiUserRotation', {\n secret: user.secret,\n});\n```\n\n## Adding Parameters\n\nYou can add a parameter to a parameter group with`ClusterParameterGroup.addParameter()`.\n\n```ts\nimport { ClusterParameterGroup } from '@aws-cdk/aws-redshift-alpha';\n\nconst params = new ClusterParameterGroup(this, 'Params', {\n description: 'desc',\n parameters: {\n require_ssl: 'true',\n },\n});\n\nparams.addParameter('enable_user_activity_logging', 'true');\n```\n\nAdditionally, you can add a parameter to the cluster's associated parameter group with `Cluster.addToParameterGroup()`. If the cluster does not have an associated parameter group, a new parameter group is created.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as cdk from 'aws-cdk-lib';\ndeclare const vpc: ec2.Vpc;\n\nconst cluster = new Cluster(this, 'Cluster', {\n masterUser: {\n masterUsername: 'admin',\n masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),\n },\n vpc,\n});\n\ncluster.addToParameterGroup('enable_user_activity_logging', 'true');\n```\n\n## Rebooting for Parameter Updates\n\nIn most cases, existing clusters [must be manually rebooted](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html) to apply parameter changes. You can automate parameter related reboots by setting the cluster's `rebootForParameterChanges` property to `true` , or by using `Cluster.enableRebootForParameterChanges()`.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as cdk from 'aws-cdk-lib';\ndeclare const vpc: ec2.Vpc;\n\nconst cluster = new Cluster(this, 'Cluster', {\n masterUser: {\n masterUsername: 'admin',\n masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),\n },\n vpc,\n});\n\ncluster.addToParameterGroup('enable_user_activity_logging', 'true');\ncluster.enableRebootForParameterChanges()\n```\n\n## Elastic IP\n\nIf you configure your cluster to be publicly accessible, you can optionally select an *elastic IP address* to use for the external IP address. An elastic IP address is a static IP address that is associated with your AWS account. You can use an elastic IP address to connect to your cluster from outside the VPC. An elastic IP address gives you the ability to change your underlying configuration without affecting the IP address that clients use to connect to your cluster. This approach can be helpful for situations such as recovery after a failure.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as cdk from 'aws-cdk-lib';\ndeclare const vpc: ec2.Vpc;\n\nnew Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),\n },\n vpc,\n publiclyAccessible: true,\n elasticIp: '10.123.123.255', // A elastic ip you own\n})\n```\n\nIf the Cluster is in a VPC and you want to connect to it using the private IP address from within the cluster, it is important to enable *DNS resolution* and *DNS hostnames* in the VPC config. If these parameters would not be set, connections from within the VPC would connect to the elastic IP address and not the private IP address.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nconst vpc = new ec2.Vpc(this, 'VPC', {\n enableDnsSupport: true,\n enableDnsHostnames: true,\n});\n```\n\nNote that if there is already an existing, public accessible Cluster, which VPC configuration is changed to use *DNS hostnames* and *DNS resolution*, connections still use the elastic IP address until the cluster is resized.\n\n### Elastic IP vs. Cluster node public IP\n\nThe elastic IP address is an external IP address for accessing the cluster outside of a VPC. It's not related to the cluster node public IP addresses and private IP addresses that are accessible via the `clusterEndpoint` property. The public and private cluster node IP addresses appear regardless of whether the cluster is publicly accessible or not. They are used only in certain circumstances to configure ingress rules on the remote host. These circumstances occur when you load data from an Amazon EC2 instance or other remote host using a Secure Shell (SSH) connection.\n\n### Attach Elastic IP after Cluster creation\n\nIn some cases, you might want to associate the cluster with an elastic IP address or change an elastic IP address that is associated with the cluster. To attach an elastic IP address after the cluster is created, first update the cluster so that it is not publicly accessible, then make it both publicly accessible and add an Elastic IP address in the same operation.\n\n## Enhanced VPC Routing\n\nWhen you use Amazon Redshift enhanced VPC routing, Amazon Redshift forces all COPY and UNLOAD traffic between your cluster and your data repositories through your virtual private cloud (VPC) based on the Amazon VPC service. By using enhanced VPC routing, you can use standard VPC features, such as VPC security groups, network access control lists (ACLs), VPC endpoints, VPC endpoint policies, internet gateways, and Domain Name System (DNS) servers, as described in the Amazon VPC User Guide. You use these features to tightly manage the flow of data between your Amazon Redshift cluster and other resources. When you use enhanced VPC routing to route traffic through your VPC, you can also use VPC flow logs to monitor COPY and UNLOAD traffic.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as cdk from 'aws-cdk-lib';\ndeclare const vpc: ec2.Vpc;\n\nnew Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),\n },\n vpc,\n enhancedVpcRouting: true,\n})\n```\n\nIf enhanced VPC routing is not enabled, Amazon Redshift routes traffic through the internet, including traffic to other services within the AWS network.\n\n## Default IAM role\n\nSome Amazon Redshift features require Amazon Redshift to access other AWS services on your behalf. For your Amazon Redshift clusters to act on your behalf, you supply security credentials to your clusters. The preferred method to supply security credentials is to specify an AWS Identity and Access Management (IAM) role.\n\nWhen you create an IAM role and set it as the default for the cluster using console, you don't have to provide the IAM role's Amazon Resource Name (ARN) to perform authentication and authorization.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const vpc: ec2.Vpc;\n\nconst defaultRole = new iam.Role(this, 'DefaultRole', {\n assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),\n},\n);\n\nnew Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc,\n roles: [defaultRole],\n defaultRole: defaultRole,\n});\n```\n\nA default role can also be added to a cluster using the `addDefaultIamRole` method.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const vpc: ec2.Vpc;\n\nconst defaultRole = new iam.Role(this, 'DefaultRole', {\n assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),\n},\n);\n\nconst redshiftCluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc,\n roles: [defaultRole],\n});\n\nredshiftCluster.addDefaultIamRole(defaultRole);\n```\n\n## IAM roles\n\nAttaching IAM roles to a Redshift Cluster grants permissions to the Redshift service to perform actions on your behalf.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const vpc: ec2.Vpc\n\nconst role = new iam.Role(this, 'Role', {\n assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),\n});\nconst cluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc,\n roles: [role],\n});\n```\n\nAdditional IAM roles can be attached to a cluster using the `addIamRole` method.\n\n```ts\nimport * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as iam from 'aws-cdk-lib/aws-iam';\ndeclare const vpc: ec2.Vpc\n\nconst role = new iam.Role(this, 'Role', {\n assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),\n});\nconst cluster = new Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc,\n});\ncluster.addIamRole(role);\n```\n\n## Multi-AZ\n\nAmazon Redshift supports [multiple Availability Zones (Multi-AZ) deployments]((https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-multi-az.html)) for provisioned RA3 clusters.\nBy using Multi-AZ deployments, your Amazon Redshift data warehouse can continue operating in failure scenarios when an unexpected event happens in an Availability Zone.\n\nTo create a Multi-AZ cluster, set the `multiAz` property to `true` when creating the cluster.\n\n```ts\ndeclare const vpc: ec2.IVpc;\n\nnew redshift.Cluster(stack, 'Cluster', {\n masterUser: {\n masterUsername: 'admin',\n },\n vpc, // 3 AZs are required for Multi-AZ\n nodeType: redshift.NodeType.RA3_XLPLUS, // must be RA3 node type\n clusterType: redshift.ClusterType.MULTI_NODE, // must be MULTI_NODE\n numberOfNodes: 2, // must be 2 or more\n multiAz: true,\n});\n```\n\n## Resizing\n\nAs your data warehousing needs change, it's possible to resize your Redshift cluster. If the cluster was deployed via CDK,\nit's important to resize it via CDK so the change is registered in the AWS CloudFormation template.\nThere are two types of resize operations:\n\n* Elastic resize - Number of nodes and node type can be changed, but not at the same time. Elastic resize is the default behavior,\nas it's a fast operation and typically completes in minutes. Elastic resize is only supported on clusters of the following types:\n * dc1.large (if your cluster is in a VPC)\n * dc1.8xlarge (if your cluster is in a VPC)\n * dc2.large\n * dc2.8xlarge\n * ds2.xlarge\n * ds2.8xlarge\n * ra3.xlplus\n * ra3.4xlarge\n * ra3.16xlarge\n\n* Classic resize - Number of nodes, node type, or both, can be changed. This operation takes longer to complete,\nbut is useful when the resize operation doesn't meet the criteria of an elastic resize. If you prefer classic resizing,\nyou can set the `classicResizing` flag when creating the cluster.\n\nThere are other constraints to be aware of, for example, elastic resizing does not support single-node clusters and there are\nlimits on the number of nodes you can add to a cluster. See the [AWS Redshift Documentation](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-operations.html#rs-resize-tutorial) and [AWS API Documentation](https://docs.aws.amazon.com/redshift/latest/APIReference/API_ResizeCluster.html) for more details.\n"
3886
3886
  },
3887
3887
  "repository": {
3888
3888
  "directory": "packages/@aws-cdk/aws-redshift-alpha",
@@ -3939,7 +3939,7 @@
3939
3939
  },
3940
3940
  "locationInModule": {
3941
3941
  "filename": "lib/cluster.ts",
3942
- "line": 499
3942
+ "line": 506
3943
3943
  },
3944
3944
  "parameters": [
3945
3945
  {
@@ -3968,7 +3968,7 @@
3968
3968
  "kind": "class",
3969
3969
  "locationInModule": {
3970
3970
  "filename": "lib/cluster.ts",
3971
- "line": 432
3971
+ "line": 439
3972
3972
  },
3973
3973
  "methods": [
3974
3974
  {
@@ -3978,7 +3978,7 @@
3978
3978
  },
3979
3979
  "locationInModule": {
3980
3980
  "filename": "lib/cluster.ts",
3981
- "line": 436
3981
+ "line": 443
3982
3982
  },
3983
3983
  "name": "fromClusterAttributes",
3984
3984
  "parameters": [
@@ -4016,7 +4016,7 @@
4016
4016
  },
4017
4017
  "locationInModule": {
4018
4018
  "filename": "lib/cluster.ts",
4019
- "line": 795
4019
+ "line": 803
4020
4020
  },
4021
4021
  "name": "addDefaultIamRole",
4022
4022
  "parameters": [
@@ -4038,7 +4038,7 @@
4038
4038
  },
4039
4039
  "locationInModule": {
4040
4040
  "filename": "lib/cluster.ts",
4041
- "line": 849
4041
+ "line": 857
4042
4042
  },
4043
4043
  "name": "addIamRole",
4044
4044
  "parameters": [
@@ -4060,7 +4060,7 @@
4060
4060
  },
4061
4061
  "locationInModule": {
4062
4062
  "filename": "lib/cluster.ts",
4063
- "line": 669
4063
+ "line": 677
4064
4064
  },
4065
4065
  "name": "addRotationMultiUser",
4066
4066
  "parameters": [
@@ -4090,7 +4090,7 @@
4090
4090
  },
4091
4091
  "locationInModule": {
4092
4092
  "filename": "lib/cluster.ts",
4093
- "line": 645
4093
+ "line": 653
4094
4094
  },
4095
4095
  "name": "addRotationSingleUser",
4096
4096
  "parameters": [
@@ -4118,7 +4118,7 @@
4118
4118
  },
4119
4119
  "locationInModule": {
4120
4120
  "filename": "lib/cluster.ts",
4121
- "line": 709
4121
+ "line": 717
4122
4122
  },
4123
4123
  "name": "addToParameterGroup",
4124
4124
  "parameters": [
@@ -4149,7 +4149,7 @@
4149
4149
  },
4150
4150
  "locationInModule": {
4151
4151
  "filename": "lib/cluster.ts",
4152
- "line": 419
4152
+ "line": 426
4153
4153
  },
4154
4154
  "name": "asSecretAttachmentTarget",
4155
4155
  "overrides": "aws-cdk-lib.aws_secretsmanager.ISecretAttachmentTarget",
@@ -4166,7 +4166,7 @@
4166
4166
  },
4167
4167
  "locationInModule": {
4168
4168
  "filename": "lib/cluster.ts",
4169
- "line": 728
4169
+ "line": 736
4170
4170
  },
4171
4171
  "name": "enableRebootForParameterChanges"
4172
4172
  }
@@ -4181,7 +4181,7 @@
4181
4181
  "immutable": true,
4182
4182
  "locationInModule": {
4183
4183
  "filename": "lib/cluster.ts",
4184
- "line": 457
4184
+ "line": 464
4185
4185
  },
4186
4186
  "name": "clusterEndpoint",
4187
4187
  "overrides": "@aws-cdk/aws-redshift-alpha.ICluster",
@@ -4197,7 +4197,7 @@
4197
4197
  "immutable": true,
4198
4198
  "locationInModule": {
4199
4199
  "filename": "lib/cluster.ts",
4200
- "line": 452
4200
+ "line": 459
4201
4201
  },
4202
4202
  "name": "clusterName",
4203
4203
  "overrides": "@aws-cdk/aws-redshift-alpha.ICluster",
@@ -4213,7 +4213,7 @@
4213
4213
  "immutable": true,
4214
4214
  "locationInModule": {
4215
4215
  "filename": "lib/cluster.ts",
4216
- "line": 462
4216
+ "line": 469
4217
4217
  },
4218
4218
  "name": "connections",
4219
4219
  "overrides": "aws-cdk-lib.aws_ec2.IConnectable",
@@ -4229,7 +4229,7 @@
4229
4229
  "immutable": true,
4230
4230
  "locationInModule": {
4231
4231
  "filename": "lib/cluster.ts",
4232
- "line": 467
4232
+ "line": 474
4233
4233
  },
4234
4234
  "name": "secret",
4235
4235
  "optional": true,
@@ -4244,7 +4244,7 @@
4244
4244
  },
4245
4245
  "locationInModule": {
4246
4246
  "filename": "lib/cluster.ts",
4247
- "line": 490
4247
+ "line": 497
4248
4248
  },
4249
4249
  "name": "parameterGroup",
4250
4250
  "optional": true,
@@ -4271,7 +4271,7 @@
4271
4271
  "kind": "interface",
4272
4272
  "locationInModule": {
4273
4273
  "filename": "lib/cluster.ts",
4274
- "line": 177
4274
+ "line": 184
4275
4275
  },
4276
4276
  "name": "ClusterAttributes",
4277
4277
  "properties": [
@@ -4284,7 +4284,7 @@
4284
4284
  "immutable": true,
4285
4285
  "locationInModule": {
4286
4286
  "filename": "lib/cluster.ts",
4287
- "line": 193
4287
+ "line": 200
4288
4288
  },
4289
4289
  "name": "clusterEndpointAddress",
4290
4290
  "type": {
@@ -4300,7 +4300,7 @@
4300
4300
  "immutable": true,
4301
4301
  "locationInModule": {
4302
4302
  "filename": "lib/cluster.ts",
4303
- "line": 198
4303
+ "line": 205
4304
4304
  },
4305
4305
  "name": "clusterEndpointPort",
4306
4306
  "type": {
@@ -4316,7 +4316,7 @@
4316
4316
  "immutable": true,
4317
4317
  "locationInModule": {
4318
4318
  "filename": "lib/cluster.ts",
4319
- "line": 188
4319
+ "line": 195
4320
4320
  },
4321
4321
  "name": "clusterName",
4322
4322
  "type": {
@@ -4333,7 +4333,7 @@
4333
4333
  "immutable": true,
4334
4334
  "locationInModule": {
4335
4335
  "filename": "lib/cluster.ts",
4336
- "line": 183
4336
+ "line": 190
4337
4337
  },
4338
4338
  "name": "securityGroups",
4339
4339
  "optional": true,
@@ -4586,7 +4586,7 @@
4586
4586
  "kind": "interface",
4587
4587
  "locationInModule": {
4588
4588
  "filename": "lib/cluster.ts",
4589
- "line": 205
4589
+ "line": 212
4590
4590
  },
4591
4591
  "name": "ClusterProps",
4592
4592
  "properties": [
@@ -4599,7 +4599,7 @@
4599
4599
  "immutable": true,
4600
4600
  "locationInModule": {
4601
4601
  "filename": "lib/cluster.ts",
4602
- "line": 305
4602
+ "line": 312
4603
4603
  },
4604
4604
  "name": "masterUser",
4605
4605
  "type": {
@@ -4615,7 +4615,7 @@
4615
4615
  "immutable": true,
4616
4616
  "locationInModule": {
4617
4617
  "filename": "lib/cluster.ts",
4618
- "line": 279
4618
+ "line": 286
4619
4619
  },
4620
4620
  "name": "vpc",
4621
4621
  "type": {
@@ -4634,7 +4634,7 @@
4634
4634
  "immutable": true,
4635
4635
  "locationInModule": {
4636
4636
  "filename": "lib/cluster.ts",
4637
- "line": 363
4637
+ "line": 370
4638
4638
  },
4639
4639
  "name": "classicResizing",
4640
4640
  "optional": true,
@@ -4652,7 +4652,7 @@
4652
4652
  "immutable": true,
4653
4653
  "locationInModule": {
4654
4654
  "filename": "lib/cluster.ts",
4655
- "line": 211
4655
+ "line": 218
4656
4656
  },
4657
4657
  "name": "clusterName",
4658
4658
  "optional": true,
@@ -4670,7 +4670,7 @@
4670
4670
  "immutable": true,
4671
4671
  "locationInModule": {
4672
4672
  "filename": "lib/cluster.ts",
4673
- "line": 242
4673
+ "line": 249
4674
4674
  },
4675
4675
  "name": "clusterType",
4676
4676
  "optional": true,
@@ -4688,7 +4688,7 @@
4688
4688
  "immutable": true,
4689
4689
  "locationInModule": {
4690
4690
  "filename": "lib/cluster.ts",
4691
- "line": 328
4691
+ "line": 335
4692
4692
  },
4693
4693
  "name": "defaultDatabaseName",
4694
4694
  "optional": true,
@@ -4707,7 +4707,7 @@
4707
4707
  "immutable": true,
4708
4708
  "locationInModule": {
4709
4709
  "filename": "lib/cluster.ts",
4710
- "line": 321
4710
+ "line": 328
4711
4711
  },
4712
4712
  "name": "defaultRole",
4713
4713
  "optional": true,
@@ -4726,7 +4726,7 @@
4726
4726
  "immutable": true,
4727
4727
  "locationInModule": {
4728
4728
  "filename": "lib/cluster.ts",
4729
- "line": 372
4729
+ "line": 379
4730
4730
  },
4731
4731
  "name": "elasticIp",
4732
4732
  "optional": true,
@@ -4744,7 +4744,7 @@
4744
4744
  "immutable": true,
4745
4745
  "locationInModule": {
4746
4746
  "filename": "lib/cluster.ts",
4747
- "line": 256
4747
+ "line": 263
4748
4748
  },
4749
4749
  "name": "encrypted",
4750
4750
  "optional": true,
@@ -4762,7 +4762,7 @@
4762
4762
  "immutable": true,
4763
4763
  "locationInModule": {
4764
4764
  "filename": "lib/cluster.ts",
4765
- "line": 263
4765
+ "line": 270
4766
4766
  },
4767
4767
  "name": "encryptionKey",
4768
4768
  "optional": true,
@@ -4781,7 +4781,7 @@
4781
4781
  "immutable": true,
4782
4782
  "locationInModule": {
4783
4783
  "filename": "lib/cluster.ts",
4784
- "line": 387
4784
+ "line": 394
4785
4785
  },
4786
4786
  "name": "enhancedVpcRouting",
4787
4787
  "optional": true,
@@ -4799,7 +4799,7 @@
4799
4799
  "immutable": true,
4800
4800
  "locationInModule": {
4801
4801
  "filename": "lib/cluster.ts",
4802
- "line": 335
4802
+ "line": 342
4803
4803
  },
4804
4804
  "name": "loggingProperties",
4805
4805
  "optional": true,
@@ -4817,7 +4817,7 @@
4817
4817
  "immutable": true,
4818
4818
  "locationInModule": {
4819
4819
  "filename": "lib/cluster.ts",
4820
- "line": 394
4820
+ "line": 401
4821
4821
  },
4822
4822
  "name": "multiAz",
4823
4823
  "optional": true,
@@ -4835,7 +4835,7 @@
4835
4835
  "immutable": true,
4836
4836
  "locationInModule": {
4837
4837
  "filename": "lib/cluster.ts",
4838
- "line": 235
4838
+ "line": 242
4839
4839
  },
4840
4840
  "name": "nodeType",
4841
4841
  "optional": true,
@@ -4854,7 +4854,7 @@
4854
4854
  "immutable": true,
4855
4855
  "locationInModule": {
4856
4856
  "filename": "lib/cluster.ts",
4857
- "line": 228
4857
+ "line": 235
4858
4858
  },
4859
4859
  "name": "numberOfNodes",
4860
4860
  "optional": true,
@@ -4872,7 +4872,7 @@
4872
4872
  "immutable": true,
4873
4873
  "locationInModule": {
4874
4874
  "filename": "lib/cluster.ts",
4875
- "line": 219
4875
+ "line": 226
4876
4876
  },
4877
4877
  "name": "parameterGroup",
4878
4878
  "optional": true,
@@ -4890,7 +4890,7 @@
4890
4890
  "immutable": true,
4891
4891
  "locationInModule": {
4892
4892
  "filename": "lib/cluster.ts",
4893
- "line": 249
4893
+ "line": 256
4894
4894
  },
4895
4895
  "name": "port",
4896
4896
  "optional": true,
@@ -4910,7 +4910,7 @@
4910
4910
  "immutable": true,
4911
4911
  "locationInModule": {
4912
4912
  "filename": "lib/cluster.ts",
4913
- "line": 274
4913
+ "line": 281
4914
4914
  },
4915
4915
  "name": "preferredMaintenanceWindow",
4916
4916
  "optional": true,
@@ -4928,7 +4928,7 @@
4928
4928
  "immutable": true,
4929
4929
  "locationInModule": {
4930
4930
  "filename": "lib/cluster.ts",
4931
- "line": 350
4931
+ "line": 357
4932
4932
  },
4933
4933
  "name": "publiclyAccessible",
4934
4934
  "optional": true,
@@ -4946,7 +4946,7 @@
4946
4946
  "immutable": true,
4947
4947
  "locationInModule": {
4948
4948
  "filename": "lib/cluster.ts",
4949
- "line": 378
4949
+ "line": 385
4950
4950
  },
4951
4951
  "name": "rebootForParameterChanges",
4952
4952
  "optional": true,
@@ -4964,7 +4964,7 @@
4964
4964
  "immutable": true,
4965
4965
  "locationInModule": {
4966
4966
  "filename": "lib/cluster.ts",
4967
- "line": 343
4967
+ "line": 350
4968
4968
  },
4969
4969
  "name": "removalPolicy",
4970
4970
  "optional": true,
@@ -4983,7 +4983,7 @@
4983
4983
  "immutable": true,
4984
4984
  "locationInModule": {
4985
4985
  "filename": "lib/cluster.ts",
4986
- "line": 313
4986
+ "line": 320
4987
4987
  },
4988
4988
  "name": "roles",
4989
4989
  "optional": true,
@@ -5006,7 +5006,7 @@
5006
5006
  "immutable": true,
5007
5007
  "locationInModule": {
5008
5008
  "filename": "lib/cluster.ts",
5009
- "line": 293
5009
+ "line": 300
5010
5010
  },
5011
5011
  "name": "securityGroups",
5012
5012
  "optional": true,
@@ -5029,7 +5029,7 @@
5029
5029
  "immutable": true,
5030
5030
  "locationInModule": {
5031
5031
  "filename": "lib/cluster.ts",
5032
- "line": 300
5032
+ "line": 307
5033
5033
  },
5034
5034
  "name": "subnetGroup",
5035
5035
  "optional": true,
@@ -5047,7 +5047,7 @@
5047
5047
  "immutable": true,
5048
5048
  "locationInModule": {
5049
5049
  "filename": "lib/cluster.ts",
5050
- "line": 286
5050
+ "line": 293
5051
5051
  },
5052
5052
  "name": "vpcSubnets",
5053
5053
  "optional": true,
@@ -5658,7 +5658,7 @@
5658
5658
  },
5659
5659
  "stability": "experimental",
5660
5660
  "summary": "A database secret.",
5661
- "example": "// The code below shows an example of how to instantiate this type.\n// The values are placeholders you should change.\nimport * as redshift_alpha from '@aws-cdk/aws-redshift-alpha';\nimport { aws_kms as kms } from 'aws-cdk-lib';\n\ndeclare const key: kms.Key;\nconst databaseSecret = new redshift_alpha.DatabaseSecret(this, 'MyDatabaseSecret', {\n username: 'username',\n\n // the properties below are optional\n encryptionKey: key,\n});"
5661
+ "example": "// The code below shows an example of how to instantiate this type.\n// The values are placeholders you should change.\nimport * as redshift_alpha from '@aws-cdk/aws-redshift-alpha';\nimport { aws_kms as kms } from 'aws-cdk-lib';\n\ndeclare const key: kms.Key;\nconst databaseSecret = new redshift_alpha.DatabaseSecret(this, 'MyDatabaseSecret', {\n username: 'username',\n\n // the properties below are optional\n encryptionKey: key,\n excludeCharacters: 'excludeCharacters',\n});"
5662
5662
  },
5663
5663
  "fqn": "@aws-cdk/aws-redshift-alpha.DatabaseSecret",
5664
5664
  "initializer": {
@@ -5667,7 +5667,7 @@
5667
5667
  },
5668
5668
  "locationInModule": {
5669
5669
  "filename": "lib/database-secret.ts",
5670
- "line": 28
5670
+ "line": 35
5671
5671
  },
5672
5672
  "parameters": [
5673
5673
  {
@@ -5693,7 +5693,7 @@
5693
5693
  "kind": "class",
5694
5694
  "locationInModule": {
5695
5695
  "filename": "lib/database-secret.ts",
5696
- "line": 27
5696
+ "line": 34
5697
5697
  },
5698
5698
  "name": "DatabaseSecret",
5699
5699
  "symbolId": "lib/database-secret:DatabaseSecret"
@@ -5704,7 +5704,7 @@
5704
5704
  "docs": {
5705
5705
  "stability": "experimental",
5706
5706
  "summary": "Construction properties for a DatabaseSecret.",
5707
- "example": "// The code below shows an example of how to instantiate this type.\n// The values are placeholders you should change.\nimport * as redshift_alpha from '@aws-cdk/aws-redshift-alpha';\nimport { aws_kms as kms } from 'aws-cdk-lib';\n\ndeclare const key: kms.Key;\nconst databaseSecretProps: redshift_alpha.DatabaseSecretProps = {\n username: 'username',\n\n // the properties below are optional\n encryptionKey: key,\n};",
5707
+ "example": "// The code below shows an example of how to instantiate this type.\n// The values are placeholders you should change.\nimport * as redshift_alpha from '@aws-cdk/aws-redshift-alpha';\nimport { aws_kms as kms } from 'aws-cdk-lib';\n\ndeclare const key: kms.Key;\nconst databaseSecretProps: redshift_alpha.DatabaseSecretProps = {\n username: 'username',\n\n // the properties below are optional\n encryptionKey: key,\n excludeCharacters: 'excludeCharacters',\n};",
5708
5708
  "custom": {
5709
5709
  "exampleMetadata": "fixture=_generated"
5710
5710
  }
@@ -5750,6 +5750,24 @@
5750
5750
  "type": {
5751
5751
  "fqn": "aws-cdk-lib.aws_kms.IKey"
5752
5752
  }
5753
+ },
5754
+ {
5755
+ "abstract": true,
5756
+ "docs": {
5757
+ "default": "'\"@/\\\\\\ \\''",
5758
+ "stability": "experimental",
5759
+ "summary": "Characters to not include in the generated password."
5760
+ },
5761
+ "immutable": true,
5762
+ "locationInModule": {
5763
+ "filename": "lib/database-secret.ts",
5764
+ "line": 26
5765
+ },
5766
+ "name": "excludeCharacters",
5767
+ "optional": true,
5768
+ "type": {
5769
+ "primitive": "string"
5770
+ }
5753
5771
  }
5754
5772
  ],
5755
5773
  "symbolId": "lib/database-secret:DatabaseSecretProps"
@@ -5860,7 +5878,7 @@
5860
5878
  "kind": "interface",
5861
5879
  "locationInModule": {
5862
5880
  "filename": "lib/cluster.ts",
5863
- "line": 158
5881
+ "line": 165
5864
5882
  },
5865
5883
  "name": "ICluster",
5866
5884
  "properties": [
@@ -5876,7 +5894,7 @@
5876
5894
  "immutable": true,
5877
5895
  "locationInModule": {
5878
5896
  "filename": "lib/cluster.ts",
5879
- "line": 171
5897
+ "line": 178
5880
5898
  },
5881
5899
  "name": "clusterEndpoint",
5882
5900
  "type": {
@@ -5895,7 +5913,7 @@
5895
5913
  "immutable": true,
5896
5914
  "locationInModule": {
5897
5915
  "filename": "lib/cluster.ts",
5898
- "line": 164
5916
+ "line": 171
5899
5917
  },
5900
5918
  "name": "clusterName",
5901
5919
  "type": {
@@ -6115,7 +6133,7 @@
6115
6133
  "kind": "interface",
6116
6134
  "locationInModule": {
6117
6135
  "filename": "lib/user.ts",
6118
- "line": 45
6136
+ "line": 52
6119
6137
  },
6120
6138
  "methods": [
6121
6139
  {
@@ -6126,7 +6144,7 @@
6126
6144
  },
6127
6145
  "locationInModule": {
6128
6146
  "filename": "lib/user.ts",
6129
- "line": 69
6147
+ "line": 76
6130
6148
  },
6131
6149
  "name": "addTablePrivileges",
6132
6150
  "parameters": [
@@ -6158,7 +6176,7 @@
6158
6176
  "immutable": true,
6159
6177
  "locationInModule": {
6160
6178
  "filename": "lib/user.ts",
6161
- "line": 59
6179
+ "line": 66
6162
6180
  },
6163
6181
  "name": "cluster",
6164
6182
  "type": {
@@ -6174,7 +6192,7 @@
6174
6192
  "immutable": true,
6175
6193
  "locationInModule": {
6176
6194
  "filename": "lib/user.ts",
6177
- "line": 64
6195
+ "line": 71
6178
6196
  },
6179
6197
  "name": "databaseName",
6180
6198
  "type": {
@@ -6190,7 +6208,7 @@
6190
6208
  "immutable": true,
6191
6209
  "locationInModule": {
6192
6210
  "filename": "lib/user.ts",
6193
- "line": 54
6211
+ "line": 61
6194
6212
  },
6195
6213
  "name": "password",
6196
6214
  "type": {
@@ -6206,7 +6224,7 @@
6206
6224
  "immutable": true,
6207
6225
  "locationInModule": {
6208
6226
  "filename": "lib/user.ts",
6209
- "line": 49
6227
+ "line": 56
6210
6228
  },
6211
6229
  "name": "username",
6212
6230
  "type": {
@@ -6231,7 +6249,7 @@
6231
6249
  "kind": "interface",
6232
6250
  "locationInModule": {
6233
6251
  "filename": "lib/cluster.ts",
6234
- "line": 112
6252
+ "line": 119
6235
6253
  },
6236
6254
  "name": "LoggingProperties",
6237
6255
  "properties": [
@@ -6245,7 +6263,7 @@
6245
6263
  "immutable": true,
6246
6264
  "locationInModule": {
6247
6265
  "filename": "lib/cluster.ts",
6248
- "line": 117
6266
+ "line": 124
6249
6267
  },
6250
6268
  "name": "loggingBucket",
6251
6269
  "type": {
@@ -6261,7 +6279,7 @@
6261
6279
  "immutable": true,
6262
6280
  "locationInModule": {
6263
6281
  "filename": "lib/cluster.ts",
6264
- "line": 122
6282
+ "line": 129
6265
6283
  },
6266
6284
  "name": "loggingKeyPrefix",
6267
6285
  "type": {
@@ -6277,7 +6295,7 @@
6277
6295
  "docs": {
6278
6296
  "stability": "experimental",
6279
6297
  "summary": "Username and password combination.",
6280
- "example": "import * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as cdk from 'aws-cdk-lib';\ndeclare const vpc: ec2.Vpc;\n\nnew Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),\n },\n vpc,\n publiclyAccessible: true,\n elasticIp: '10.123.123.255', // A elastic ip you own\n})",
6298
+ "example": "import * as ec2 from 'aws-cdk-lib/aws-ec2';\nimport * as cdk from 'aws-cdk-lib';\ndeclare const vpc: ec2.Vpc;\n\nnew Cluster(this, 'Redshift', {\n masterUser: {\n masterUsername: 'admin',\n masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),\n },\n vpc,\n enhancedVpcRouting: true,\n})",
6281
6299
  "custom": {
6282
6300
  "exampleMetadata": "infused"
6283
6301
  }
@@ -6324,6 +6342,24 @@
6324
6342
  "fqn": "aws-cdk-lib.aws_kms.IKey"
6325
6343
  }
6326
6344
  },
6345
+ {
6346
+ "abstract": true,
6347
+ "docs": {
6348
+ "default": "'\"@/\\\\\\ \\''",
6349
+ "stability": "experimental",
6350
+ "summary": "Characters to not include in the generated password."
6351
+ },
6352
+ "immutable": true,
6353
+ "locationInModule": {
6354
+ "filename": "lib/cluster.ts",
6355
+ "line": 113
6356
+ },
6357
+ "name": "excludeCharacters",
6358
+ "optional": true,
6359
+ "type": {
6360
+ "primitive": "string"
6361
+ }
6362
+ },
6327
6363
  {
6328
6364
  "abstract": true,
6329
6365
  "docs": {
@@ -6441,7 +6477,7 @@
6441
6477
  "kind": "interface",
6442
6478
  "locationInModule": {
6443
6479
  "filename": "lib/cluster.ts",
6444
- "line": 128
6480
+ "line": 135
6445
6481
  },
6446
6482
  "name": "RotationMultiUserOptions",
6447
6483
  "properties": [
@@ -6455,7 +6491,7 @@
6455
6491
  "immutable": true,
6456
6492
  "locationInModule": {
6457
6493
  "filename": "lib/cluster.ts",
6458
- "line": 143
6494
+ "line": 150
6459
6495
  },
6460
6496
  "name": "secret",
6461
6497
  "type": {
@@ -6472,7 +6508,7 @@
6472
6508
  "immutable": true,
6473
6509
  "locationInModule": {
6474
6510
  "filename": "lib/cluster.ts",
6475
- "line": 151
6511
+ "line": 158
6476
6512
  },
6477
6513
  "name": "automaticallyAfter",
6478
6514
  "optional": true,
@@ -7100,7 +7136,7 @@
7100
7136
  },
7101
7137
  "locationInModule": {
7102
7138
  "filename": "lib/user.ts",
7103
- "line": 145
7139
+ "line": 152
7104
7140
  },
7105
7141
  "parameters": [
7106
7142
  {
@@ -7129,7 +7165,7 @@
7129
7165
  "kind": "class",
7130
7166
  "locationInModule": {
7131
7167
  "filename": "lib/user.ts",
7132
- "line": 117
7168
+ "line": 124
7133
7169
  },
7134
7170
  "methods": [
7135
7171
  {
@@ -7139,7 +7175,7 @@
7139
7175
  },
7140
7176
  "locationInModule": {
7141
7177
  "filename": "lib/user.ts",
7142
- "line": 121
7178
+ "line": 128
7143
7179
  },
7144
7180
  "name": "fromUserAttributes",
7145
7181
  "parameters": [
@@ -7176,7 +7212,7 @@
7176
7212
  },
7177
7213
  "locationInModule": {
7178
7214
  "filename": "lib/user.ts",
7179
- "line": 102
7215
+ "line": 109
7180
7216
  },
7181
7217
  "name": "addTablePrivileges",
7182
7218
  "overrides": "@aws-cdk/aws-redshift-alpha.IUser",
@@ -7205,7 +7241,7 @@
7205
7241
  },
7206
7242
  "locationInModule": {
7207
7243
  "filename": "lib/user.ts",
7208
- "line": 187
7244
+ "line": 195
7209
7245
  },
7210
7246
  "name": "applyRemovalPolicy",
7211
7247
  "parameters": [
@@ -7228,7 +7264,7 @@
7228
7264
  "immutable": true,
7229
7265
  "locationInModule": {
7230
7266
  "filename": "lib/user.ts",
7231
- "line": 133
7267
+ "line": 140
7232
7268
  },
7233
7269
  "name": "cluster",
7234
7270
  "overrides": "@aws-cdk/aws-redshift-alpha.IUser",
@@ -7244,7 +7280,7 @@
7244
7280
  "immutable": true,
7245
7281
  "locationInModule": {
7246
7282
  "filename": "lib/user.ts",
7247
- "line": 134
7283
+ "line": 141
7248
7284
  },
7249
7285
  "name": "databaseName",
7250
7286
  "overrides": "@aws-cdk/aws-redshift-alpha.IUser",
@@ -7260,7 +7296,7 @@
7260
7296
  "immutable": true,
7261
7297
  "locationInModule": {
7262
7298
  "filename": "lib/user.ts",
7263
- "line": 132
7299
+ "line": 139
7264
7300
  },
7265
7301
  "name": "password",
7266
7302
  "overrides": "@aws-cdk/aws-redshift-alpha.IUser",
@@ -7279,7 +7315,7 @@
7279
7315
  "immutable": true,
7280
7316
  "locationInModule": {
7281
7317
  "filename": "lib/user.ts",
7282
- "line": 141
7318
+ "line": 148
7283
7319
  },
7284
7320
  "name": "secret",
7285
7321
  "type": {
@@ -7294,7 +7330,7 @@
7294
7330
  "immutable": true,
7295
7331
  "locationInModule": {
7296
7332
  "filename": "lib/user.ts",
7297
- "line": 131
7333
+ "line": 138
7298
7334
  },
7299
7335
  "name": "username",
7300
7336
  "overrides": "@aws-cdk/aws-redshift-alpha.IUser",
@@ -7308,7 +7344,7 @@
7308
7344
  },
7309
7345
  "locationInModule": {
7310
7346
  "filename": "lib/user.ts",
7311
- "line": 135
7347
+ "line": 142
7312
7348
  },
7313
7349
  "name": "databaseProps",
7314
7350
  "protected": true,
@@ -7337,7 +7373,7 @@
7337
7373
  "kind": "interface",
7338
7374
  "locationInModule": {
7339
7375
  "filename": "lib/user.ts",
7340
- "line": 75
7376
+ "line": 82
7341
7377
  },
7342
7378
  "name": "UserAttributes",
7343
7379
  "properties": [
@@ -7351,7 +7387,7 @@
7351
7387
  "immutable": true,
7352
7388
  "locationInModule": {
7353
7389
  "filename": "lib/user.ts",
7354
- "line": 86
7390
+ "line": 93
7355
7391
  },
7356
7392
  "name": "password",
7357
7393
  "type": {
@@ -7367,7 +7403,7 @@
7367
7403
  "immutable": true,
7368
7404
  "locationInModule": {
7369
7405
  "filename": "lib/user.ts",
7370
- "line": 79
7406
+ "line": 86
7371
7407
  },
7372
7408
  "name": "username",
7373
7409
  "type": {
@@ -7417,6 +7453,24 @@
7417
7453
  "fqn": "aws-cdk-lib.aws_kms.IKey"
7418
7454
  }
7419
7455
  },
7456
+ {
7457
+ "abstract": true,
7458
+ "docs": {
7459
+ "default": "'\"@/\\\\\\ \\''",
7460
+ "stability": "experimental",
7461
+ "summary": "Characters to not include in the generated password."
7462
+ },
7463
+ "immutable": true,
7464
+ "locationInModule": {
7465
+ "filename": "lib/user.ts",
7466
+ "line": 39
7467
+ },
7468
+ "name": "excludeCharacters",
7469
+ "optional": true,
7470
+ "type": {
7471
+ "primitive": "string"
7472
+ }
7473
+ },
7420
7474
  {
7421
7475
  "abstract": true,
7422
7476
  "docs": {
@@ -7427,7 +7481,7 @@
7427
7481
  "immutable": true,
7428
7482
  "locationInModule": {
7429
7483
  "filename": "lib/user.ts",
7430
- "line": 39
7484
+ "line": 46
7431
7485
  },
7432
7486
  "name": "removalPolicy",
7433
7487
  "optional": true,
@@ -7458,6 +7512,6 @@
7458
7512
  "symbolId": "lib/user:UserProps"
7459
7513
  }
7460
7514
  },
7461
- "version": "2.160.0-alpha.0",
7515
+ "version": "2.161.1-alpha.0",
7462
7516
  "fingerprint": "**********"
7463
7517
  }