Repository: open-constructs/aws-cdk-library (language: python)

Issue:
aws-redshifserverless: support Namespace and Workgroup L2 construct
**Is your feature request related to a problem? Please describe.**
Cloudformation supports [Namespace](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-namespace.html) and [Workgroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-workgroup.html) for Redshift Serverless.

But there are no L2 Constructs.

**Would you be willing to help with a PR?**
- [x] Yes, absolutely
- [ ] Yes, with some guidance
- [ ] Unfortunately no time :'-(

## Describe the solution you'd like
Add `Namespace` and `Workgroup` L2 Construct
## Describe alternatives you've considered
Use L1 Construct
## Additional context
Some properties are not supported in `aws-cdk-lib v2.120.0`.

With the resolution of #36, I plan to add the currently unsupported properties when `aws-cdk-lib` update becomes available in the future.


Discussion / hints:

Fix patch:
diff --git a/API.md b/API.md
index afc74be..7d4397a 100644
--- a/API.md
+++ b/API.md
@@ -527,227 +527,1333 @@ The ID of the EC2 Instance Connect Endpoint.
 ---
 
 
+### Namespace <a name="Namespace" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace"></a>
+
+- *Implements:* @open-constructs/aws-cdk.aws_redshiftserverless.INamespace
+
+Represents a Redshift Serverless Namespace construct in AWS CDK.
+
+*Example*
+
+```typescript
+const nameSpace = new Namespace(
+  stack,
+  'Namespace',
+  {
+    namespaceName: 'my-namespace',
+  },
+);
+```
+
+
+#### Initializers <a name="Initializers" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.Initializer"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+new aws_redshiftserverless.Namespace(scope: Construct, id: string, props: NamespaceProps)
+```
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.Initializer.parameter.props">props</a></code> | <code>@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps</code> | *No description.* |
+
+---
+
+##### `scope`<sup>Required</sup> <a name="scope" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.Initializer.parameter.scope"></a>
+
+- *Type:* constructs.Construct
+
+---
+
+##### `id`<sup>Required</sup> <a name="id" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.Initializer.parameter.id"></a>
+
+- *Type:* string
+
+---
+
+##### `props`<sup>Required</sup> <a name="props" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.Initializer.parameter.props"></a>
+
+- *Type:* @open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps
+
+---
+
+#### Methods <a name="Methods" id="Methods"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.toString">toString</a></code> | Returns a string representation of this construct. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.applyRemovalPolicy">applyRemovalPolicy</a></code> | Apply the given removal policy to this resource. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.addIamRole">addIamRole</a></code> | Adds a role to the namespace. |
+
+---
+
+##### `toString` <a name="toString" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.toString"></a>
+
+```typescript
+public toString(): string
+```
+
+Returns a string representation of this construct.
+
+##### `applyRemovalPolicy` <a name="applyRemovalPolicy" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.applyRemovalPolicy"></a>
+
+```typescript
+public applyRemovalPolicy(policy: RemovalPolicy): void
+```
+
+Apply the given removal policy to this resource.
+
+The Removal Policy controls what happens to this resource when it stops
+being managed by CloudFormation, either because you've removed it from the
+CDK application or because you've made a change that requires the resource
+to be replaced.
+
+The resource can be deleted (`RemovalPolicy.DESTROY`), or left in your AWS
+account for data recovery and cleanup later (`RemovalPolicy.RETAIN`).
+
+###### `policy`<sup>Required</sup> <a name="policy" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.applyRemovalPolicy.parameter.policy"></a>
+
+- *Type:* aws-cdk-lib.RemovalPolicy
+
+---
+
+##### `addIamRole` <a name="addIamRole" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.addIamRole"></a>
+
+```typescript
+public addIamRole(role: IRole): void
+```
+
+Adds a role to the namespace.
+
+###### `role`<sup>Required</sup> <a name="role" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.addIamRole.parameter.role"></a>
+
+- *Type:* aws-cdk-lib.aws_iam.IRole
+
+the role to add.
+
+---
+
+#### Static Functions <a name="Static Functions" id="Static Functions"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.isOwnedResource">isOwnedResource</a></code> | Returns true if the construct was created by CDK, and false otherwise. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.isResource">isResource</a></code> | Check whether the given construct is a Resource. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.fromNamespaceAttributes">fromNamespaceAttributes</a></code> | Imports an existing Namespace from attributes. |
+
+---
+
+##### `isConstruct` <a name="isConstruct" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.isConstruct"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+aws_redshiftserverless.Namespace.isConstruct(x: any)
+```
+
+Checks if `x` is a construct.
+
+Use this method instead of `instanceof` to properly detect `Construct`
+instances, even when the construct library is symlinked.
+
+Explanation: in JavaScript, multiple copies of the `constructs` library on
+disk are seen as independent, completely different libraries. As a
+consequence, the class `Construct` in each copy of the `constructs` library
+is seen as a different class, and an instance of one class will not test as
+`instanceof` the other class. `npm install` will not create installations
+like this, but users may manually symlink construct libraries together or
+use a monorepo tool: in those cases, multiple copies of the `constructs`
+library can be accidentally installed, and `instanceof` will behave
+unpredictably. It is safest to avoid using `instanceof`, and using
+this type-testing method instead.
+
+###### `x`<sup>Required</sup> <a name="x" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.isConstruct.parameter.x"></a>
+
+- *Type:* any
+
+Any object.
+
+---
+
+##### `isOwnedResource` <a name="isOwnedResource" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.isOwnedResource"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+aws_redshiftserverless.Namespace.isOwnedResource(construct: IConstruct)
+```
+
+Returns true if the construct was created by CDK, and false otherwise.
+
+###### `construct`<sup>Required</sup> <a name="construct" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.isOwnedResource.parameter.construct"></a>
+
+- *Type:* constructs.IConstruct
+
+---
+
+##### `isResource` <a name="isResource" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.isResource"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+aws_redshiftserverless.Namespace.isResource(construct: IConstruct)
+```
+
+Check whether the given construct is a Resource.
+
+###### `construct`<sup>Required</sup> <a name="construct" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.isResource.parameter.construct"></a>
+
+- *Type:* constructs.IConstruct
+
+---
+
+##### `fromNamespaceAttributes` <a name="fromNamespaceAttributes" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.fromNamespaceAttributes"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+aws_redshiftserverless.Namespace.fromNamespaceAttributes(scope: Construct, id: string, attrs: NamespaceAttributes)
+```
+
+Imports an existing Namespace from attributes.
+
+###### `scope`<sup>Required</sup> <a name="scope" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.fromNamespaceAttributes.parameter.scope"></a>
+
+- *Type:* constructs.Construct
+
+---
+
+###### `id`<sup>Required</sup> <a name="id" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.fromNamespaceAttributes.parameter.id"></a>
+
+- *Type:* string
+
+---
+
+###### `attrs`<sup>Required</sup> <a name="attrs" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.fromNamespaceAttributes.parameter.attrs"></a>
+
+- *Type:* @open-constructs/aws-cdk.aws_redshiftserverless.NamespaceAttributes
+
+---
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.env">env</a></code> | <code>aws-cdk-lib.ResourceEnvironment</code> | The environment this resource belongs to. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.stack">stack</a></code> | <code>aws-cdk-lib.Stack</code> | The stack in which this resource is defined. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.namespaceArn">namespaceArn</a></code> | <code>string</code> | The namespace Arn. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.namespaceId">namespaceId</a></code> | <code>string</code> | The namespace id. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.namespaceName">namespaceName</a></code> | <code>string</code> | The namespace name. |
+
+---
+
+##### `node`<sup>Required</sup> <a name="node" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.node"></a>
+
+```typescript
+public readonly node: Node;
+```
+
+- *Type:* constructs.Node
+
+The tree node.
+
+---
+
+##### `env`<sup>Required</sup> <a name="env" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.env"></a>
+
+```typescript
+public readonly env: ResourceEnvironment;
+```
+
+- *Type:* aws-cdk-lib.ResourceEnvironment
+
+The environment this resource belongs to.
+
+For resources that are created and managed by the CDK
+(generally, those created by creating new class instances like Role, Bucket, etc.),
+this is always the same as the environment of the stack they belong to;
+however, for imported resources
+(those obtained from static methods like fromRoleArn, fromBucketName, etc.),
+that might be different than the stack they were imported into.
+
+---
+
+##### `stack`<sup>Required</sup> <a name="stack" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.stack"></a>
+
+```typescript
+public readonly stack: Stack;
+```
+
+- *Type:* aws-cdk-lib.Stack
+
+The stack in which this resource is defined.
+
+---
+
+##### `namespaceArn`<sup>Required</sup> <a name="namespaceArn" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.namespaceArn"></a>
+
+```typescript
+public readonly namespaceArn: string;
+```
+
+- *Type:* string
+
+The namespace Arn.
+
+---
+
+##### `namespaceId`<sup>Required</sup> <a name="namespaceId" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.namespaceId"></a>
+
+```typescript
+public readonly namespaceId: string;
+```
+
+- *Type:* string
+
+The namespace id.
+
+---
+
+##### `namespaceName`<sup>Required</sup> <a name="namespaceName" id="@open-constructs/aws-cdk.aws_redshiftserverless.Namespace.property.namespaceName"></a>
+
+```typescript
+public readonly namespaceName: string;
+```
+
+- *Type:* string
+
+The namespace name.
+
+---
+
+
+### Workgroup <a name="Workgroup" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup"></a>
+
+- *Implements:* @open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup
+
+Represents a Redshift Serverless Workgroup construct in AWS CDK.
+
+*Example*
+
+```typescript
+declare const namespace: Namespace;
+declare const vpc: aws_ec2.IVpc;
+
+const nameSpace = new Workgroup(
+  stack,
+  'Workgroup',
+  {
+    workgroupName: 'my-workgroup',
+    namespace: namespace,
+    vpc,
+  },
+);
+```
+
+
+#### Initializers <a name="Initializers" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.Initializer"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+new aws_redshiftserverless.Workgroup(scope: Construct, id: string, props: WorkgroupProps)
+```
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.Initializer.parameter.props">props</a></code> | <code>@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps</code> | *No description.* |
+
+---
+
+##### `scope`<sup>Required</sup> <a name="scope" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.Initializer.parameter.scope"></a>
+
+- *Type:* constructs.Construct
+
+---
+
+##### `id`<sup>Required</sup> <a name="id" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.Initializer.parameter.id"></a>
+
+- *Type:* string
+
+---
+
+##### `props`<sup>Required</sup> <a name="props" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.Initializer.parameter.props"></a>
+
+- *Type:* @open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps
+
+---
+
+#### Methods <a name="Methods" id="Methods"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.toString">toString</a></code> | Returns a string representation of this construct. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.applyRemovalPolicy">applyRemovalPolicy</a></code> | Apply the given removal policy to this resource. |
+
+---
+
+##### `toString` <a name="toString" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.toString"></a>
+
+```typescript
+public toString(): string
+```
+
+Returns a string representation of this construct.
+
+##### `applyRemovalPolicy` <a name="applyRemovalPolicy" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.applyRemovalPolicy"></a>
+
+```typescript
+public applyRemovalPolicy(policy: RemovalPolicy): void
+```
+
+Apply the given removal policy to this resource.
+
+The Removal Policy controls what happens to this resource when it stops
+being managed by CloudFormation, either because you've removed it from the
+CDK application or because you've made a change that requires the resource
+to be replaced.
+
+The resource can be deleted (`RemovalPolicy.DESTROY`), or left in your AWS
+account for data recovery and cleanup later (`RemovalPolicy.RETAIN`).
+
+###### `policy`<sup>Required</sup> <a name="policy" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.applyRemovalPolicy.parameter.policy"></a>
+
+- *Type:* aws-cdk-lib.RemovalPolicy
+
+---
+
+#### Static Functions <a name="Static Functions" id="Static Functions"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.isOwnedResource">isOwnedResource</a></code> | Returns true if the construct was created by CDK, and false otherwise. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.isResource">isResource</a></code> | Check whether the given construct is a Resource. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.fromWorkgroupAttributes">fromWorkgroupAttributes</a></code> | Import an existing workgroup to the stack from its attributes. |
+
+---
+
+##### `isConstruct` <a name="isConstruct" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.isConstruct"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+aws_redshiftserverless.Workgroup.isConstruct(x: any)
+```
+
+Checks if `x` is a construct.
+
+Use this method instead of `instanceof` to properly detect `Construct`
+instances, even when the construct library is symlinked.
+
+Explanation: in JavaScript, multiple copies of the `constructs` library on
+disk are seen as independent, completely different libraries. As a
+consequence, the class `Construct` in each copy of the `constructs` library
+is seen as a different class, and an instance of one class will not test as
+`instanceof` the other class. `npm install` will not create installations
+like this, but users may manually symlink construct libraries together or
+use a monorepo tool: in those cases, multiple copies of the `constructs`
+library can be accidentally installed, and `instanceof` will behave
+unpredictably. It is safest to avoid using `instanceof`, and using
+this type-testing method instead.
+
+###### `x`<sup>Required</sup> <a name="x" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.isConstruct.parameter.x"></a>
+
+- *Type:* any
+
+Any object.
+
+---
+
+##### `isOwnedResource` <a name="isOwnedResource" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.isOwnedResource"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+aws_redshiftserverless.Workgroup.isOwnedResource(construct: IConstruct)
+```
+
+Returns true if the construct was created by CDK, and false otherwise.
+
+###### `construct`<sup>Required</sup> <a name="construct" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.isOwnedResource.parameter.construct"></a>
+
+- *Type:* constructs.IConstruct
+
+---
+
+##### `isResource` <a name="isResource" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.isResource"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+aws_redshiftserverless.Workgroup.isResource(construct: IConstruct)
+```
+
+Check whether the given construct is a Resource.
+
+###### `construct`<sup>Required</sup> <a name="construct" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.isResource.parameter.construct"></a>
+
+- *Type:* constructs.IConstruct
+
+---
+
+##### `fromWorkgroupAttributes` <a name="fromWorkgroupAttributes" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.fromWorkgroupAttributes"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+aws_redshiftserverless.Workgroup.fromWorkgroupAttributes(scope: Construct, id: string, attrs: WorkgroupAttributes)
+```
+
+Import an existing workgroup to the stack from its attributes.
+
+###### `scope`<sup>Required</sup> <a name="scope" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.fromWorkgroupAttributes.parameter.scope"></a>
+
+- *Type:* constructs.Construct
+
+---
+
+###### `id`<sup>Required</sup> <a name="id" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.fromWorkgroupAttributes.parameter.id"></a>
+
+- *Type:* string
+
+---
+
+###### `attrs`<sup>Required</sup> <a name="attrs" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.fromWorkgroupAttributes.parameter.attrs"></a>
+
+- *Type:* @open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes
+
+---
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.env">env</a></code> | <code>aws-cdk-lib.ResourceEnvironment</code> | The environment this resource belongs to. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.stack">stack</a></code> | <code>aws-cdk-lib.Stack</code> | The stack in which this resource is defined. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.connections">connections</a></code> | <code>aws-cdk-lib.aws_ec2.Connections</code> | The connection object associated with the Redshift Serverless Workgroup. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.endpointAddress">endpointAddress</a></code> | <code>string</code> | The workgroup endpoint address. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.port">port</a></code> | <code>number</code> | The workgroup port. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.workgroupArn">workgroupArn</a></code> | <code>string</code> | The workgroup Arn. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.workgroupId">workgroupId</a></code> | <code>string</code> | The workgroup id. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.workgroupName">workgroupName</a></code> | <code>string</code> | The workgroup name. |
+
+---
+
+##### `node`<sup>Required</sup> <a name="node" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.node"></a>
+
+```typescript
+public readonly node: Node;
+```
+
+- *Type:* constructs.Node
+
+The tree node.
+
+---
+
+##### `env`<sup>Required</sup> <a name="env" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.env"></a>
+
+```typescript
+public readonly env: ResourceEnvironment;
+```
+
+- *Type:* aws-cdk-lib.ResourceEnvironment
+
+The environment this resource belongs to.
+
+For resources that are created and managed by the CDK
+(generally, those created by creating new class instances like Role, Bucket, etc.),
+this is always the same as the environment of the stack they belong to;
+however, for imported resources
+(those obtained from static methods like fromRoleArn, fromBucketName, etc.),
+that might be different than the stack they were imported into.
+
+---
+
+##### `stack`<sup>Required</sup> <a name="stack" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.stack"></a>
+
+```typescript
+public readonly stack: Stack;
+```
+
+- *Type:* aws-cdk-lib.Stack
+
+The stack in which this resource is defined.
+
+---
+
+##### `connections`<sup>Required</sup> <a name="connections" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.connections"></a>
+
+```typescript
+public readonly connections: Connections;
+```
+
+- *Type:* aws-cdk-lib.aws_ec2.Connections
+
+The connection object associated with the Redshift Serverless Workgroup.
+
+---
+
+##### `endpointAddress`<sup>Required</sup> <a name="endpointAddress" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.endpointAddress"></a>
+
+```typescript
+public readonly endpointAddress: string;
+```
+
+- *Type:* string
+
+The workgroup endpoint address.
+
+---
+
+##### `port`<sup>Required</sup> <a name="port" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.port"></a>
+
+```typescript
+public readonly port: number;
+```
+
+- *Type:* number
+
+The workgroup port.
+
+---
+
+##### `workgroupArn`<sup>Required</sup> <a name="workgroupArn" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.workgroupArn"></a>
+
+```typescript
+public readonly workgroupArn: string;
+```
+
+- *Type:* string
+
+The workgroup Arn.
+
+---
+
+##### `workgroupId`<sup>Required</sup> <a name="workgroupId" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.workgroupId"></a>
+
+```typescript
+public readonly workgroupId: string;
+```
+
+- *Type:* string
+
+The workgroup id.
+
+---
+
+##### `workgroupName`<sup>Required</sup> <a name="workgroupName" id="@open-constructs/aws-cdk.aws_redshiftserverless.Workgroup.property.workgroupName"></a>
+
+```typescript
+public readonly workgroupName: string;
+```
+
+- *Type:* string
+
+The workgroup name.
+
+---
+
+
 ## Structs <a name="Structs" id="Structs"></a>
 
-### CostReportProps <a name="CostReportProps" id="@open-constructs/aws-cdk.aws_cur.CostReportProps"></a>
+### CostReportProps <a name="CostReportProps" id="@open-constructs/aws-cdk.aws_cur.CostReportProps"></a>
+
+Properties for defining a Cost and Usage Report.
+
+#### Initializer <a name="Initializer" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.Initializer"></a>
+
+```typescript
+import { aws_cur } from '@open-constructs/aws-cdk'
+
+const costReportProps: aws_cur.CostReportProps = { ... }
+```
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_cur.CostReportProps.property.bucket">bucket</a></code> | <code>aws-cdk-lib.aws_s3.IBucket</code> | The bucket to place the cost report into. |
+| <code><a href="#@open-constructs/aws-cdk.aws_cur.CostReportProps.property.costReportName">costReportName</a></code> | <code>string</code> | The name of the cost report. |
+| <code><a href="#@open-constructs/aws-cdk.aws_cur.CostReportProps.property.enableDefaultUniqueReportName">enableDefaultUniqueReportName</a></code> | <code>boolean</code> | Whether to generate a unique report name automatically if the `costReportName` property is not specified. |
+| <code><a href="#@open-constructs/aws-cdk.aws_cur.CostReportProps.property.format">format</a></code> | <code>@open-constructs/aws-cdk.aws_cur.CurFormat</code> | The format to use for the cost and usage report. |
+| <code><a href="#@open-constructs/aws-cdk.aws_cur.CostReportProps.property.reportGranularity">reportGranularity</a></code> | <code>@open-constructs/aws-cdk.aws_cur.ReportGranularity</code> | The granularity of the line items in the report. |
+
+---
+
+##### `bucket`<sup>Optional</sup> <a name="bucket" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.property.bucket"></a>
+
+```typescript
+public readonly bucket: IBucket;
+```
+
+- *Type:* aws-cdk-lib.aws_s3.IBucket
+- *Default:* a new bucket will be created.
+
+The bucket to place the cost report into.
+
+If non is provided, a new bucket will be created.
+
+---
+
+##### `costReportName`<sup>Optional</sup> <a name="costReportName" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.property.costReportName"></a>
+
+```typescript
+public readonly costReportName: string;
+```
+
+- *Type:* string
+- *Default:* a unique name automatically generated if `enableDefaultUniqueReportName` is true, otherwise 'default-cur'.
+
+The name of the cost report.
+
+The name must be unique, is case sensitive, and can't include spaces.
+
+The length of this name must be between 1 and 256.
+
+---
+
+##### `enableDefaultUniqueReportName`<sup>Optional</sup> <a name="enableDefaultUniqueReportName" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.property.enableDefaultUniqueReportName"></a>
+
+```typescript
+public readonly enableDefaultUniqueReportName: boolean;
+```
+
+- *Type:* boolean
+- *Default:* false
+
+Whether to generate a unique report name automatically if the `costReportName` property is not specified.
+
+The default value of the `costReportName` is normally ‘default-cur’, but setting this flag
+to true will generate a unique default value.
+
+This flag is ignored if the `costReportName` property is specified.
+
+---
+
+##### `format`<sup>Optional</sup> <a name="format" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.property.format"></a>
+
+```typescript
+public readonly format: CurFormat;
+```
+
+- *Type:* @open-constructs/aws-cdk.aws_cur.CurFormat
+- *Default:* TEXT_OR_CSV
+
+The format to use for the cost and usage report.
+
+---
+
+##### `reportGranularity`<sup>Optional</sup> <a name="reportGranularity" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.property.reportGranularity"></a>
+
+```typescript
+public readonly reportGranularity: ReportGranularity;
+```
+
+- *Type:* @open-constructs/aws-cdk.aws_cur.ReportGranularity
+- *Default:* HOURLY
+
+The granularity of the line items in the report.
+
+---
+
+### InstanceConnectEndpointAttributes <a name="InstanceConnectEndpointAttributes" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes"></a>
+
+Attributes for importing an EC2 Instance Connect Endpoint.
+
+#### Initializer <a name="Initializer" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes.Initializer"></a>
+
+```typescript
+import { aws_ec2 } from '@open-constructs/aws-cdk'
+
+const instanceConnectEndpointAttributes: aws_ec2.InstanceConnectEndpointAttributes = { ... }
+```
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes.property.instanceConnectEndpointId">instanceConnectEndpointId</a></code> | <code>string</code> | The ID of the EC2 Instance Connect Endpoint. |
+| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes.property.securityGroups">securityGroups</a></code> | <code>aws-cdk-lib.aws_ec2.ISecurityGroup[]</code> | The security groups associated with the EC2 Instance Connect Endpoint. |
+
+---
+
+##### `instanceConnectEndpointId`<sup>Required</sup> <a name="instanceConnectEndpointId" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes.property.instanceConnectEndpointId"></a>
+
+```typescript
+public readonly instanceConnectEndpointId: string;
+```
+
+- *Type:* string
+
+The ID of the EC2 Instance Connect Endpoint.
+
+---
+
+##### `securityGroups`<sup>Required</sup> <a name="securityGroups" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes.property.securityGroups"></a>
+
+```typescript
+public readonly securityGroups: ISecurityGroup[];
+```
+
+- *Type:* aws-cdk-lib.aws_ec2.ISecurityGroup[]
+
+The security groups associated with the EC2 Instance Connect Endpoint.
+
+---
+
+### InstanceConnectEndpointProps <a name="InstanceConnectEndpointProps" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps"></a>
+
+Properties for defining an EC2 Instance Connect Endpoint.
+
+#### Initializer <a name="Initializer" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.Initializer"></a>
+
+```typescript
+import { aws_ec2 } from '@open-constructs/aws-cdk'
+
+const instanceConnectEndpointProps: aws_ec2.InstanceConnectEndpointProps = { ... }
+```
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.vpc">vpc</a></code> | <code>aws-cdk-lib.aws_ec2.IVpc</code> | The VPC in which the EC2 Instance Connect Endpoint is created. |
+| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.clientToken">clientToken</a></code> | <code>string</code> | Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. |
+| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.preserveClientIp">preserveClientIp</a></code> | <code>boolean</code> | Indicates whether your client's IP address is preserved as the source. |
+| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.securityGroups">securityGroups</a></code> | <code>aws-cdk-lib.aws_ec2.ISecurityGroup[]</code> | The security groups to associate with the EC2 Instance Connect Endpoint. |
+
+---
+
+##### `vpc`<sup>Required</sup> <a name="vpc" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.vpc"></a>
+
+```typescript
+public readonly vpc: IVpc;
+```
+
+- *Type:* aws-cdk-lib.aws_ec2.IVpc
+
+The VPC in which the EC2 Instance Connect Endpoint is created.
+
+---
+
+##### `clientToken`<sup>Optional</sup> <a name="clientToken" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.clientToken"></a>
+
+```typescript
+public readonly clientToken: string;
+```
 
-Properties for defining a Cost and Usage Report.
+- *Type:* string
 
-#### Initializer <a name="Initializer" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.Initializer"></a>
+Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.
+
+> [https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-clienttoken](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-clienttoken)
+
+---
+
+##### `preserveClientIp`<sup>Optional</sup> <a name="preserveClientIp" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.preserveClientIp"></a>
 
 ```typescript
-import { aws_cur } from '@open-constructs/aws-cdk'
+public readonly preserveClientIp: boolean;
+```
 
-const costReportProps: aws_cur.CostReportProps = { ... }
+- *Type:* boolean
+- *Default:* true
+
+Indicates whether your client's IP address is preserved as the source.
+
+> [https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-preserveclientip](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-preserveclientip)
+
+---
+
+##### `securityGroups`<sup>Optional</sup> <a name="securityGroups" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.securityGroups"></a>
+
+```typescript
+public readonly securityGroups: ISecurityGroup[];
+```
+
+- *Type:* aws-cdk-lib.aws_ec2.ISecurityGroup[]
+- *Default:* a new security group is created
+
+The security groups to associate with the EC2 Instance Connect Endpoint.
+
+---
+
+### NamespaceAttributes <a name="NamespaceAttributes" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceAttributes"></a>
+
+Attributes for importing a Redshift Serverless Namespace.
+
+#### Initializer <a name="Initializer" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceAttributes.Initializer"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+const namespaceAttributes: aws_redshiftserverless.NamespaceAttributes = { ... }
 ```
 
 #### Properties <a name="Properties" id="Properties"></a>
 
 | **Name** | **Type** | **Description** |
 | --- | --- | --- |
-| <code><a href="#@open-constructs/aws-cdk.aws_cur.CostReportProps.property.bucket">bucket</a></code> | <code>aws-cdk-lib.aws_s3.IBucket</code> | The bucket to place the cost report into. |
-| <code><a href="#@open-constructs/aws-cdk.aws_cur.CostReportProps.property.costReportName">costReportName</a></code> | <code>string</code> | The name of the cost report. |
-| <code><a href="#@open-constructs/aws-cdk.aws_cur.CostReportProps.property.enableDefaultUniqueReportName">enableDefaultUniqueReportName</a></code> | <code>boolean</code> | Whether to generate a unique report name automatically if the `costReportName` property is not specified. |
-| <code><a href="#@open-constructs/aws-cdk.aws_cur.CostReportProps.property.format">format</a></code> | <code>@open-constructs/aws-cdk.aws_cur.CurFormat</code> | The format to use for the cost and usage report. |
-| <code><a href="#@open-constructs/aws-cdk.aws_cur.CostReportProps.property.reportGranularity">reportGranularity</a></code> | <code>@open-constructs/aws-cdk.aws_cur.ReportGranularity</code> | The granularity of the line items in the report. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceAttributes.property.namespaceId">namespaceId</a></code> | <code>string</code> | The namespace id. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceAttributes.property.namespaceName">namespaceName</a></code> | <code>string</code> | The namespace name. |
 
 ---
 
-##### `bucket`<sup>Optional</sup> <a name="bucket" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.property.bucket"></a>
+##### `namespaceId`<sup>Required</sup> <a name="namespaceId" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceAttributes.property.namespaceId"></a>
 
 ```typescript
-public readonly bucket: IBucket;
+public readonly namespaceId: string;
 ```
 
-- *Type:* aws-cdk-lib.aws_s3.IBucket
-- *Default:* a new bucket will be created.
+- *Type:* string
 
-The bucket to place the cost report into.
+The namespace id.
 
-If non is provided, a new bucket will be created.
+---
+
+##### `namespaceName`<sup>Required</sup> <a name="namespaceName" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceAttributes.property.namespaceName"></a>
+
+```typescript
+public readonly namespaceName: string;
+```
+
+- *Type:* string
+
+The namespace name.
 
 ---
 
-##### `costReportName`<sup>Optional</sup> <a name="costReportName" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.property.costReportName"></a>
+### NamespaceProps <a name="NamespaceProps" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps"></a>
+
+Properties for defining a Redshift Serverless Namespace.
+
+#### Initializer <a name="Initializer" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.Initializer"></a>
 
 ```typescript
-public readonly costReportName: string;
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+const namespaceProps: aws_redshiftserverless.NamespaceProps = { ... }
+```
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.adminUsername">adminUsername</a></code> | <code>string</code> | The username of the administrator for the primary database created in the namespace. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.adminUserPassword">adminUserPassword</a></code> | <code>aws-cdk-lib.SecretValue</code> | The password of the administrator for the primary database created in the namespace. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.dbName">dbName</a></code> | <code>string</code> | The name of the primary database created in the namespace. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.defaultIamRole">defaultIamRole</a></code> | <code>aws-cdk-lib.aws_iam.IRole</code> | The IAM role to set as a default in the namespace. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.finalSnapshotName">finalSnapshotName</a></code> | <code>string</code> | The name of the snapshot to be created before the namespace is deleted. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.finalSnapshotRetentionPeriod">finalSnapshotRetentionPeriod</a></code> | <code>number</code> | How long days to retain the final snapshot. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.iamRoles">iamRoles</a></code> | <code>aws-cdk-lib.aws_iam.IRole[]</code> | A list of IAM roles to associate with the namespace. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.kmsKey">kmsKey</a></code> | <code>aws-cdk-lib.aws_kms.IKey</code> | A Customer Managed Key used to encrypt your data. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.logExports">logExports</a></code> | <code>@open-constructs/aws-cdk.aws_redshiftserverless.LogExport[]</code> | The types of logs the namespace can export. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.namespaceName">namespaceName</a></code> | <code>string</code> | The namespace name. |
+
+---
+
+##### `adminUsername`<sup>Optional</sup> <a name="adminUsername" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.adminUsername"></a>
+
+```typescript
+public readonly adminUsername: string;
 ```
 
 - *Type:* string
-- *Default:* a unique name automatically generated if `enableDefaultUniqueReportName` is true, otherwise 'default-cur'.
+- *Default:* no admin user
 
-The name of the cost report.
+The username of the administrator for the primary database created in the namespace.
 
-The name must be unique, is case sensitive, and can't include spaces.
+You must specify both `adminUsername` and `adminUserPassword`, or neither.
 
-The length of this name must be between 1 and 256.
+---
+
+##### `adminUserPassword`<sup>Optional</sup> <a name="adminUserPassword" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.adminUserPassword"></a>
+
+```typescript
+public readonly adminUserPassword: SecretValue;
+```
+
+- *Type:* aws-cdk-lib.SecretValue
+- *Default:* no admin user
+
+The password of the administrator for the primary database created in the namespace.
+
+You must specify both `adminUsername` and `adminUserPassword`, or neither.
 
 ---
 
-##### `enableDefaultUniqueReportName`<sup>Optional</sup> <a name="enableDefaultUniqueReportName" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.property.enableDefaultUniqueReportName"></a>
+##### `dbName`<sup>Optional</sup> <a name="dbName" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.dbName"></a>
 
 ```typescript
-public readonly enableDefaultUniqueReportName: boolean;
+public readonly dbName: string;
 ```
 
-- *Type:* boolean
-- *Default:* false
+- *Type:* string
+- *Default:* 'dev'
 
-Whether to generate a unique report name automatically if the `costReportName` property is not specified.
+The name of the primary database created in the namespace.
 
-The default value of the `costReportName` is normally ‘default-cur’, but setting this flag
-to true will generate a unique default value.
+---
 
-This flag is ignored if the `costReportName` property is specified.
+##### `defaultIamRole`<sup>Optional</sup> <a name="defaultIamRole" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.defaultIamRole"></a>
+
+```typescript
+public readonly defaultIamRole: IRole;
+```
+
+- *Type:* aws-cdk-lib.aws_iam.IRole
+- *Default:* no default IAM role
+
+The IAM role to set as a default in the namespace.
+
+`defaultIamRole` must be included in `iamRoles`.
 
 ---
 
-##### `format`<sup>Optional</sup> <a name="format" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.property.format"></a>
+##### `finalSnapshotName`<sup>Optional</sup> <a name="finalSnapshotName" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.finalSnapshotName"></a>
 
 ```typescript
-public readonly format: CurFormat;
+public readonly finalSnapshotName: string;
 ```
 
-- *Type:* @open-constructs/aws-cdk.aws_cur.CurFormat
-- *Default:* TEXT_OR_CSV
+- *Type:* string
+- *Default:* no final snapshot
 
-The format to use for the cost and usage report.
+The name of the snapshot to be created before the namespace is deleted.
+
+If not specified, the final snapshot will not be taken.
 
 ---
 
-##### `reportGranularity`<sup>Optional</sup> <a name="reportGranularity" id="@open-constructs/aws-cdk.aws_cur.CostReportProps.property.reportGranularity"></a>
+##### `finalSnapshotRetentionPeriod`<sup>Optional</sup> <a name="finalSnapshotRetentionPeriod" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.finalSnapshotRetentionPeriod"></a>
 
 ```typescript
-public readonly reportGranularity: ReportGranularity;
+public readonly finalSnapshotRetentionPeriod: number;
 ```
 
-- *Type:* @open-constructs/aws-cdk.aws_cur.ReportGranularity
-- *Default:* HOURLY
+- *Type:* number
+- *Default:* Retained indefinitely if `finalSnapshotName` is specified, otherwise no final snapshot
 
-The granularity of the line items in the report.
+How long days to retain the final snapshot.
+
+You must set `finalSnapshotName` when you specify `finalSnapshotRetentionPeriod`.
 
 ---
 
-### InstanceConnectEndpointAttributes <a name="InstanceConnectEndpointAttributes" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes"></a>
+##### `iamRoles`<sup>Optional</sup> <a name="iamRoles" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.iamRoles"></a>
 
-Attributes for importing an EC2 Instance Connect Endpoint.
+```typescript
+public readonly iamRoles: IRole[];
+```
 
-#### Initializer <a name="Initializer" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes.Initializer"></a>
+- *Type:* aws-cdk-lib.aws_iam.IRole[]
+- *Default:* no IAM role associated
+
+A list of IAM roles to associate with the namespace.
+
+---
+
+##### `kmsKey`<sup>Optional</sup> <a name="kmsKey" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.kmsKey"></a>
 
 ```typescript
-import { aws_ec2 } from '@open-constructs/aws-cdk'
+public readonly kmsKey: IKey;
+```
 
-const instanceConnectEndpointAttributes: aws_ec2.InstanceConnectEndpointAttributes = { ... }
+- *Type:* aws-cdk-lib.aws_kms.IKey
+- *Default:* use AWS managed key
+
+A Customer Managed Key used to encrypt your data.
+
+---
+
+##### `logExports`<sup>Optional</sup> <a name="logExports" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.logExports"></a>
+
+```typescript
+public readonly logExports: LogExport[];
+```
+
+- *Type:* @open-constructs/aws-cdk.aws_redshiftserverless.LogExport[]
+- *Default:* no logs export
+
+The types of logs the namespace can export.
+
+---
+
+##### `namespaceName`<sup>Optional</sup> <a name="namespaceName" id="@open-constructs/aws-cdk.aws_redshiftserverless.NamespaceProps.property.namespaceName"></a>
+
+```typescript
+public readonly namespaceName: string;
+```
+
+- *Type:* string
+- *Default:* auto generate
+
+The namespace name.
+
+---
+
+### WorkgroupAttributes <a name="WorkgroupAttributes" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes"></a>
+
+Attributes for importing a Redshift Serverless Workgroup.
+
+#### Initializer <a name="Initializer" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.Initializer"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+const workgroupAttributes: aws_redshiftserverless.WorkgroupAttributes = { ... }
 ```
 
 #### Properties <a name="Properties" id="Properties"></a>
 
 | **Name** | **Type** | **Description** |
 | --- | --- | --- |
-| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes.property.instanceConnectEndpointId">instanceConnectEndpointId</a></code> | <code>string</code> | The ID of the EC2 Instance Connect Endpoint. |
-| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes.property.securityGroups">securityGroups</a></code> | <code>aws-cdk-lib.aws_ec2.ISecurityGroup[]</code> | The security groups associated with the EC2 Instance Connect Endpoint. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.property.endpointAddress">endpointAddress</a></code> | <code>string</code> | The workgroup endpoint address. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.property.port">port</a></code> | <code>number</code> | The workgroup port. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.property.securityGroups">securityGroups</a></code> | <code>aws-cdk-lib.aws_ec2.ISecurityGroup[]</code> | The security groups associated with the Redshift Serverless Workgroup. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.property.workgroupId">workgroupId</a></code> | <code>string</code> | The workgroup id. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.property.workgroupName">workgroupName</a></code> | <code>string</code> | The workgroup name. |
 
 ---
 
-##### `instanceConnectEndpointId`<sup>Required</sup> <a name="instanceConnectEndpointId" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes.property.instanceConnectEndpointId"></a>
+##### `endpointAddress`<sup>Required</sup> <a name="endpointAddress" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.property.endpointAddress"></a>
 
 ```typescript
-public readonly instanceConnectEndpointId: string;
+public readonly endpointAddress: string;
 ```
 
 - *Type:* string
 
-The ID of the EC2 Instance Connect Endpoint.
+The workgroup endpoint address.
 
 ---
 
-##### `securityGroups`<sup>Required</sup> <a name="securityGroups" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointAttributes.property.securityGroups"></a>
+##### `port`<sup>Required</sup> <a name="port" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.property.port"></a>
+
+```typescript
+public readonly port: number;
+```
+
+- *Type:* number
+
+The workgroup port.
+
+---
+
+##### `securityGroups`<sup>Required</sup> <a name="securityGroups" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.property.securityGroups"></a>
 
 ```typescript
 public readonly securityGroups: ISecurityGroup[];
 ```
 
-- *Type:* aws-cdk-lib.aws_ec2.ISecurityGroup[]
+- *Type:* aws-cdk-lib.aws_ec2.ISecurityGroup[]
+
+The security groups associated with the Redshift Serverless Workgroup.
+
+---
+
+##### `workgroupId`<sup>Required</sup> <a name="workgroupId" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.property.workgroupId"></a>
+
+```typescript
+public readonly workgroupId: string;
+```
+
+- *Type:* string
+
+The workgroup id.
+
+---
+
+##### `workgroupName`<sup>Required</sup> <a name="workgroupName" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupAttributes.property.workgroupName"></a>
+
+```typescript
+public readonly workgroupName: string;
+```
+
+- *Type:* string
+
+The workgroup name.
+
+---
+
+### WorkgroupProps <a name="WorkgroupProps" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps"></a>
+
+Properties for defining a Redshift Serverless Workgroup.
+
+#### Initializer <a name="Initializer" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.Initializer"></a>
+
+```typescript
+import { aws_redshiftserverless } from '@open-constructs/aws-cdk'
+
+const workgroupProps: aws_redshiftserverless.WorkgroupProps = { ... }
+```
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.vpc">vpc</a></code> | <code>aws-cdk-lib.aws_ec2.IVpc</code> | The VPC to place the workgroup in. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.baseCapacity">baseCapacity</a></code> | <code>number</code> | The base compute capacity of the workgroup in Redshift Processing Units (RPUs). |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.configParameters">configParameters</a></code> | <code>{[ key: string ]: string}</code> | A list of parameters to set for finer control over a database. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.enhancedVpcRouting">enhancedVpcRouting</a></code> | <code>boolean</code> | The value that specifies whether to enable enhanced virtual private cloud (VPC) routing, which forces Amazon Redshift Serverless to route traffic through your VPC. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.namespace">namespace</a></code> | <code>@open-constructs/aws-cdk.aws_redshiftserverless.INamespace</code> | The namespace the workgroup is associated with. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.port">port</a></code> | <code>number</code> | The custom port to use when connecting to a workgroup. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.publiclyAccessible">publiclyAccessible</a></code> | <code>boolean</code> | A value that specifies whether the workgroup can be accessible from a public network. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.securityGroups">securityGroups</a></code> | <code>aws-cdk-lib.aws_ec2.ISecurityGroup[]</code> | The security groups to associate with the workgroup. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.vpcSubnets">vpcSubnets</a></code> | <code>aws-cdk-lib.aws_ec2.SubnetSelection</code> | Where to place the workgroup within the VPC. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.workgroupName">workgroupName</a></code> | <code>string</code> | The workgroup name. |
+
+---
+
+##### `vpc`<sup>Required</sup> <a name="vpc" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.vpc"></a>
+
+```typescript
+public readonly vpc: IVpc;
+```
+
+- *Type:* aws-cdk-lib.aws_ec2.IVpc
+
+The VPC to place the workgroup in.
+
+`vpc` must have at least 3 subnets, and they must span across 3 Availability Zones.
+
+---
+
+##### `baseCapacity`<sup>Optional</sup> <a name="baseCapacity" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.baseCapacity"></a>
+
+```typescript
+public readonly baseCapacity: number;
+```
+
+- *Type:* number
+- *Default:* 128
+
+The base compute capacity of the workgroup in Redshift Processing Units (RPUs).
+
+You can adjust the base capacity setting from 8 RPUs to 512 RPUs in units of 8.
+Also you can increment or decrement RPUs in units of 32 when setting a base capacity between 512-1024.
+
+> [https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-capacity.html](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-capacity.html)
+
+---
+
+##### `configParameters`<sup>Optional</sup> <a name="configParameters" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.configParameters"></a>
+
+```typescript
+public readonly configParameters: {[ key: string ]: string};
+```
+
+- *Type:* {[ key: string ]: string}
+- *Default:* no config parameters
+
+A list of parameters to set for finer control over a database.
+
+> [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-workgroup.html#cfn-redshiftserverless-workgroup-configparameters](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-workgroup.html#cfn-redshiftserverless-workgroup-configparameters)
+
+---
+
+##### `enhancedVpcRouting`<sup>Optional</sup> <a name="enhancedVpcRouting" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.enhancedVpcRouting"></a>
+
+```typescript
+public readonly enhancedVpcRouting: boolean;
+```
+
+- *Type:* boolean
+- *Default:* false
+
+The value that specifies whether to enable enhanced virtual private cloud (VPC) routing, which forces Amazon Redshift Serverless to route traffic through your VPC.
+
+---
+
+##### `namespace`<sup>Optional</sup> <a name="namespace" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.namespace"></a>
+
+```typescript
+public readonly namespace: INamespace;
+```
+
+- *Type:* @open-constructs/aws-cdk.aws_redshiftserverless.INamespace
+- *Default:* the workgroup is not associated with any namespace
 
-The security groups associated with the EC2 Instance Connect Endpoint.
+The namespace the workgroup is associated with.
 
 ---
 
-### InstanceConnectEndpointProps <a name="InstanceConnectEndpointProps" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps"></a>
-
-Properties for defining an EC2 Instance Connect Endpoint.
-
-#### Initializer <a name="Initializer" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.Initializer"></a>
+##### `port`<sup>Optional</sup> <a name="port" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.port"></a>
 
 ```typescript
-import { aws_ec2 } from '@open-constructs/aws-cdk'
-
-const instanceConnectEndpointProps: aws_ec2.InstanceConnectEndpointProps = { ... }
+public readonly port: number;
 ```
 
-#### Properties <a name="Properties" id="Properties"></a>
+- *Type:* number
+- *Default:* 5439
 
-| **Name** | **Type** | **Description** |
-| --- | --- | --- |
-| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.vpc">vpc</a></code> | <code>aws-cdk-lib.aws_ec2.IVpc</code> | The VPC in which the EC2 Instance Connect Endpoint is created. |
-| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.clientToken">clientToken</a></code> | <code>string</code> | Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. |
-| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.preserveClientIp">preserveClientIp</a></code> | <code>boolean</code> | Indicates whether your client's IP address is preserved as the source. |
-| <code><a href="#@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.securityGroups">securityGroups</a></code> | <code>aws-cdk-lib.aws_ec2.ISecurityGroup[]</code> | The security groups to associate with the EC2 Instance Connect Endpoint. |
+The custom port to use when connecting to a workgroup.
+
+Valid port ranges are 5431-5455 and 8191-8215.
 
 ---
 
-##### `vpc`<sup>Required</sup> <a name="vpc" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.vpc"></a>
+##### `publiclyAccessible`<sup>Optional</sup> <a name="publiclyAccessible" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.publiclyAccessible"></a>
 
 ```typescript
-public readonly vpc: IVpc;
+public readonly publiclyAccessible: boolean;
 ```
 
-- *Type:* aws-cdk-lib.aws_ec2.IVpc
+- *Type:* boolean
+- *Default:* false
 
-The VPC in which the EC2 Instance Connect Endpoint is created.
+A value that specifies whether the workgroup can be accessible from a public network.
 
 ---
 
-##### `clientToken`<sup>Optional</sup> <a name="clientToken" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.clientToken"></a>
+##### `securityGroups`<sup>Optional</sup> <a name="securityGroups" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.securityGroups"></a>
 
 ```typescript
-public readonly clientToken: string;
+public readonly securityGroups: ISecurityGroup[];
 ```
 
-- *Type:* string
-
-Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.
+- *Type:* aws-cdk-lib.aws_ec2.ISecurityGroup[]
+- *Default:* a new security group is created
 
-> [https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-clienttoken](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-clienttoken)
+The security groups to associate with the workgroup.
 
 ---
 
-##### `preserveClientIp`<sup>Optional</sup> <a name="preserveClientIp" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.preserveClientIp"></a>
+##### `vpcSubnets`<sup>Optional</sup> <a name="vpcSubnets" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.vpcSubnets"></a>
 
 ```typescript
-public readonly preserveClientIp: boolean;
+public readonly vpcSubnets: SubnetSelection;
 ```
 
-- *Type:* boolean
-- *Default:* true
-
-Indicates whether your client's IP address is preserved as the source.
+- *Type:* aws-cdk-lib.aws_ec2.SubnetSelection
+- *Default:* private subnets
 
-> [https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-preserveclientip](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-preserveclientip)
+Where to place the workgroup within the VPC.
 
 ---
 
-##### `securityGroups`<sup>Optional</sup> <a name="securityGroups" id="@open-constructs/aws-cdk.aws_ec2.InstanceConnectEndpointProps.property.securityGroups"></a>
+##### `workgroupName`<sup>Optional</sup> <a name="workgroupName" id="@open-constructs/aws-cdk.aws_redshiftserverless.WorkgroupProps.property.workgroupName"></a>
 
 ```typescript
-public readonly securityGroups: ISecurityGroup[];
+public readonly workgroupName: string;
 ```
 
-- *Type:* aws-cdk-lib.aws_ec2.ISecurityGroup[]
-- *Default:* a new security group is created
+- *Type:* string
+- *Default:* auto generate
 
-The security groups to associate with the EC2 Instance Connect Endpoint.
+The workgroup name.
+
+\`workgroupName\` must be between 3 and 64 characters long, contain only lowercase letters, numbers, and hyphens.
 
 ---
 
@@ -1086,3 +2192,280 @@ The ID of the EC2 Instance Connect Endpoint.
 
 ---
 
+### INamespace <a name="INamespace" id="@open-constructs/aws-cdk.aws_redshiftserverless.INamespace"></a>
+
+- *Extends:* aws-cdk-lib.IResource
+
+- *Implemented By:* @open-constructs/aws-cdk.aws_redshiftserverless.Namespace, @open-constructs/aws-cdk.aws_redshiftserverless.INamespace
+
+A Redshift Serverless Namespace.
+
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.env">env</a></code> | <code>aws-cdk-lib.ResourceEnvironment</code> | The environment this resource belongs to. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.stack">stack</a></code> | <code>aws-cdk-lib.Stack</code> | The stack in which this resource is defined. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.namespaceArn">namespaceArn</a></code> | <code>string</code> | The namespace ARN. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.namespaceId">namespaceId</a></code> | <code>string</code> | The namespace id. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.namespaceName">namespaceName</a></code> | <code>string</code> | The namespace name. |
+
+---
+
+##### `node`<sup>Required</sup> <a name="node" id="@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.node"></a>
+
+```typescript
+public readonly node: Node;
+```
+
+- *Type:* constructs.Node
+
+The tree node.
+
+---
+
+##### `env`<sup>Required</sup> <a name="env" id="@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.env"></a>
+
+```typescript
+public readonly env: ResourceEnvironment;
+```
+
+- *Type:* aws-cdk-lib.ResourceEnvironment
+
+The environment this resource belongs to.
+
+For resources that are created and managed by the CDK
+(generally, those created by creating new class instances like Role, Bucket, etc.),
+this is always the same as the environment of the stack they belong to;
+however, for imported resources
+(those obtained from static methods like fromRoleArn, fromBucketName, etc.),
+that might be different than the stack they were imported into.
+
+---
+
+##### `stack`<sup>Required</sup> <a name="stack" id="@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.stack"></a>
+
+```typescript
+public readonly stack: Stack;
+```
+
+- *Type:* aws-cdk-lib.Stack
+
+The stack in which this resource is defined.
+
+---
+
+##### `namespaceArn`<sup>Required</sup> <a name="namespaceArn" id="@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.namespaceArn"></a>
+
+```typescript
+public readonly namespaceArn: string;
+```
+
+- *Type:* string
+
+The namespace ARN.
+
+---
+
+##### `namespaceId`<sup>Required</sup> <a name="namespaceId" id="@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.namespaceId"></a>
+
+```typescript
+public readonly namespaceId: string;
+```
+
+- *Type:* string
+
+The namespace id.
+
+---
+
+##### `namespaceName`<sup>Required</sup> <a name="namespaceName" id="@open-constructs/aws-cdk.aws_redshiftserverless.INamespace.property.namespaceName"></a>
+
+```typescript
+public readonly namespaceName: string;
+```
+
+- *Type:* string
+
+The namespace name.
+
+---
+
+### IWorkgroup <a name="IWorkgroup" id="@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup"></a>
+
+- *Extends:* aws-cdk-lib.IResource, aws-cdk-lib.aws_ec2.IConnectable
+
+- *Implemented By:* @open-constructs/aws-cdk.aws_redshiftserverless.Workgroup, @open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup
+
+A Redshift Serverless Workgroup.
+
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.env">env</a></code> | <code>aws-cdk-lib.ResourceEnvironment</code> | The environment this resource belongs to. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.stack">stack</a></code> | <code>aws-cdk-lib.Stack</code> | The stack in which this resource is defined. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.connections">connections</a></code> | <code>aws-cdk-lib.aws_ec2.Connections</code> | The network connections associated with this resource. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.endpointAddress">endpointAddress</a></code> | <code>string</code> | The workgroup endpoint address. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.port">port</a></code> | <code>number</code> | The workgroup port. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.workgroupArn">workgroupArn</a></code> | <code>string</code> | The workgroup Arn. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.workgroupId">workgroupId</a></code> | <code>string</code> | The workgroup id. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.workgroupName">workgroupName</a></code> | <code>string</code> | The workgroup name. |
+
+---
+
+##### `node`<sup>Required</sup> <a name="node" id="@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.node"></a>
+
+```typescript
+public readonly node: Node;
+```
+
+- *Type:* constructs.Node
+
+The tree node.
+
+---
+
+##### `env`<sup>Required</sup> <a name="env" id="@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.env"></a>
+
+```typescript
+public readonly env: ResourceEnvironment;
+```
+
+- *Type:* aws-cdk-lib.ResourceEnvironment
+
+The environment this resource belongs to.
+
+For resources that are created and managed by the CDK
+(generally, those created by creating new class instances like Role, Bucket, etc.),
+this is always the same as the environment of the stack they belong to;
+however, for imported resources
+(those obtained from static methods like fromRoleArn, fromBucketName, etc.),
+that might be different than the stack they were imported into.
+
+---
+
+##### `stack`<sup>Required</sup> <a name="stack" id="@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.stack"></a>
+
+```typescript
+public readonly stack: Stack;
+```
+
+- *Type:* aws-cdk-lib.Stack
+
+The stack in which this resource is defined.
+
+---
+
+##### `connections`<sup>Required</sup> <a name="connections" id="@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.connections"></a>
+
+```typescript
+public readonly connections: Connections;
+```
+
+- *Type:* aws-cdk-lib.aws_ec2.Connections
+
+The network connections associated with this resource.
+
+---
+
+##### `endpointAddress`<sup>Required</sup> <a name="endpointAddress" id="@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.endpointAddress"></a>
+
+```typescript
+public readonly endpointAddress: string;
+```
+
+- *Type:* string
+
+The workgroup endpoint address.
+
+---
+
+##### `port`<sup>Required</sup> <a name="port" id="@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.port"></a>
+
+```typescript
+public readonly port: number;
+```
+
+- *Type:* number
+
+The workgroup port.
+
+---
+
+##### `workgroupArn`<sup>Required</sup> <a name="workgroupArn" id="@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.workgroupArn"></a>
+
+```typescript
+public readonly workgroupArn: string;
+```
+
+- *Type:* string
+
+The workgroup Arn.
+
+---
+
+##### `workgroupId`<sup>Required</sup> <a name="workgroupId" id="@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.workgroupId"></a>
+
+```typescript
+public readonly workgroupId: string;
+```
+
+- *Type:* string
+
+The workgroup id.
+
+---
+
+##### `workgroupName`<sup>Required</sup> <a name="workgroupName" id="@open-constructs/aws-cdk.aws_redshiftserverless.IWorkgroup.property.workgroupName"></a>
+
+```typescript
+public readonly workgroupName: string;
+```
+
+- *Type:* string
+
+The workgroup name.
+
+---
+
+## Enums <a name="Enums" id="Enums"></a>
+
+### LogExport <a name="LogExport" id="@open-constructs/aws-cdk.aws_redshiftserverless.LogExport"></a>
+
+The types of logs the namespace can export.
+
+#### Members <a name="Members" id="Members"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.LogExport.USER_LOG">USER_LOG</a></code> | User log. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.LogExport.CONNECTION_LOG">CONNECTION_LOG</a></code> | Connection log. |
+| <code><a href="#@open-constructs/aws-cdk.aws_redshiftserverless.LogExport.USER_ACTIVITY_LOG">USER_ACTIVITY_LOG</a></code> | User activity log. |
+
+---
+
+##### `USER_LOG` <a name="USER_LOG" id="@open-constructs/aws-cdk.aws_redshiftserverless.LogExport.USER_LOG"></a>
+
+User log.
+
+---
+
+
+##### `CONNECTION_LOG` <a name="CONNECTION_LOG" id="@open-constructs/aws-cdk.aws_redshiftserverless.LogExport.CONNECTION_LOG"></a>
+
+Connection log.
+
+---
+
+
+##### `USER_ACTIVITY_LOG` <a name="USER_ACTIVITY_LOG" id="@open-constructs/aws-cdk.aws_redshiftserverless.LogExport.USER_ACTIVITY_LOG"></a>
+
+User activity log.
+
+---
+
diff --git a/src/aws-redshiftserverless/README.md b/src/aws-redshiftserverless/README.md
new file mode 100644
index 0000000..952c1dc
--- /dev/null
+++ b/src/aws-redshiftserverless/README.md
@@ -0,0 +1,98 @@
+Constructs for the Amazon Redshift Serverlss
+
+# Redshift Serverless CDK Construct
+
+## Overview
+
+The `Namespace` construct and the `Workgroup` construct facilitate the creation and management of [Redshift Serverless Workgroups and namespaces](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-workgroup-namespace.html) within AWS CDK applications.
+
+## Usage
+
+Import the necessary classes from AWS CDK and this construct and create a VPC for the workgroup:
+
+```ts
+import { App, Stack } from 'aws-cdk-lib';
+import * as ec2 from 'aws-cdk-lib/aws-ec2';
+import { Namespace, Workgroup } from '@open-constructs/aws-cdk/aws-redshiftserverless';
+
+const app = new App();
+const stack = new Stack(app, 'RedshiftServerlessStack',{
+  account: '012345678901'
+  region: 'us-east-1',
+});
+const vpc = new ec2.Vpc(stack, 'MyVpc');
+```
+
+**Note** If you want to use `Vpc` Construct to create a VPC for `Workgroup`, you must specify `account` and `region` in `Stack`.
+`Workgroup` needs at least three subnets, and they must span across three Availability Zones.
+
+The environment-agnostic stacks will be created with access to only 2 AZs (Ref: [`maxAzs` property docs](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.Vpc.html#maxazs))
+
+For more infomation about Redshift Serverles's limitations, see [Considerations when using Amazon Redshift Serverless](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-usage-considerations.html).
+
+### Basic Example
+
+Here's how you can create a namespace and a workgroup:
+
+```ts
+import { SecretValue } from 'aws-cdk-lib';
+import * as iam from 'aws-cdk-lib/aws-iam';
+declare const defaultIamRole: iam.IRole;
+declare const anotherIamRole: iam.IRole;
+
+const namespace = new redshiftserverless.Namespace(stack, 'Namespace', {
+  namespaceName: 'my-namespace',
+  defaultIamRole: myIamRole, // Specify a default IAM role
+  iamRoles: [defaultIamRole, anotherIamRole], // Assign IAM roles list which must include default IAM Role
+});
+
+const workgroup = new redshiftserverless.Workgroup(stack, 'MyWorkgroup', {
+  workgroupName: 'my-workgroup',
+  namespace,
+  vpc,
+});
+```
+
+### Advanced Example
+
+Creating a namespace and a workgroup with custom settings:
+
+```ts
+declare const workgroupSecurityGroup: ec2.ISecurityGroup;
+
+const namespace = new redshiftserverless.Namespace(stack, 'MyCustomNamespace', {
+  namespaceName: 'my-custom-namespace',
+  dbName: 'mydb', // Specify user-defined database name
+  adminUsername: 'admin', // Specify user-defined admin username
+  adminUserPassword: SecretValue.unsafePlainText('My-password-123!'), // Specify user-defined admin password
+  logExports: [redshiftserverless.LogExport.USER_LOG], // Log export settings
+});
+
+const workgroup = new redshiftserverless.Workgroup(stack, 'MyCustomWorkgroup', {
+  workgroupName: 'my-custom-workgroup',
+  namespace,
+  vpc,
+  baseCapacity: 32, // Specify Base Capacity uses to serve queries
+  securityGroups: [workgroupSecurityGroup], // Specify user-defined security groups
+});
+```
+
+### Import an existing endpoint:
+You can import existing namespaces and workgroups:
+
+```ts
+declare const securityGroup: ec2.ISecurityGroup;
+
+const importedNamespace = redshiftserverless.Namespace.fromNamespaceAttributes(stack, 'ImportedNamespace', {
+  namespaceId: 'my-namespace-id',
+  namespaceName: 'my-namespace-name',
+});
+
+const importedWorkgroup = redshiftserverless.Workgroup.fromWorkgroupAttributes(stack, 'ImportedWorkgroup', {
+  workgroupName: 'my-workgroup',
+  workgroupId: 'my-workgroup-id',
+  endpointAddress: 'my-workgroup.endpoint.com',
+  port: 5439,
+  securityGroups: [securityGroup],
+});
+```
diff --git a/src/aws-redshiftserverless/index.ts b/src/aws-redshiftserverless/index.ts
new file mode 100644
index 0000000..de441c6
--- /dev/null
+++ b/src/aws-redshiftserverless/index.ts
@@ -0,0 +1,2 @@
+export * from './namespace';
+export * from './workgroup';
diff --git a/src/aws-redshiftserverless/namespace.ts b/src/aws-redshiftserverless/namespace.ts
new file mode 100644
index 0000000..0651c9a
--- /dev/null
+++ b/src/aws-redshiftserverless/namespace.ts
@@ -0,0 +1,376 @@
+import { IResource, Lazy, Names, Resource, SecretValue, Stack, Token, aws_redshiftserverless } from 'aws-cdk-lib';
+import { IRole } from 'aws-cdk-lib/aws-iam';
+import { IKey } from 'aws-cdk-lib/aws-kms';
+import { Construct } from 'constructs';
+
+/**
+ * A Redshift Serverless Namespace
+ */
+export interface INamespace extends IResource {
+  /**
+   * The namespace ARN
+   *
+   * @attribute
+   */
+  readonly namespaceArn: string;
+
+  /**
+   * The namespace name
+   *
+   * @attribute
+   */
+  readonly namespaceName: string;
+
+  /**
+   * The namespace id
+   *
+   * @attribute
+   */
+  readonly namespaceId: string;
+}
+
+/**
+ * Properties for defining a Redshift Serverless Namespace.
+ */
+export interface NamespaceProps {
+  /**
+   * The username of the administrator for the primary database created in the namespace.
+   *
+   * You must specify both `adminUsername` and `adminUserPassword`, or neither.
+   *
+   * @default - no admin user
+   */
+  readonly adminUsername?: string;
+
+  /**
+   * The password of the administrator for the primary database created in the namespace.
+   *
+   * You must specify both `adminUsername` and `adminUserPassword`, or neither.
+   *
+   * @default - no admin user
+   */
+  readonly adminUserPassword?: SecretValue;
+
+  /**
+   * The name of the primary database created in the namespace.
+   *
+   * @default - 'dev'
+   */
+  readonly dbName?: string;
+
+  /**
+   * The IAM role to set as a default in the namespace.
+   *
+   * `defaultIamRole` must be included in `iamRoles`.
+   *
+   * @default - no default IAM role
+   */
+  readonly defaultIamRole?: IRole;
+
+  /**
+   * The name of the snapshot to be created before the namespace is deleted.
+   *
+   * If not specified, the final snapshot will not be taken.
+   *
+   * @default - no final snapshot
+   */
+  readonly finalSnapshotName?: string;
+
+  /**
+   * How long days to retain the final snapshot.
+   *
+   * You must set `finalSnapshotName` when you specify `finalSnapshotRetentionPeriod`.
+   *
+   * @default - Retained indefinitely if `finalSnapshotName` is specified, otherwise no final snapshot
+   */
+  readonly finalSnapshotRetentionPeriod?: number;
+
+  /**
+   * A list of IAM roles to associate with the namespace.
+   *
+   * @default - no IAM role associated
+   */
+  readonly iamRoles?: IRole[];
+
+  /**
+   * A Customer Managed Key used to encrypt your data.
+   *
+   * @default - use AWS managed key
+   */
+  readonly kmsKey?: IKey;
+
+  /**
+   * The types of logs the namespace can export.
+   *
+   * @default - no logs export
+   */
+  readonly logExports?: LogExport[];
+
+  /**
+   * The namespace name.
+   *
+   * @default - auto generate
+   */
+  readonly namespaceName?: string;
+}
+
+/**
+ * The types of logs the namespace can export.
+ */
+export enum LogExport {
+  /**
+   * User log
+   */
+  USER_LOG = 'userlog',
+
+  /**
+   * Connection log
+   */
+  CONNECTION_LOG = 'connectionlog',
+
+  /**
+   * User activity log
+   */
+  USER_ACTIVITY_LOG = 'useractivitylog',
+}
+
+/**
+ * Attributes for importing a Redshift Serverless Namespace.
+ */
+export interface NamespaceAttributes {
+  /**
+   * The namespace name
+   */
+  readonly namespaceName: string;
+  /**
+   * The namespace id
+   */
+  readonly namespaceId: string;
+}
+
+/**
+ * Represents a Redshift Serverless Namespace construct in AWS CDK.
+ *
+ * @example
+ *
+ * const nameSpace = new Namespace(
+ *   stack,
+ *   'Namespace',
+ *   {
+ *     namespaceName: 'my-namespace',
+ *   },
+ * );
+ */
+export class Namespace extends Resource implements INamespace {
+  /**
+   * Imports an existing Namespace from attributes
+   */
+  public static fromNamespaceAttributes(scope: Construct, id: string, attrs: NamespaceAttributes): INamespace {
+    class Import extends Resource implements INamespace {
+      public readonly namespaceName = attrs.namespaceName;
+      public readonly namespaceId = attrs.namespaceId;
+      public readonly namespaceArn = Stack.of(this).formatArn({
+        resource: 'redshift-serverless',
+        service: 'namespace',
+        resourceName: attrs.namespaceId,
+      });
+    }
+
+    return new Import(scope, id);
+  }
+
+  /**
+   * The namespace Arn
+   */
+  readonly namespaceArn: string;
+  /**
+   * The namespace name
+   */
+  readonly namespaceName: string;
+  /**
+   * The namespace id
+   */
+  readonly namespaceId: string;
+
+  private readonly props: NamespaceProps;
+
+  private readonly iamRoles: IRole[];
+
+  constructor(scope: Construct, id: string, props: NamespaceProps) {
+    super(scope, id, {
+      physicalName:
+        props.namespaceName ??
+        Lazy.string({
+          produce: () => Names.uniqueResourceName(this, { maxLength: 64, allowedSpecialCharacters: '-' }).toLowerCase(),
+        }),
+    });
+    this.props = props;
+    this.iamRoles = props.iamRoles ?? [];
+
+    this.validateAdmin();
+    this.validateDbName();
+    this.validateFinalSnapshot();
+    this.validateDefaultIamRole();
+    this.validateNamespaceName();
+
+    const namespace = this.createResource(this, 'Resource', {
+      adminUsername: this.props.adminUsername,
+      adminUserPassword: this.props.adminUserPassword?.unsafeUnwrap(),
+      dbName: this.props.dbName,
+      defaultIamRoleArn: this.props.defaultIamRole?.roleArn,
+      finalSnapshotName: this.props.finalSnapshotName,
+      finalSnapshotRetentionPeriod: this.props.finalSnapshotRetentionPeriod,
+      iamRoles: Lazy.list({ produce: () => this.iamRoles.map(role => role.roleArn) }, { omitEmpty: true }),
+      kmsKeyId: this.props.kmsKey?.keyId,
+      logExports: this.props.logExports,
+      namespaceName: this.physicalName,
+    });
+
+    this.namespaceArn = namespace.attrNamespaceNamespaceArn;
+    this.namespaceName = namespace.attrNamespaceNamespaceName;
+    this.namespaceId = namespace.attrNamespaceNamespaceId;
+  }
+
+  protected createResource(
+    scope: Construct,
+    id: string,
+    props: aws_redshiftserverless.CfnNamespaceProps,
+  ): aws_redshiftserverless.CfnNamespace {
+    return new aws_redshiftserverless.CfnNamespace(scope, id, props);
+  }
+
+  /**
+   * Validates admin settings.
+   */
+  private validateAdmin(): void {
+    const adminUsername = this.props.adminUsername;
+    const adminUserPassword = this.props.adminUserPassword;
+
+    if (Token.isUnresolved(adminUsername)) {
+      return;
+    }
+
+    if (
+      (adminUsername !== undefined && adminUserPassword === undefined) ||
+      (adminUsername === undefined && adminUserPassword !== undefined)
+    ) {
+      throw new Error('You must specify both `adminUsername` and `adminUserPassword`, or neither.');
+    }
+
+    if (adminUsername && !/^[a-zA-Z][a-zA-Z_0-9+.@-]*$/.test(adminUsername)) {
+      throw new Error(
+        `\`adminUsername\` must start with a letter and can only contain letters, numbers, and the special characters: _, +, ., @, -, got: ${adminUsername}.`,
+      );
+    }
+  }
+
+  /**
+   * Validates a database name.
+   */
+  private validateDbName(): void {
+    const dbName = this.props.dbName;
+
+    if (Token.isUnresolved(dbName) || dbName === undefined) {
+      return;
+    }
+
+    if (!/^[a-zA-Z][a-zA-Z_0-9+.@-]*$/.test(dbName)) {
+      throw new Error(
+        `\`dbName\` must start with a letter, can only contain letters, numbers, and the special characters: _, +, ., @, -, got: ${dbName}.`,
+      );
+    }
+
+    if (dbName.length > 127) {
+      throw new Error(`\`dbName\` must not exceed 127 characters, got: ${dbName.length} characters.`);
+    }
+  }
+
+  /**
+   * Validates final snapshot settings.
+   */
+  private validateFinalSnapshot(): void {
+    const finalSnapshotName = this.props.finalSnapshotName;
+    const finalSnapshotRetentionPeriod = this.props.finalSnapshotRetentionPeriod;
+
+    if (Token.isUnresolved(finalSnapshotName)) return;
+
+    if (finalSnapshotName !== undefined) {
+      if (!/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(finalSnapshotName)) {
+        throw new Error(
+          `\`finalSnapshotName\` must consist only of lowercase alphanumeric characters or hyphens, with the first character as a letter, and it can't end with a hyphen or contain two consecutive hyphens, got: ${finalSnapshotName}.`,
+        );
+      }
+
+      if (finalSnapshotName.length > 255) {
+        throw new Error(
+          `\`finalSnapshotName\` must not exceed 255 characters, got: ${finalSnapshotName.length} characters.`,
+        );
+      }
+    }
+
+    if (Token.isUnresolved(finalSnapshotRetentionPeriod) || finalSnapshotRetentionPeriod === undefined) {
+      return;
+    }
+
+    if (!finalSnapshotName) {
+      throw new Error('You must set `finalSnapshotName` when you specify `finalSnapshotRetentionPeriod`.');
+    }
+
+    if (finalSnapshotRetentionPeriod < 1 || finalSnapshotRetentionPeriod > 3653) {
+      {
+        throw new Error(
+          `\`finalSnapshotRetentionPeriod\` must be between 1 and 3653, got: ${finalSnapshotRetentionPeriod}.`,
+        );
+      }
+    }
+  }
+
+  /**
+   * Validates role settings.
+   */
+  private validateDefaultIamRole(): void {
+    if (!this.props.defaultIamRole) {
+      return;
+    }
+
+    if (!this.props.iamRoles || !this.props.iamRoles.includes(this.props.defaultIamRole)) {
+      throw new Error('`defaultIamRole` must be included in `iamRoles`.');
+    }
+  }
+
+  /**
+   * Validates a namespace name.
+   */
+  private validateNamespaceName(): void {
+    const namespaceName = this.props.namespaceName;
+
+    if (Token.isUnresolved(namespaceName) || namespaceName === undefined) {
+      return;
+    }
+
+    if (!/^[a-z0-9-]+$/.test(namespaceName)) {
+      throw new Error(
+        `\`namespaceName\` must consist only of lowercase alphanumeric characters or hyphens, got: ${namespaceName}.`,
+      );
+    }
+
+    if (namespaceName.length < 3 || namespaceName.length > 64) {
+      throw new Error(
+        `\`namespaceName\` must be between 3 and 64 characters, got: ${namespaceName.length} characters.`,
+      );
+    }
+  }
+
+  /**
+   * Adds a role to the namespace
+   *
+   * @param role the role to add
+   */
+  public addIamRole(role: IRole): void {
+    if (this.iamRoles.includes(role)) {
+      throw new Error(`An adding IAM Role is already attached to the namespace, ARN: ${role.roleArn}.`);
+    }
+
+    this.iamRoles.push(role);
+  }
+}
diff --git a/src/aws-redshiftserverless/workgroup.ts b/src/aws-redshiftserverless/workgroup.ts
new file mode 100644
index 0000000..6316ae1
--- /dev/null
+++ b/src/aws-redshiftserverless/workgroup.ts
@@ -0,0 +1,370 @@
+import { IResource, Lazy, Names, Resource, aws_redshiftserverless, aws_ec2, Token, Stack } from 'aws-cdk-lib';
+import { Construct } from 'constructs';
+import { INamespace } from './namespace';
+
+/**
+ * A Redshift Serverless Workgroup
+ */
+export interface IWorkgroup extends IResource, aws_ec2.IConnectable {
+  /**
+   * The workgroup Arn
+   *
+   * @attribute
+   */
+  readonly workgroupArn: string;
+  /**
+   * The workgroup name
+   *
+   * @attribute
+   */
+  readonly workgroupName: string;
+  /**
+   * The workgroup id
+   *
+   * @attribute
+   */
+  readonly workgroupId: string;
+  /**
+   * The workgroup endpoint address
+   *
+   * @attribute
+   */
+  readonly endpointAddress: string;
+  /**
+   * The workgroup port
+   *
+   * @attribute
+   */
+  readonly port: number;
+}
+
+/**
+ * Properties for defining a Redshift Serverless Workgroup.
+ */
+export interface WorkgroupProps {
+  /**
+   * The base compute capacity of the workgroup in Redshift Processing Units (RPUs).
+   *
+   * You can adjust the base capacity setting from 8 RPUs to 512 RPUs in units of 8.
+   * Also you can increment or decrement RPUs in units of 32 when setting a base capacity between 512-1024.
+   *
+   * @default 128
+   *
+   * @see https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-capacity.html
+   */
+  readonly baseCapacity?: number;
+
+  /**
+   * A list of parameters to set for finer control over a database.
+   *
+   * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-workgroup.html#cfn-redshiftserverless-workgroup-configparameters
+   * @default - no config parameters
+   */
+  readonly configParameters?: { [key: string]: string };
+
+  /**
+   * The value that specifies whether to enable enhanced virtual private cloud (VPC) routing,
+   * which forces Amazon Redshift Serverless to route traffic through your VPC.
+   *
+   * @default false
+   */
+  readonly enhancedVpcRouting?: boolean;
+
+  /**
+   * The namespace the workgroup is associated with.
+   *
+   * @default - the workgroup is not associated with any namespace
+   */
+  readonly namespace?: INamespace;
+
+  /**
+   * The custom port to use when connecting to a workgroup. Valid port ranges are 5431-5455 and 8191-8215.
+   *
+   * @default 5439
+   */
+  readonly port?: number;
+
+  /**
+   * A value that specifies whether the workgroup can be accessible from a public network.
+   *
+   * @default false
+   */
+  readonly publiclyAccessible?: boolean;
+
+  /**
+   * The security groups to associate with the workgroup.
+   *
+   * @default - a new security group is created
+   */
+  readonly securityGroups?: aws_ec2.ISecurityGroup[];
+
+  /**
+   * The VPC to place the workgroup in.
+   *
+   * `vpc` must have at least 3 subnets, and they must span across 3 Availability Zones.
+   */
+  readonly vpc: aws_ec2.IVpc;
+
+  /**
+   * Where to place the workgroup within the VPC.
+   *
+   * @default - private subnets
+   */
+  readonly vpcSubnets?: aws_ec2.SubnetSelection;
+
+  /**
+   * The workgroup name.
+   *
+   * \`workgroupName\` must be between 3 and 64 characters long, contain only lowercase letters, numbers, and hyphens.
+   *
+   * @default - auto generate
+   */
+  readonly workgroupName?: string;
+}
+
+/**
+ * Attributes for importing a Redshift Serverless Workgroup.
+ */
+export interface WorkgroupAttributes {
+  /**
+   * The workgroup name
+   */
+  readonly workgroupName: string;
+  /**
+   * The workgroup id
+   */
+  readonly workgroupId: string;
+  /**
+   * The workgroup endpoint address
+   */
+  readonly endpointAddress: string;
+  /**
+   * The workgroup port
+   */
+  readonly port: number;
+  /**
+   * The security groups associated with the Redshift Serverless Workgroup.
+   */
+  readonly securityGroups: aws_ec2.ISecurityGroup[];
+}
+
+/**
+ * Represents a Redshift Serverless Workgroup construct in AWS CDK.
+ *
+ * @example
+ * declare const namespace: Namespace;
+ * declare const vpc: aws_ec2.IVpc;
+ *
+ * const nameSpace = new Workgroup(
+ *   stack,
+ *   'Workgroup',
+ *   {
+ *     workgroupName: 'my-workgroup',
+ *     namespace: namespace,
+ *     vpc,
+ *   },
+ * );
+ */
+export class Workgroup extends Resource implements IWorkgroup {
+  /**
+   * Import an existing workgroup to the stack from its attributes.
+   */
+  public static fromWorkgroupAttributes(scope: Construct, id: string, attrs: WorkgroupAttributes): IWorkgroup {
+    class Import extends Resource implements IWorkgroup {
+      public readonly workgroupName = attrs.workgroupName;
+      public readonly workgroupId = attrs.workgroupId;
+      public readonly endpointAddress = attrs.endpointAddress;
+      public readonly port = attrs.port;
+      public readonly connections = new aws_ec2.Connections({
+        securityGroups: attrs.securityGroups,
+        defaultPort: aws_ec2.Port.tcp(attrs.port),
+      });
+      public readonly workgroupArn = Stack.of(this).formatArn({
+        resource: 'redshift-serverless',
+        service: 'workgroup',
+        resourceName: attrs.workgroupId,
+      });
+    }
+
+    return new Import(scope, id);
+  }
+
+  /**
+   * The workgroup Arn
+   */
+  readonly workgroupArn: string;
+
+  /**
+   * The workgroup name
+   */
+  readonly workgroupName: string;
+
+  /**
+   * The workgroup id
+   */
+  readonly workgroupId: string;
+
+  /**
+   * The workgroup endpoint address
+   */
+  readonly endpointAddress: string;
+
+  /**
+   * The workgroup port
+   */
+  readonly port: number;
+
+  /**
+   * The connection object associated with the Redshift Serverless Workgroup.
+   */
+  public readonly connections: aws_ec2.Connections;
+
+  private readonly props: WorkgroupProps;
+  private readonly securityGroups: aws_ec2.ISecurityGroup[];
+  private readonly vpcSubnets: aws_ec2.SubnetSelection;
+
+  constructor(scope: Construct, id: string, props: WorkgroupProps) {
+    super(scope, id, {
+      physicalName:
+        props.workgroupName ??
+        Lazy.string({
+          produce: () => Names.uniqueResourceName(this, { maxLength: 64, allowedSpecialCharacters: '-' }).toLowerCase(),
+        }),
+    });
+    this.props = props;
+
+    this.securityGroups = props.securityGroups ?? [
+      this.createSecurityGroup(this, 'SecurityGroup', {
+        vpc: this.props.vpc,
+        description: 'Automatic generated security group for Redshift Serverless Security Group',
+      }),
+    ];
+
+    this.connections = new aws_ec2.Connections({
+      securityGroups: this.securityGroups,
+    });
+
+    this.vpcSubnets = props.vpcSubnets ?? {
+      subnetType: aws_ec2.SubnetType.PRIVATE_WITH_EGRESS,
+    };
+
+    this.validateCapacity();
+    this.validateWorkgroupName();
+    this.validatePort();
+    this.validateSubnet();
+
+    const workgroup = this.createResource(this, 'Resource', {
+      baseCapacity: this.props.baseCapacity,
+      configParameters: this.props.configParameters
+        ? Object.entries(this.props.configParameters).map(([key, value]) => ({
+            parameterKey: key,
+            parameterValue: value,
+          }))
+        : undefined,
+      enhancedVpcRouting: this.props.enhancedVpcRouting,
+      namespaceName: this.props.namespace?.namespaceName,
+      publiclyAccessible: this.props.publiclyAccessible,
+      port: this.props.port,
+      securityGroupIds: this.securityGroups.map(sg => sg.securityGroupId),
+      subnetIds: this.props.vpc.selectSubnets(this.vpcSubnets).subnetIds,
+      workgroupName: this.physicalName,
+    });
+
+    this.workgroupArn = workgroup.attrWorkgroupWorkgroupArn;
+    this.workgroupName = workgroup.attrWorkgroupWorkgroupName;
+    this.workgroupId = workgroup.attrWorkgroupWorkgroupId;
+    this.endpointAddress = workgroup.attrWorkgroupEndpointAddress;
+    this.port = workgroup.attrWorkgroupEndpointPort;
+  }
+
+  protected createResource(
+    scope: Construct,
+    id: string,
+    props: aws_redshiftserverless.CfnWorkgroupProps,
+  ): aws_redshiftserverless.CfnWorkgroup {
+    return new aws_redshiftserverless.CfnWorkgroup(scope, id, props);
+  }
+
+  protected createSecurityGroup(
+    scope: Construct,
+    id: string,
+    props: aws_ec2.SecurityGroupProps,
+  ): aws_ec2.SecurityGroup {
+    return new aws_ec2.SecurityGroup(scope, id, props);
+  }
+
+  /**
+   * Validates capacity settings.
+   */
+  private validateCapacity(): void {
+    const baseCapacity = this.props.baseCapacity;
+
+    if (!Token.isUnresolved(baseCapacity) && baseCapacity !== undefined) {
+      if (baseCapacity < 8 || baseCapacity > 1024) {
+        throw new Error(`\`baseCapacity\` must be between 8 and 1024, got: ${baseCapacity}.`);
+      }
+
+      if (8 <= baseCapacity && baseCapacity <= 512 && baseCapacity % 8 !== 0) {
+        throw new Error(`\`baseCapacity\` must be units of 8 between 8 and 512, got: ${baseCapacity}.`);
+      }
+
+      if (512 <= baseCapacity && baseCapacity <= 1024 && baseCapacity % 32 !== 0) {
+        throw new Error(`\`baseCapacity\` must be units of 32 between 512 and 1024, got: ${baseCapacity}.`);
+      }
+    }
+  }
+
+  /**
+   * Validates a workgroup name.
+   */
+  private validateWorkgroupName(): void {
+    const workgroupName = this.props.workgroupName;
+    if (Token.isUnresolved(workgroupName) || workgroupName === undefined) {
+      return;
+    }
+
+    if (!/^[a-z0-9-]+$/.test(workgroupName)) {
+      throw new Error(
+        `\`workgroupName\` must contain only lowercase letters, numbers, and hyphens, got: ${workgroupName}.`,
+      );
+    }
+
+    if (workgroupName.length < 3 || workgroupName.length > 64) {
+      throw new Error(
+        `\`workgroupName\` must be between 3 and 64 characters, got: ${workgroupName.length} characters.`,
+      );
+    }
+  }
+
+  /**
+   * Validates a port number.
+   *
+   * @see https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting.html
+   */
+  private validatePort(): void {
+    const port = this.props.port;
+    if (!Token.isUnresolved(port) && port !== undefined) {
+      const isValidPort = (port >= 5431 && port <= 5455) || (port >= 8191 && port <= 8215);
+
+      if (!isValidPort) {
+        throw new Error(
+          `\`port\` must be in the range of 5431-5455 or 8191-8215 for Amazon Redshift Serverless, got: ${port}.`,
+        );
+      }
+    }
+  }
+
+  /**
+   * Validates subnets.
+   *
+   * @see https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-usage-considerations.html
+   */
+  private validateSubnet(): void {
+    const azLength = this.props.vpc.availabilityZones.length;
+    if (azLength < 3) {
+      throw new Error(
+        `\`vpc\` must have at least 3 subnets, and they must span across 3 Availability Zones, got: ${azLength} AZs.`,
+      );
+    }
+  }
+}
diff --git a/src/index.ts b/src/index.ts
index 163304a..8eb5936 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,3 +1,4 @@
 // Export constructs here
 export * as aws_cur from './aws-cur';
 export * as aws_ec2 from './aws-ec2';
+export * as aws_redshiftserverless from './aws-redshiftserverless';


Test patch:
diff --git a/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts
new file mode 100644
index 0000000..8f6cc7a
--- /dev/null
+++ b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts
@@ -0,0 +1,75 @@
+import { IntegTest } from '@aws-cdk/integ-tests-alpha';
+import * as cdk from 'aws-cdk-lib';
+import { Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam';
+import { Construct } from 'constructs';
+import * as ocf from '../../src';
+
+class RedshiftServerlessStack extends cdk.Stack {
+  public readonly workgroup: ocf.aws_redshiftserverless.Workgroup;
+  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
+    super(scope, id, props);
+
+    const vpc = new cdk.aws_ec2.Vpc(this, 'VPC', {});
+
+    const defaultRole = new Role(this, 'DefaultRole', {
+      assumedBy: new ServicePrincipal('redshift.amazonaws.com'),
+    });
+
+    const anotherRole = new Role(this, 'AnotherRole', {
+      assumedBy: new ServicePrincipal('redshift.amazonaws.com'),
+    });
+
+    const namespace = new ocf.aws_redshiftserverless.Namespace(this, 'Namespace', {
+      adminUsername: 'adminuser',
+      adminUserPassword: cdk.SecretValue.unsafePlainText('adminUserPassword123'),
+      defaultIamRole: defaultRole,
+      iamRoles: [defaultRole, anotherRole],
+      dbName: 'mydatabase',
+      logExports: [
+        ocf.aws_redshiftserverless.LogExport.USER_LOG,
+        ocf.aws_redshiftserverless.LogExport.CONNECTION_LOG,
+        ocf.aws_redshiftserverless.LogExport.USER_ACTIVITY_LOG,
+      ],
+    });
+
+    const addRole = new Role(this, 'AddRole', {
+      assumedBy: new ServicePrincipal('redshift.amazonaws.com'),
+    });
+
+    namespace.addIamRole(addRole);
+
+    const workgroup = new ocf.aws_redshiftserverless.Workgroup(this, 'WorkGroup', {
+      baseCapacity: 8,
+      configParameters: {
+        datestyle: 'ISO, MDY',
+        enable_user_activity_logging: 'true',
+        query_group: 'default',
+        require_ssl: 'true',
+        search_path: '$user, public',
+        max_query_execution_time: '14440',
+      },
+      enhancedVpcRouting: true,
+      namespace,
+      publiclyAccessible: true,
+      vpc,
+      port: 5432,
+    });
+    this.workgroup = workgroup;
+  }
+}
+
+const app = new cdk.App();
+const env = {
+  account: process.env.CDK_INTEG_ACCOUNT || process.env.CDK_DEFAULT_ACCOUNT,
+  region: process.env.CDK_INTEG_REGION || process.env.CDK_DEFAULT_REGION,
+};
+
+const testCase = new RedshiftServerlessStack(app, 'RedshiftServerlessNamespaceWorkgroupStack', { env });
+
+new IntegTest(app, 'RedshiftServerlessNamespaceWorkgroupTest', {
+  testCases: [testCase],
+  enableLookups: true,
+  stackUpdateWorkflow: false,
+});
+
+new cdk.CfnOutput(testCase, 'endpointAddress', { value: testCase.workgroup.endpointAddress });
diff --git a/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupStack.assets.json b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupStack.assets.json
new file mode 100644
index 0000000..648dee7
--- /dev/null
+++ b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupStack.assets.json
@@ -0,0 +1,34 @@
+{
+  "version": "36.0.0",
+  "files": {
+    "dd5711540f04e06aa955d7f4862fc04e8cdea464cb590dae91ed2976bb78098e": {
+      "source": {
+        "path": "asset.dd5711540f04e06aa955d7f4862fc04e8cdea464cb590dae91ed2976bb78098e",
+        "packaging": "zip"
+      },
+      "destinations": {
+        "12345678-test-region": {
+          "bucketName": "cdk-hnb659fds-assets-12345678-test-region",
+          "objectKey": "dd5711540f04e06aa955d7f4862fc04e8cdea464cb590dae91ed2976bb78098e.zip",
+          "region": "test-region",
+          "assumeRoleArn": "arn:${AWS::Partition}:iam::12345678:role/cdk-hnb659fds-file-publishing-role-12345678-test-region"
+        }
+      }
+    },
+    "4a8832c353aec7c387162f2dce3cb6290e83346da06b1ecbcc2f4b8a5794133d": {
+      "source": {
+        "path": "RedshiftServerlessNamespaceWorkgroupStack.template.json",
+        "packaging": "file"
+      },
+      "destinations": {
+        "12345678-test-region": {
+          "bucketName": "cdk-hnb659fds-assets-12345678-test-region",
+          "objectKey": "4a8832c353aec7c387162f2dce3cb6290e83346da06b1ecbcc2f4b8a5794133d.json",
+          "region": "test-region",
+          "assumeRoleArn": "arn:${AWS::Partition}:iam::12345678:role/cdk-hnb659fds-file-publishing-role-12345678-test-region"
+        }
+      }
+    }
+  },
+  "dockerImages": {}
+}
\ No newline at end of file
diff --git a/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupStack.template.json b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupStack.template.json
new file mode 100644
index 0000000..ed5aa2b
--- /dev/null
+++ b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupStack.template.json
@@ -0,0 +1,846 @@
+{
+ "Resources": {
+  "VPCB9E5F0B4": {
+   "Type": "AWS::EC2::VPC",
+   "Properties": {
+    "CidrBlock": "10.0.0.0/16",
+    "EnableDnsHostnames": true,
+    "EnableDnsSupport": true,
+    "InstanceTenancy": "default",
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC"
+     }
+    ]
+   }
+  },
+  "VPCPublicSubnet1SubnetB4246D30": {
+   "Type": "AWS::EC2::Subnet",
+   "Properties": {
+    "AvailabilityZone": "test-region-1a",
+    "CidrBlock": "10.0.0.0/19",
+    "MapPublicIpOnLaunch": true,
+    "Tags": [
+     {
+      "Key": "aws-cdk:subnet-name",
+      "Value": "Public"
+     },
+     {
+      "Key": "aws-cdk:subnet-type",
+      "Value": "Public"
+     },
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPublicSubnet1RouteTableFEE4B781": {
+   "Type": "AWS::EC2::RouteTable",
+   "Properties": {
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPublicSubnet1RouteTableAssociation0B0896DC": {
+   "Type": "AWS::EC2::SubnetRouteTableAssociation",
+   "Properties": {
+    "RouteTableId": {
+     "Ref": "VPCPublicSubnet1RouteTableFEE4B781"
+    },
+    "SubnetId": {
+     "Ref": "VPCPublicSubnet1SubnetB4246D30"
+    }
+   }
+  },
+  "VPCPublicSubnet1DefaultRoute91CEF279": {
+   "Type": "AWS::EC2::Route",
+   "Properties": {
+    "DestinationCidrBlock": "0.0.0.0/0",
+    "GatewayId": {
+     "Ref": "VPCIGWB7E252D3"
+    },
+    "RouteTableId": {
+     "Ref": "VPCPublicSubnet1RouteTableFEE4B781"
+    }
+   },
+   "DependsOn": [
+    "VPCVPCGW99B986DC"
+   ]
+  },
+  "VPCPublicSubnet1EIP6AD938E8": {
+   "Type": "AWS::EC2::EIP",
+   "Properties": {
+    "Domain": "vpc",
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1"
+     }
+    ]
+   }
+  },
+  "VPCPublicSubnet1NATGatewayE0556630": {
+   "Type": "AWS::EC2::NatGateway",
+   "Properties": {
+    "AllocationId": {
+     "Fn::GetAtt": [
+      "VPCPublicSubnet1EIP6AD938E8",
+      "AllocationId"
+     ]
+    },
+    "SubnetId": {
+     "Ref": "VPCPublicSubnet1SubnetB4246D30"
+    },
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1"
+     }
+    ]
+   },
+   "DependsOn": [
+    "VPCPublicSubnet1DefaultRoute91CEF279",
+    "VPCPublicSubnet1RouteTableAssociation0B0896DC"
+   ]
+  },
+  "VPCPublicSubnet2Subnet74179F39": {
+   "Type": "AWS::EC2::Subnet",
+   "Properties": {
+    "AvailabilityZone": "test-region-1b",
+    "CidrBlock": "10.0.32.0/19",
+    "MapPublicIpOnLaunch": true,
+    "Tags": [
+     {
+      "Key": "aws-cdk:subnet-name",
+      "Value": "Public"
+     },
+     {
+      "Key": "aws-cdk:subnet-type",
+      "Value": "Public"
+     },
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPublicSubnet2RouteTable6F1A15F1": {
+   "Type": "AWS::EC2::RouteTable",
+   "Properties": {
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPublicSubnet2RouteTableAssociation5A808732": {
+   "Type": "AWS::EC2::SubnetRouteTableAssociation",
+   "Properties": {
+    "RouteTableId": {
+     "Ref": "VPCPublicSubnet2RouteTable6F1A15F1"
+    },
+    "SubnetId": {
+     "Ref": "VPCPublicSubnet2Subnet74179F39"
+    }
+   }
+  },
+  "VPCPublicSubnet2DefaultRouteB7481BBA": {
+   "Type": "AWS::EC2::Route",
+   "Properties": {
+    "DestinationCidrBlock": "0.0.0.0/0",
+    "GatewayId": {
+     "Ref": "VPCIGWB7E252D3"
+    },
+    "RouteTableId": {
+     "Ref": "VPCPublicSubnet2RouteTable6F1A15F1"
+    }
+   },
+   "DependsOn": [
+    "VPCVPCGW99B986DC"
+   ]
+  },
+  "VPCPublicSubnet2EIP4947BC00": {
+   "Type": "AWS::EC2::EIP",
+   "Properties": {
+    "Domain": "vpc",
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2"
+     }
+    ]
+   }
+  },
+  "VPCPublicSubnet2NATGateway3C070193": {
+   "Type": "AWS::EC2::NatGateway",
+   "Properties": {
+    "AllocationId": {
+     "Fn::GetAtt": [
+      "VPCPublicSubnet2EIP4947BC00",
+      "AllocationId"
+     ]
+    },
+    "SubnetId": {
+     "Ref": "VPCPublicSubnet2Subnet74179F39"
+    },
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2"
+     }
+    ]
+   },
+   "DependsOn": [
+    "VPCPublicSubnet2DefaultRouteB7481BBA",
+    "VPCPublicSubnet2RouteTableAssociation5A808732"
+   ]
+  },
+  "VPCPublicSubnet3Subnet631C5E25": {
+   "Type": "AWS::EC2::Subnet",
+   "Properties": {
+    "AvailabilityZone": "test-region-1c",
+    "CidrBlock": "10.0.64.0/19",
+    "MapPublicIpOnLaunch": true,
+    "Tags": [
+     {
+      "Key": "aws-cdk:subnet-name",
+      "Value": "Public"
+     },
+     {
+      "Key": "aws-cdk:subnet-type",
+      "Value": "Public"
+     },
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPublicSubnet3RouteTable98AE0E14": {
+   "Type": "AWS::EC2::RouteTable",
+   "Properties": {
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPublicSubnet3RouteTableAssociation427FE0C6": {
+   "Type": "AWS::EC2::SubnetRouteTableAssociation",
+   "Properties": {
+    "RouteTableId": {
+     "Ref": "VPCPublicSubnet3RouteTable98AE0E14"
+    },
+    "SubnetId": {
+     "Ref": "VPCPublicSubnet3Subnet631C5E25"
+    }
+   }
+  },
+  "VPCPublicSubnet3DefaultRouteA0D29D46": {
+   "Type": "AWS::EC2::Route",
+   "Properties": {
+    "DestinationCidrBlock": "0.0.0.0/0",
+    "GatewayId": {
+     "Ref": "VPCIGWB7E252D3"
+    },
+    "RouteTableId": {
+     "Ref": "VPCPublicSubnet3RouteTable98AE0E14"
+    }
+   },
+   "DependsOn": [
+    "VPCVPCGW99B986DC"
+   ]
+  },
+  "VPCPublicSubnet3EIPAD4BC883": {
+   "Type": "AWS::EC2::EIP",
+   "Properties": {
+    "Domain": "vpc",
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3"
+     }
+    ]
+   }
+  },
+  "VPCPublicSubnet3NATGatewayD3048F5C": {
+   "Type": "AWS::EC2::NatGateway",
+   "Properties": {
+    "AllocationId": {
+     "Fn::GetAtt": [
+      "VPCPublicSubnet3EIPAD4BC883",
+      "AllocationId"
+     ]
+    },
+    "SubnetId": {
+     "Ref": "VPCPublicSubnet3Subnet631C5E25"
+    },
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3"
+     }
+    ]
+   },
+   "DependsOn": [
+    "VPCPublicSubnet3DefaultRouteA0D29D46",
+    "VPCPublicSubnet3RouteTableAssociation427FE0C6"
+   ]
+  },
+  "VPCPrivateSubnet1Subnet8BCA10E0": {
+   "Type": "AWS::EC2::Subnet",
+   "Properties": {
+    "AvailabilityZone": "test-region-1a",
+    "CidrBlock": "10.0.96.0/19",
+    "MapPublicIpOnLaunch": false,
+    "Tags": [
+     {
+      "Key": "aws-cdk:subnet-name",
+      "Value": "Private"
+     },
+     {
+      "Key": "aws-cdk:subnet-type",
+      "Value": "Private"
+     },
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPrivateSubnet1RouteTableBE8A6027": {
+   "Type": "AWS::EC2::RouteTable",
+   "Properties": {
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPrivateSubnet1RouteTableAssociation347902D1": {
+   "Type": "AWS::EC2::SubnetRouteTableAssociation",
+   "Properties": {
+    "RouteTableId": {
+     "Ref": "VPCPrivateSubnet1RouteTableBE8A6027"
+    },
+    "SubnetId": {
+     "Ref": "VPCPrivateSubnet1Subnet8BCA10E0"
+    }
+   }
+  },
+  "VPCPrivateSubnet1DefaultRouteAE1D6490": {
+   "Type": "AWS::EC2::Route",
+   "Properties": {
+    "DestinationCidrBlock": "0.0.0.0/0",
+    "NatGatewayId": {
+     "Ref": "VPCPublicSubnet1NATGatewayE0556630"
+    },
+    "RouteTableId": {
+     "Ref": "VPCPrivateSubnet1RouteTableBE8A6027"
+    }
+   }
+  },
+  "VPCPrivateSubnet2SubnetCFCDAA7A": {
+   "Type": "AWS::EC2::Subnet",
+   "Properties": {
+    "AvailabilityZone": "test-region-1b",
+    "CidrBlock": "10.0.128.0/19",
+    "MapPublicIpOnLaunch": false,
+    "Tags": [
+     {
+      "Key": "aws-cdk:subnet-name",
+      "Value": "Private"
+     },
+     {
+      "Key": "aws-cdk:subnet-type",
+      "Value": "Private"
+     },
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPrivateSubnet2RouteTable0A19E10E": {
+   "Type": "AWS::EC2::RouteTable",
+   "Properties": {
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPrivateSubnet2RouteTableAssociation0C73D413": {
+   "Type": "AWS::EC2::SubnetRouteTableAssociation",
+   "Properties": {
+    "RouteTableId": {
+     "Ref": "VPCPrivateSubnet2RouteTable0A19E10E"
+    },
+    "SubnetId": {
+     "Ref": "VPCPrivateSubnet2SubnetCFCDAA7A"
+    }
+   }
+  },
+  "VPCPrivateSubnet2DefaultRouteF4F5CFD2": {
+   "Type": "AWS::EC2::Route",
+   "Properties": {
+    "DestinationCidrBlock": "0.0.0.0/0",
+    "NatGatewayId": {
+     "Ref": "VPCPublicSubnet2NATGateway3C070193"
+    },
+    "RouteTableId": {
+     "Ref": "VPCPrivateSubnet2RouteTable0A19E10E"
+    }
+   }
+  },
+  "VPCPrivateSubnet3Subnet3EDCD457": {
+   "Type": "AWS::EC2::Subnet",
+   "Properties": {
+    "AvailabilityZone": "test-region-1c",
+    "CidrBlock": "10.0.160.0/19",
+    "MapPublicIpOnLaunch": false,
+    "Tags": [
+     {
+      "Key": "aws-cdk:subnet-name",
+      "Value": "Private"
+     },
+     {
+      "Key": "aws-cdk:subnet-type",
+      "Value": "Private"
+     },
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPrivateSubnet3RouteTable192186F8": {
+   "Type": "AWS::EC2::RouteTable",
+   "Properties": {
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCPrivateSubnet3RouteTableAssociationC28D144E": {
+   "Type": "AWS::EC2::SubnetRouteTableAssociation",
+   "Properties": {
+    "RouteTableId": {
+     "Ref": "VPCPrivateSubnet3RouteTable192186F8"
+    },
+    "SubnetId": {
+     "Ref": "VPCPrivateSubnet3Subnet3EDCD457"
+    }
+   }
+  },
+  "VPCPrivateSubnet3DefaultRoute27F311AE": {
+   "Type": "AWS::EC2::Route",
+   "Properties": {
+    "DestinationCidrBlock": "0.0.0.0/0",
+    "NatGatewayId": {
+     "Ref": "VPCPublicSubnet3NATGatewayD3048F5C"
+    },
+    "RouteTableId": {
+     "Ref": "VPCPrivateSubnet3RouteTable192186F8"
+    }
+   }
+  },
+  "VPCIGWB7E252D3": {
+   "Type": "AWS::EC2::InternetGateway",
+   "Properties": {
+    "Tags": [
+     {
+      "Key": "Name",
+      "Value": "RedshiftServerlessNamespaceWorkgroupStack/VPC"
+     }
+    ]
+   }
+  },
+  "VPCVPCGW99B986DC": {
+   "Type": "AWS::EC2::VPCGatewayAttachment",
+   "Properties": {
+    "InternetGatewayId": {
+     "Ref": "VPCIGWB7E252D3"
+    },
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "VPCRestrictDefaultSecurityGroupCustomResource59474679": {
+   "Type": "Custom::VpcRestrictDefaultSG",
+   "Properties": {
+    "ServiceToken": {
+     "Fn::GetAtt": [
+      "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E",
+      "Arn"
+     ]
+    },
+    "DefaultSecurityGroupId": {
+     "Fn::GetAtt": [
+      "VPCB9E5F0B4",
+      "DefaultSecurityGroup"
+     ]
+    },
+    "Account": "12345678"
+   },
+   "UpdateReplacePolicy": "Delete",
+   "DeletionPolicy": "Delete"
+  },
+  "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0": {
+   "Type": "AWS::IAM::Role",
+   "Properties": {
+    "AssumeRolePolicyDocument": {
+     "Version": "2012-10-17",
+     "Statement": [
+      {
+       "Action": "sts:AssumeRole",
+       "Effect": "Allow",
+       "Principal": {
+        "Service": "lambda.amazonaws.com"
+       }
+      }
+     ]
+    },
+    "ManagedPolicyArns": [
+     {
+      "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
+     }
+    ],
+    "Policies": [
+     {
+      "PolicyName": "Inline",
+      "PolicyDocument": {
+       "Version": "2012-10-17",
+       "Statement": [
+        {
+         "Effect": "Allow",
+         "Action": [
+          "ec2:AuthorizeSecurityGroupIngress",
+          "ec2:AuthorizeSecurityGroupEgress",
+          "ec2:RevokeSecurityGroupIngress",
+          "ec2:RevokeSecurityGroupEgress"
+         ],
+         "Resource": [
+          {
+           "Fn::Join": [
+            "",
+            [
+             "arn:",
+             {
+              "Ref": "AWS::Partition"
+             },
+             ":ec2:test-region:12345678:security-group/",
+             {
+              "Fn::GetAtt": [
+               "VPCB9E5F0B4",
+               "DefaultSecurityGroup"
+              ]
+             }
+            ]
+           ]
+          }
+         ]
+        }
+       ]
+      }
+     }
+    ]
+   }
+  },
+  "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E": {
+   "Type": "AWS::Lambda::Function",
+   "Properties": {
+    "Code": {
+     "S3Bucket": "cdk-hnb659fds-assets-12345678-test-region",
+     "S3Key": "dd5711540f04e06aa955d7f4862fc04e8cdea464cb590dae91ed2976bb78098e.zip"
+    },
+    "Timeout": 900,
+    "MemorySize": 128,
+    "Handler": "__entrypoint__.handler",
+    "Role": {
+     "Fn::GetAtt": [
+      "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0",
+      "Arn"
+     ]
+    },
+    "Runtime": "nodejs18.x",
+    "Description": "Lambda function for removing all inbound/outbound rules from the VPC default security group"
+   },
+   "DependsOn": [
+    "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0"
+   ]
+  },
+  "DefaultRoleEFEF8FA6": {
+   "Type": "AWS::IAM::Role",
+   "Properties": {
+    "AssumeRolePolicyDocument": {
+     "Statement": [
+      {
+       "Action": "sts:AssumeRole",
+       "Effect": "Allow",
+       "Principal": {
+        "Service": "redshift.amazonaws.com"
+       }
+      }
+     ],
+     "Version": "2012-10-17"
+    }
+   }
+  },
+  "AnotherRoleE13C44E8": {
+   "Type": "AWS::IAM::Role",
+   "Properties": {
+    "AssumeRolePolicyDocument": {
+     "Statement": [
+      {
+       "Action": "sts:AssumeRole",
+       "Effect": "Allow",
+       "Principal": {
+        "Service": "redshift.amazonaws.com"
+       }
+      }
+     ],
+     "Version": "2012-10-17"
+    }
+   }
+  },
+  "Namespace9B63B8C8": {
+   "Type": "AWS::RedshiftServerless::Namespace",
+   "Properties": {
+    "AdminUserPassword": "adminUserPassword123",
+    "AdminUsername": "adminuser",
+    "DbName": "mydatabase",
+    "DefaultIamRoleArn": {
+     "Fn::GetAtt": [
+      "DefaultRoleEFEF8FA6",
+      "Arn"
+     ]
+    },
+    "IamRoles": [
+     {
+      "Fn::GetAtt": [
+       "DefaultRoleEFEF8FA6",
+       "Arn"
+      ]
+     },
+     {
+      "Fn::GetAtt": [
+       "AnotherRoleE13C44E8",
+       "Arn"
+      ]
+     },
+     {
+      "Fn::GetAtt": [
+       "AddRole65E43A1F",
+       "Arn"
+      ]
+     }
+    ],
+    "LogExports": [
+     "userlog",
+     "connectionlog",
+     "useractivitylog"
+    ],
+    "NamespaceName": "redshiftserverlessnamespaceworkgroupstacknamespace9213ae95"
+   }
+  },
+  "AddRole65E43A1F": {
+   "Type": "AWS::IAM::Role",
+   "Properties": {
+    "AssumeRolePolicyDocument": {
+     "Statement": [
+      {
+       "Action": "sts:AssumeRole",
+       "Effect": "Allow",
+       "Principal": {
+        "Service": "redshift.amazonaws.com"
+       }
+      }
+     ],
+     "Version": "2012-10-17"
+    }
+   }
+  },
+  "WorkGroupSecurityGroup82E81D37": {
+   "Type": "AWS::EC2::SecurityGroup",
+   "Properties": {
+    "GroupDescription": "Automatic generated security group for Redshift Serverless Security Group",
+    "SecurityGroupEgress": [
+     {
+      "CidrIp": "0.0.0.0/0",
+      "Description": "Allow all outbound traffic by default",
+      "IpProtocol": "-1"
+     }
+    ],
+    "VpcId": {
+     "Ref": "VPCB9E5F0B4"
+    }
+   }
+  },
+  "WorkGroup9BE20B7A": {
+   "Type": "AWS::RedshiftServerless::Workgroup",
+   "Properties": {
+    "BaseCapacity": 8,
+    "ConfigParameters": [
+     {
+      "ParameterKey": "datestyle",
+      "ParameterValue": "ISO, MDY"
+     },
+     {
+      "ParameterKey": "enable_user_activity_logging",
+      "ParameterValue": "true"
+     },
+     {
+      "ParameterKey": "query_group",
+      "ParameterValue": "default"
+     },
+     {
+      "ParameterKey": "require_ssl",
+      "ParameterValue": "true"
+     },
+     {
+      "ParameterKey": "search_path",
+      "ParameterValue": "$user, public"
+     },
+     {
+      "ParameterKey": "max_query_execution_time",
+      "ParameterValue": "14440"
+     }
+    ],
+    "EnhancedVpcRouting": true,
+    "NamespaceName": {
+     "Fn::GetAtt": [
+      "Namespace9B63B8C8",
+      "Namespace.NamespaceName"
+     ]
+    },
+    "Port": 5432,
+    "PubliclyAccessible": true,
+    "SecurityGroupIds": [
+     {
+      "Fn::GetAtt": [
+       "WorkGroupSecurityGroup82E81D37",
+       "GroupId"
+      ]
+     }
+    ],
+    "SubnetIds": [
+     {
+      "Ref": "VPCPrivateSubnet1Subnet8BCA10E0"
+     },
+     {
+      "Ref": "VPCPrivateSubnet2SubnetCFCDAA7A"
+     },
+     {
+      "Ref": "VPCPrivateSubnet3Subnet3EDCD457"
+     }
+    ],
+    "WorkgroupName": "redshiftserverlessnamespaceworkgroupstackworkgroup276abff0"
+   }
+  }
+ },
+ "Outputs": {
+  "endpointAddress": {
+   "Value": {
+    "Fn::GetAtt": [
+     "WorkGroup9BE20B7A",
+     "Workgroup.Endpoint.Address"
+    ]
+   }
+  }
+ },
+ "Parameters": {
+  "BootstrapVersion": {
+   "Type": "AWS::SSM::Parameter::Value<String>",
+   "Default": "/cdk-bootstrap/hnb659fds/version",
+   "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
+  }
+ },
+ "Rules": {
+  "CheckBootstrapVersion": {
+   "Assertions": [
+    {
+     "Assert": {
+      "Fn::Not": [
+       {
+        "Fn::Contains": [
+         [
+          "1",
+          "2",
+          "3",
+          "4",
+          "5"
+         ],
+         {
+          "Ref": "BootstrapVersion"
+         }
+        ]
+       }
+      ]
+     },
+     "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
+    }
+   ]
+  }
+ }
+}
\ No newline at end of file
diff --git a/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.assets.json b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.assets.json
new file mode 100644
index 0000000..a459197
--- /dev/null
+++ b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.assets.json
@@ -0,0 +1,19 @@
+{
+  "version": "36.0.0",
+  "files": {
+    "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": {
+      "source": {
+        "path": "RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.template.json",
+        "packaging": "file"
+      },
+      "destinations": {
+        "current_account-current_region": {
+          "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
+          "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json",
+          "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
+        }
+      }
+    }
+  },
+  "dockerImages": {}
+}
\ No newline at end of file
diff --git a/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.template.json b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.template.json
new file mode 100644
index 0000000..ad9d0fb
--- /dev/null
+++ b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.template.json
@@ -0,0 +1,36 @@
+{
+ "Parameters": {
+  "BootstrapVersion": {
+   "Type": "AWS::SSM::Parameter::Value<String>",
+   "Default": "/cdk-bootstrap/hnb659fds/version",
+   "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
+  }
+ },
+ "Rules": {
+  "CheckBootstrapVersion": {
+   "Assertions": [
+    {
+     "Assert": {
+      "Fn::Not": [
+       {
+        "Fn::Contains": [
+         [
+          "1",
+          "2",
+          "3",
+          "4",
+          "5"
+         ],
+         {
+          "Ref": "BootstrapVersion"
+         }
+        ]
+       }
+      ]
+     },
+     "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
+    }
+   ]
+  }
+ }
+}
\ No newline at end of file
diff --git a/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/cdk.out b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/cdk.out
new file mode 100644
index 0000000..1f0068d
--- /dev/null
+++ b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/cdk.out
@@ -0,0 +1,1 @@
+{"version":"36.0.0"}
\ No newline at end of file
diff --git a/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/integ.json b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/integ.json
new file mode 100644
index 0000000..6edd209
--- /dev/null
+++ b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/integ.json
@@ -0,0 +1,14 @@
+{
+  "enableLookups": true,
+  "version": "36.0.0",
+  "testCases": {
+    "RedshiftServerlessNamespaceWorkgroupTest/DefaultTest": {
+      "stacks": [
+        "RedshiftServerlessNamespaceWorkgroupStack"
+      ],
+      "stackUpdateWorkflow": false,
+      "assertionStack": "RedshiftServerlessNamespaceWorkgroupTest/DefaultTest/DeployAssert",
+      "assertionStackName": "RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB"
+    }
+  }
+}
\ No newline at end of file
diff --git a/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/manifest.json b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/manifest.json
new file mode 100644
index 0000000..c1a9f31
--- /dev/null
+++ b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/manifest.json
@@ -0,0 +1,365 @@
+{
+  "version": "36.0.0",
+  "artifacts": {
+    "RedshiftServerlessNamespaceWorkgroupStack.assets": {
+      "type": "cdk:asset-manifest",
+      "properties": {
+        "file": "RedshiftServerlessNamespaceWorkgroupStack.assets.json",
+        "requiresBootstrapStackVersion": 6,
+        "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+      }
+    },
+    "RedshiftServerlessNamespaceWorkgroupStack": {
+      "type": "aws:cloudformation:stack",
+      "environment": "aws://12345678/test-region",
+      "properties": {
+        "templateFile": "RedshiftServerlessNamespaceWorkgroupStack.template.json",
+        "terminationProtection": false,
+        "validateOnSynth": false,
+        "assumeRoleArn": "arn:${AWS::Partition}:iam::12345678:role/cdk-hnb659fds-deploy-role-12345678-test-region",
+        "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::12345678:role/cdk-hnb659fds-cfn-exec-role-12345678-test-region",
+        "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-12345678-test-region/4a8832c353aec7c387162f2dce3cb6290e83346da06b1ecbcc2f4b8a5794133d.json",
+        "requiresBootstrapStackVersion": 6,
+        "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
+        "additionalDependencies": [
+          "RedshiftServerlessNamespaceWorkgroupStack.assets"
+        ],
+        "lookupRole": {
+          "arn": "arn:${AWS::Partition}:iam::12345678:role/cdk-hnb659fds-lookup-role-12345678-test-region",
+          "requiresBootstrapStackVersion": 8,
+          "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+        }
+      },
+      "dependencies": [
+        "RedshiftServerlessNamespaceWorkgroupStack.assets"
+      ],
+      "metadata": {
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCB9E5F0B4"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/Subnet": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet1SubnetB4246D30"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/RouteTable": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet1RouteTableFEE4B781"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/RouteTableAssociation": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet1RouteTableAssociation0B0896DC"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/DefaultRoute": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet1DefaultRoute91CEF279"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/EIP": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet1EIP6AD938E8"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/NATGateway": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet1NATGatewayE0556630"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/Subnet": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet2Subnet74179F39"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/RouteTable": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet2RouteTable6F1A15F1"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/RouteTableAssociation": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet2RouteTableAssociation5A808732"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/DefaultRoute": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet2DefaultRouteB7481BBA"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/EIP": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet2EIP4947BC00"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/NATGateway": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet2NATGateway3C070193"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/Subnet": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet3Subnet631C5E25"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/RouteTable": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet3RouteTable98AE0E14"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/RouteTableAssociation": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet3RouteTableAssociation427FE0C6"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/DefaultRoute": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet3DefaultRouteA0D29D46"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/EIP": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet3EIPAD4BC883"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/NATGateway": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPublicSubnet3NATGatewayD3048F5C"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1/Subnet": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet1Subnet8BCA10E0"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1/RouteTable": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet1RouteTableBE8A6027"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1/RouteTableAssociation": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet1RouteTableAssociation347902D1"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1/DefaultRoute": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet1DefaultRouteAE1D6490"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2/Subnet": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet2SubnetCFCDAA7A"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2/RouteTable": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet2RouteTable0A19E10E"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2/RouteTableAssociation": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet2RouteTableAssociation0C73D413"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2/DefaultRoute": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet2DefaultRouteF4F5CFD2"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3/Subnet": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet3Subnet3EDCD457"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3/RouteTable": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet3RouteTable192186F8"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3/RouteTableAssociation": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet3RouteTableAssociationC28D144E"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3/DefaultRoute": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCPrivateSubnet3DefaultRoute27F311AE"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/IGW": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCIGWB7E252D3"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/VPCGW": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCVPCGW99B986DC"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/VPC/RestrictDefaultSecurityGroupCustomResource/Default": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "VPCRestrictDefaultSecurityGroupCustomResource59474679"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/DefaultRole/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "DefaultRoleEFEF8FA6"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/AnotherRole/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "AnotherRoleE13C44E8"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/Namespace/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "Namespace9B63B8C8"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/AddRole/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "AddRole65E43A1F"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/WorkGroup/SecurityGroup/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "WorkGroupSecurityGroup82E81D37"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/WorkGroup/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "WorkGroup9BE20B7A"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/endpointAddress": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "endpointAddress"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/BootstrapVersion": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "BootstrapVersion"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupStack/CheckBootstrapVersion": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "CheckBootstrapVersion"
+          }
+        ]
+      },
+      "displayName": "RedshiftServerlessNamespaceWorkgroupStack"
+    },
+    "RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.assets": {
+      "type": "cdk:asset-manifest",
+      "properties": {
+        "file": "RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.assets.json",
+        "requiresBootstrapStackVersion": 6,
+        "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+      }
+    },
+    "RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB": {
+      "type": "aws:cloudformation:stack",
+      "environment": "aws://unknown-account/unknown-region",
+      "properties": {
+        "templateFile": "RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.template.json",
+        "terminationProtection": false,
+        "validateOnSynth": false,
+        "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
+        "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
+        "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json",
+        "requiresBootstrapStackVersion": 6,
+        "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
+        "additionalDependencies": [
+          "RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.assets"
+        ],
+        "lookupRole": {
+          "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}",
+          "requiresBootstrapStackVersion": 8,
+          "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+        }
+      },
+      "dependencies": [
+        "RedshiftServerlessNamespaceWorkgroupTestDefaultTestDeployAssertE2D901CB.assets"
+      ],
+      "metadata": {
+        "/RedshiftServerlessNamespaceWorkgroupTest/DefaultTest/DeployAssert/BootstrapVersion": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "BootstrapVersion"
+          }
+        ],
+        "/RedshiftServerlessNamespaceWorkgroupTest/DefaultTest/DeployAssert/CheckBootstrapVersion": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "CheckBootstrapVersion"
+          }
+        ]
+      },
+      "displayName": "RedshiftServerlessNamespaceWorkgroupTest/DefaultTest/DeployAssert"
+    },
+    "Tree": {
+      "type": "cdk:tree",
+      "properties": {
+        "file": "tree.json"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/tree.json b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/tree.json
new file mode 100644
index 0000000..a789500
--- /dev/null
+++ b/test/aws-redshiftserverless/integ.redshift-serverless-namespace-workgroup.ts.snapshot/tree.json
@@ -0,0 +1,1348 @@
+{
+  "version": "tree-0.1",
+  "tree": {
+    "id": "App",
+    "path": "",
+    "children": {
+      "RedshiftServerlessNamespaceWorkgroupStack": {
+        "id": "RedshiftServerlessNamespaceWorkgroupStack",
+        "path": "RedshiftServerlessNamespaceWorkgroupStack",
+        "children": {
+          "VPC": {
+            "id": "VPC",
+            "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC",
+            "children": {
+              "Resource": {
+                "id": "Resource",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/Resource",
+                "attributes": {
+                  "aws:cdk:cloudformation:type": "AWS::EC2::VPC",
+                  "aws:cdk:cloudformation:props": {
+                    "cidrBlock": "10.0.0.0/16",
+                    "enableDnsHostnames": true,
+                    "enableDnsSupport": true,
+                    "instanceTenancy": "default",
+                    "tags": [
+                      {
+                        "key": "Name",
+                        "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC"
+                      }
+                    ]
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_ec2.CfnVPC",
+                  "version": "2.120.0"
+                }
+              },
+              "PublicSubnet1": {
+                "id": "PublicSubnet1",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1",
+                "children": {
+                  "Subnet": {
+                    "id": "Subnet",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/Subnet",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Subnet",
+                      "aws:cdk:cloudformation:props": {
+                        "availabilityZone": "test-region-1a",
+                        "cidrBlock": "10.0.0.0/19",
+                        "mapPublicIpOnLaunch": true,
+                        "tags": [
+                          {
+                            "key": "aws-cdk:subnet-name",
+                            "value": "Public"
+                          },
+                          {
+                            "key": "aws-cdk:subnet-type",
+                            "value": "Public"
+                          },
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "Acl": {
+                    "id": "Acl",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/Acl",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.Resource",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTable": {
+                    "id": "RouteTable",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/RouteTable",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable",
+                      "aws:cdk:cloudformation:props": {
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTableAssociation": {
+                    "id": "RouteTableAssociation",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/RouteTableAssociation",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation",
+                      "aws:cdk:cloudformation:props": {
+                        "routeTableId": {
+                          "Ref": "VPCPublicSubnet1RouteTableFEE4B781"
+                        },
+                        "subnetId": {
+                          "Ref": "VPCPublicSubnet1SubnetB4246D30"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "DefaultRoute": {
+                    "id": "DefaultRoute",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/DefaultRoute",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Route",
+                      "aws:cdk:cloudformation:props": {
+                        "destinationCidrBlock": "0.0.0.0/0",
+                        "gatewayId": {
+                          "Ref": "VPCIGWB7E252D3"
+                        },
+                        "routeTableId": {
+                          "Ref": "VPCPublicSubnet1RouteTableFEE4B781"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRoute",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "EIP": {
+                    "id": "EIP",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/EIP",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::EIP",
+                      "aws:cdk:cloudformation:props": {
+                        "domain": "vpc",
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1"
+                          }
+                        ]
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnEIP",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "NATGateway": {
+                    "id": "NATGateway",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1/NATGateway",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway",
+                      "aws:cdk:cloudformation:props": {
+                        "allocationId": {
+                          "Fn::GetAtt": [
+                            "VPCPublicSubnet1EIP6AD938E8",
+                            "AllocationId"
+                          ]
+                        },
+                        "subnetId": {
+                          "Ref": "VPCPublicSubnet1SubnetB4246D30"
+                        },
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet1"
+                          }
+                        ]
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway",
+                      "version": "2.120.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet",
+                  "version": "2.120.0"
+                }
+              },
+              "PublicSubnet2": {
+                "id": "PublicSubnet2",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2",
+                "children": {
+                  "Subnet": {
+                    "id": "Subnet",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/Subnet",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Subnet",
+                      "aws:cdk:cloudformation:props": {
+                        "availabilityZone": "test-region-1b",
+                        "cidrBlock": "10.0.32.0/19",
+                        "mapPublicIpOnLaunch": true,
+                        "tags": [
+                          {
+                            "key": "aws-cdk:subnet-name",
+                            "value": "Public"
+                          },
+                          {
+                            "key": "aws-cdk:subnet-type",
+                            "value": "Public"
+                          },
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "Acl": {
+                    "id": "Acl",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/Acl",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.Resource",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTable": {
+                    "id": "RouteTable",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/RouteTable",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable",
+                      "aws:cdk:cloudformation:props": {
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTableAssociation": {
+                    "id": "RouteTableAssociation",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/RouteTableAssociation",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation",
+                      "aws:cdk:cloudformation:props": {
+                        "routeTableId": {
+                          "Ref": "VPCPublicSubnet2RouteTable6F1A15F1"
+                        },
+                        "subnetId": {
+                          "Ref": "VPCPublicSubnet2Subnet74179F39"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "DefaultRoute": {
+                    "id": "DefaultRoute",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/DefaultRoute",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Route",
+                      "aws:cdk:cloudformation:props": {
+                        "destinationCidrBlock": "0.0.0.0/0",
+                        "gatewayId": {
+                          "Ref": "VPCIGWB7E252D3"
+                        },
+                        "routeTableId": {
+                          "Ref": "VPCPublicSubnet2RouteTable6F1A15F1"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRoute",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "EIP": {
+                    "id": "EIP",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/EIP",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::EIP",
+                      "aws:cdk:cloudformation:props": {
+                        "domain": "vpc",
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2"
+                          }
+                        ]
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnEIP",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "NATGateway": {
+                    "id": "NATGateway",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2/NATGateway",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway",
+                      "aws:cdk:cloudformation:props": {
+                        "allocationId": {
+                          "Fn::GetAtt": [
+                            "VPCPublicSubnet2EIP4947BC00",
+                            "AllocationId"
+                          ]
+                        },
+                        "subnetId": {
+                          "Ref": "VPCPublicSubnet2Subnet74179F39"
+                        },
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet2"
+                          }
+                        ]
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway",
+                      "version": "2.120.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet",
+                  "version": "2.120.0"
+                }
+              },
+              "PublicSubnet3": {
+                "id": "PublicSubnet3",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3",
+                "children": {
+                  "Subnet": {
+                    "id": "Subnet",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/Subnet",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Subnet",
+                      "aws:cdk:cloudformation:props": {
+                        "availabilityZone": "test-region-1c",
+                        "cidrBlock": "10.0.64.0/19",
+                        "mapPublicIpOnLaunch": true,
+                        "tags": [
+                          {
+                            "key": "aws-cdk:subnet-name",
+                            "value": "Public"
+                          },
+                          {
+                            "key": "aws-cdk:subnet-type",
+                            "value": "Public"
+                          },
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "Acl": {
+                    "id": "Acl",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/Acl",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.Resource",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTable": {
+                    "id": "RouteTable",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/RouteTable",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable",
+                      "aws:cdk:cloudformation:props": {
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTableAssociation": {
+                    "id": "RouteTableAssociation",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/RouteTableAssociation",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation",
+                      "aws:cdk:cloudformation:props": {
+                        "routeTableId": {
+                          "Ref": "VPCPublicSubnet3RouteTable98AE0E14"
+                        },
+                        "subnetId": {
+                          "Ref": "VPCPublicSubnet3Subnet631C5E25"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "DefaultRoute": {
+                    "id": "DefaultRoute",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/DefaultRoute",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Route",
+                      "aws:cdk:cloudformation:props": {
+                        "destinationCidrBlock": "0.0.0.0/0",
+                        "gatewayId": {
+                          "Ref": "VPCIGWB7E252D3"
+                        },
+                        "routeTableId": {
+                          "Ref": "VPCPublicSubnet3RouteTable98AE0E14"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRoute",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "EIP": {
+                    "id": "EIP",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/EIP",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::EIP",
+                      "aws:cdk:cloudformation:props": {
+                        "domain": "vpc",
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3"
+                          }
+                        ]
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnEIP",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "NATGateway": {
+                    "id": "NATGateway",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3/NATGateway",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway",
+                      "aws:cdk:cloudformation:props": {
+                        "allocationId": {
+                          "Fn::GetAtt": [
+                            "VPCPublicSubnet3EIPAD4BC883",
+                            "AllocationId"
+                          ]
+                        },
+                        "subnetId": {
+                          "Ref": "VPCPublicSubnet3Subnet631C5E25"
+                        },
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PublicSubnet3"
+                          }
+                        ]
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway",
+                      "version": "2.120.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet",
+                  "version": "2.120.0"
+                }
+              },
+              "PrivateSubnet1": {
+                "id": "PrivateSubnet1",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1",
+                "children": {
+                  "Subnet": {
+                    "id": "Subnet",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1/Subnet",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Subnet",
+                      "aws:cdk:cloudformation:props": {
+                        "availabilityZone": "test-region-1a",
+                        "cidrBlock": "10.0.96.0/19",
+                        "mapPublicIpOnLaunch": false,
+                        "tags": [
+                          {
+                            "key": "aws-cdk:subnet-name",
+                            "value": "Private"
+                          },
+                          {
+                            "key": "aws-cdk:subnet-type",
+                            "value": "Private"
+                          },
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "Acl": {
+                    "id": "Acl",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1/Acl",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.Resource",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTable": {
+                    "id": "RouteTable",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1/RouteTable",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable",
+                      "aws:cdk:cloudformation:props": {
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTableAssociation": {
+                    "id": "RouteTableAssociation",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1/RouteTableAssociation",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation",
+                      "aws:cdk:cloudformation:props": {
+                        "routeTableId": {
+                          "Ref": "VPCPrivateSubnet1RouteTableBE8A6027"
+                        },
+                        "subnetId": {
+                          "Ref": "VPCPrivateSubnet1Subnet8BCA10E0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "DefaultRoute": {
+                    "id": "DefaultRoute",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet1/DefaultRoute",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Route",
+                      "aws:cdk:cloudformation:props": {
+                        "destinationCidrBlock": "0.0.0.0/0",
+                        "natGatewayId": {
+                          "Ref": "VPCPublicSubnet1NATGatewayE0556630"
+                        },
+                        "routeTableId": {
+                          "Ref": "VPCPrivateSubnet1RouteTableBE8A6027"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRoute",
+                      "version": "2.120.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_ec2.PrivateSubnet",
+                  "version": "2.120.0"
+                }
+              },
+              "PrivateSubnet2": {
+                "id": "PrivateSubnet2",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2",
+                "children": {
+                  "Subnet": {
+                    "id": "Subnet",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2/Subnet",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Subnet",
+                      "aws:cdk:cloudformation:props": {
+                        "availabilityZone": "test-region-1b",
+                        "cidrBlock": "10.0.128.0/19",
+                        "mapPublicIpOnLaunch": false,
+                        "tags": [
+                          {
+                            "key": "aws-cdk:subnet-name",
+                            "value": "Private"
+                          },
+                          {
+                            "key": "aws-cdk:subnet-type",
+                            "value": "Private"
+                          },
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "Acl": {
+                    "id": "Acl",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2/Acl",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.Resource",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTable": {
+                    "id": "RouteTable",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2/RouteTable",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable",
+                      "aws:cdk:cloudformation:props": {
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTableAssociation": {
+                    "id": "RouteTableAssociation",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2/RouteTableAssociation",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation",
+                      "aws:cdk:cloudformation:props": {
+                        "routeTableId": {
+                          "Ref": "VPCPrivateSubnet2RouteTable0A19E10E"
+                        },
+                        "subnetId": {
+                          "Ref": "VPCPrivateSubnet2SubnetCFCDAA7A"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "DefaultRoute": {
+                    "id": "DefaultRoute",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet2/DefaultRoute",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Route",
+                      "aws:cdk:cloudformation:props": {
+                        "destinationCidrBlock": "0.0.0.0/0",
+                        "natGatewayId": {
+                          "Ref": "VPCPublicSubnet2NATGateway3C070193"
+                        },
+                        "routeTableId": {
+                          "Ref": "VPCPrivateSubnet2RouteTable0A19E10E"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRoute",
+                      "version": "2.120.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_ec2.PrivateSubnet",
+                  "version": "2.120.0"
+                }
+              },
+              "PrivateSubnet3": {
+                "id": "PrivateSubnet3",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3",
+                "children": {
+                  "Subnet": {
+                    "id": "Subnet",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3/Subnet",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Subnet",
+                      "aws:cdk:cloudformation:props": {
+                        "availabilityZone": "test-region-1c",
+                        "cidrBlock": "10.0.160.0/19",
+                        "mapPublicIpOnLaunch": false,
+                        "tags": [
+                          {
+                            "key": "aws-cdk:subnet-name",
+                            "value": "Private"
+                          },
+                          {
+                            "key": "aws-cdk:subnet-type",
+                            "value": "Private"
+                          },
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "Acl": {
+                    "id": "Acl",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3/Acl",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.Resource",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTable": {
+                    "id": "RouteTable",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3/RouteTable",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable",
+                      "aws:cdk:cloudformation:props": {
+                        "tags": [
+                          {
+                            "key": "Name",
+                            "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "RouteTableAssociation": {
+                    "id": "RouteTableAssociation",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3/RouteTableAssociation",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation",
+                      "aws:cdk:cloudformation:props": {
+                        "routeTableId": {
+                          "Ref": "VPCPrivateSubnet3RouteTable192186F8"
+                        },
+                        "subnetId": {
+                          "Ref": "VPCPrivateSubnet3Subnet3EDCD457"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "DefaultRoute": {
+                    "id": "DefaultRoute",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/PrivateSubnet3/DefaultRoute",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::Route",
+                      "aws:cdk:cloudformation:props": {
+                        "destinationCidrBlock": "0.0.0.0/0",
+                        "natGatewayId": {
+                          "Ref": "VPCPublicSubnet3NATGatewayD3048F5C"
+                        },
+                        "routeTableId": {
+                          "Ref": "VPCPrivateSubnet3RouteTable192186F8"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnRoute",
+                      "version": "2.120.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_ec2.PrivateSubnet",
+                  "version": "2.120.0"
+                }
+              },
+              "IGW": {
+                "id": "IGW",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/IGW",
+                "attributes": {
+                  "aws:cdk:cloudformation:type": "AWS::EC2::InternetGateway",
+                  "aws:cdk:cloudformation:props": {
+                    "tags": [
+                      {
+                        "key": "Name",
+                        "value": "RedshiftServerlessNamespaceWorkgroupStack/VPC"
+                      }
+                    ]
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_ec2.CfnInternetGateway",
+                  "version": "2.120.0"
+                }
+              },
+              "VPCGW": {
+                "id": "VPCGW",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/VPCGW",
+                "attributes": {
+                  "aws:cdk:cloudformation:type": "AWS::EC2::VPCGatewayAttachment",
+                  "aws:cdk:cloudformation:props": {
+                    "internetGatewayId": {
+                      "Ref": "VPCIGWB7E252D3"
+                    },
+                    "vpcId": {
+                      "Ref": "VPCB9E5F0B4"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_ec2.CfnVPCGatewayAttachment",
+                  "version": "2.120.0"
+                }
+              },
+              "RestrictDefaultSecurityGroupCustomResource": {
+                "id": "RestrictDefaultSecurityGroupCustomResource",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/RestrictDefaultSecurityGroupCustomResource",
+                "children": {
+                  "Default": {
+                    "id": "Default",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/VPC/RestrictDefaultSecurityGroupCustomResource/Default",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.CfnResource",
+                      "version": "2.120.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.CustomResource",
+                  "version": "2.120.0"
+                }
+              }
+            },
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.aws_ec2.Vpc",
+              "version": "2.120.0"
+            }
+          },
+          "Custom::VpcRestrictDefaultSGCustomResourceProvider": {
+            "id": "Custom::VpcRestrictDefaultSGCustomResourceProvider",
+            "path": "RedshiftServerlessNamespaceWorkgroupStack/Custom::VpcRestrictDefaultSGCustomResourceProvider",
+            "children": {
+              "Staging": {
+                "id": "Staging",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/Custom::VpcRestrictDefaultSGCustomResourceProvider/Staging",
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.AssetStaging",
+                  "version": "2.120.0"
+                }
+              },
+              "Role": {
+                "id": "Role",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role",
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.CfnResource",
+                  "version": "2.120.0"
+                }
+              },
+              "Handler": {
+                "id": "Handler",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler",
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.CfnResource",
+                  "version": "2.120.0"
+                }
+              }
+            },
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.CustomResourceProviderBase",
+              "version": "2.120.0"
+            }
+          },
+          "DefaultRole": {
+            "id": "DefaultRole",
+            "path": "RedshiftServerlessNamespaceWorkgroupStack/DefaultRole",
+            "children": {
+              "ImportDefaultRole": {
+                "id": "ImportDefaultRole",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/DefaultRole/ImportDefaultRole",
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.Resource",
+                  "version": "2.120.0"
+                }
+              },
+              "Resource": {
+                "id": "Resource",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/DefaultRole/Resource",
+                "attributes": {
+                  "aws:cdk:cloudformation:type": "AWS::IAM::Role",
+                  "aws:cdk:cloudformation:props": {
+                    "assumeRolePolicyDocument": {
+                      "Statement": [
+                        {
+                          "Action": "sts:AssumeRole",
+                          "Effect": "Allow",
+                          "Principal": {
+                            "Service": "redshift.amazonaws.com"
+                          }
+                        }
+                      ],
+                      "Version": "2012-10-17"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_iam.CfnRole",
+                  "version": "2.120.0"
+                }
+              }
+            },
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.aws_iam.Role",
+              "version": "2.120.0"
+            }
+          },
+          "AnotherRole": {
+            "id": "AnotherRole",
+            "path": "RedshiftServerlessNamespaceWorkgroupStack/AnotherRole",
+            "children": {
+              "ImportAnotherRole": {
+                "id": "ImportAnotherRole",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/AnotherRole/ImportAnotherRole",
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.Resource",
+                  "version": "2.120.0"
+                }
+              },
+              "Resource": {
+                "id": "Resource",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/AnotherRole/Resource",
+                "attributes": {
+                  "aws:cdk:cloudformation:type": "AWS::IAM::Role",
+                  "aws:cdk:cloudformation:props": {
+                    "assumeRolePolicyDocument": {
+                      "Statement": [
+                        {
+                          "Action": "sts:AssumeRole",
+                          "Effect": "Allow",
+                          "Principal": {
+                            "Service": "redshift.amazonaws.com"
+                          }
+                        }
+                      ],
+                      "Version": "2012-10-17"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_iam.CfnRole",
+                  "version": "2.120.0"
+                }
+              }
+            },
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.aws_iam.Role",
+              "version": "2.120.0"
+            }
+          },
+          "Namespace": {
+            "id": "Namespace",
+            "path": "RedshiftServerlessNamespaceWorkgroupStack/Namespace",
+            "children": {
+              "Resource": {
+                "id": "Resource",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/Namespace/Resource",
+                "attributes": {
+                  "aws:cdk:cloudformation:type": "AWS::RedshiftServerless::Namespace",
+                  "aws:cdk:cloudformation:props": {
+                    "adminUsername": "adminuser",
+                    "adminUserPassword": "adminUserPassword123",
+                    "dbName": "mydatabase",
+                    "defaultIamRoleArn": {
+                      "Fn::GetAtt": [
+                        "DefaultRoleEFEF8FA6",
+                        "Arn"
+                      ]
+                    },
+                    "iamRoles": [
+                      {
+                        "Fn::GetAtt": [
+                          "DefaultRoleEFEF8FA6",
+                          "Arn"
+                        ]
+                      },
+                      {
+                        "Fn::GetAtt": [
+                          "AnotherRoleE13C44E8",
+                          "Arn"
+                        ]
+                      },
+                      {
+                        "Fn::GetAtt": [
+                          "AddRole65E43A1F",
+                          "Arn"
+                        ]
+                      }
+                    ],
+                    "logExports": [
+                      "userlog",
+                      "connectionlog",
+                      "useractivitylog"
+                    ],
+                    "namespaceName": "redshiftserverlessnamespaceworkgroupstacknamespace9213ae95"
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_redshiftserverless.CfnNamespace",
+                  "version": "2.120.0"
+                }
+              }
+            },
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.Resource",
+              "version": "2.120.0"
+            }
+          },
+          "AddRole": {
+            "id": "AddRole",
+            "path": "RedshiftServerlessNamespaceWorkgroupStack/AddRole",
+            "children": {
+              "ImportAddRole": {
+                "id": "ImportAddRole",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/AddRole/ImportAddRole",
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.Resource",
+                  "version": "2.120.0"
+                }
+              },
+              "Resource": {
+                "id": "Resource",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/AddRole/Resource",
+                "attributes": {
+                  "aws:cdk:cloudformation:type": "AWS::IAM::Role",
+                  "aws:cdk:cloudformation:props": {
+                    "assumeRolePolicyDocument": {
+                      "Statement": [
+                        {
+                          "Action": "sts:AssumeRole",
+                          "Effect": "Allow",
+                          "Principal": {
+                            "Service": "redshift.amazonaws.com"
+                          }
+                        }
+                      ],
+                      "Version": "2012-10-17"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_iam.CfnRole",
+                  "version": "2.120.0"
+                }
+              }
+            },
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.aws_iam.Role",
+              "version": "2.120.0"
+            }
+          },
+          "WorkGroup": {
+            "id": "WorkGroup",
+            "path": "RedshiftServerlessNamespaceWorkgroupStack/WorkGroup",
+            "children": {
+              "SecurityGroup": {
+                "id": "SecurityGroup",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/WorkGroup/SecurityGroup",
+                "children": {
+                  "Resource": {
+                    "id": "Resource",
+                    "path": "RedshiftServerlessNamespaceWorkgroupStack/WorkGroup/SecurityGroup/Resource",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroup",
+                      "aws:cdk:cloudformation:props": {
+                        "groupDescription": "Automatic generated security group for Redshift Serverless Security Group",
+                        "securityGroupEgress": [
+                          {
+                            "cidrIp": "0.0.0.0/0",
+                            "description": "Allow all outbound traffic by default",
+                            "ipProtocol": "-1"
+                          }
+                        ],
+                        "vpcId": {
+                          "Ref": "VPCB9E5F0B4"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroup",
+                      "version": "2.120.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_ec2.SecurityGroup",
+                  "version": "2.120.0"
+                }
+              },
+              "Resource": {
+                "id": "Resource",
+                "path": "RedshiftServerlessNamespaceWorkgroupStack/WorkGroup/Resource",
+                "attributes": {
+                  "aws:cdk:cloudformation:type": "AWS::RedshiftServerless::Workgroup",
+                  "aws:cdk:cloudformation:props": {
+                    "baseCapacity": 8,
+                    "configParameters": [
+                      {
+                        "parameterKey": "datestyle",
+                        "parameterValue": "ISO, MDY"
+                      },
+                      {
+                        "parameterKey": "enable_user_activity_logging",
+                        "parameterValue": "true"
+                      },
+                      {
+                        "parameterKey": "query_group",
+                        "parameterValue": "default"
+                      },
+                      {
+                        "parameterKey": "require_ssl",
+                        "parameterValue": "true"
+                      },
+                      {
+                        "parameterKey": "search_path",
+                        "parameterValue": "$user, public"
+                      },
+                      {
+                        "parameterKey": "max_query_execution_time",
+                        "parameterValue": "14440"
+                      }
+                    ],
+                    "enhancedVpcRouting": true,
+                    "namespaceName": {
+                      "Fn::GetAtt": [
+                        "Namespace9B63B8C8",
+                        "Namespace.NamespaceName"
+                      ]
+                    },
+                    "port": 5432,
+                    "publiclyAccessible": true,
+                    "securityGroupIds": [
+                      {
+                        "Fn::GetAtt": [
+                          "WorkGroupSecurityGroup82E81D37",
+                          "GroupId"
+                        ]
+                      }
+                    ],
+                    "subnetIds": [
+                      {
+                        "Ref": "VPCPrivateSubnet1Subnet8BCA10E0"
+                      },
+                      {
+                        "Ref": "VPCPrivateSubnet2SubnetCFCDAA7A"
+                      },
+                      {
+                        "Ref": "VPCPrivateSubnet3Subnet3EDCD457"
+                      }
+                    ],
+                    "workgroupName": "redshiftserverlessnamespaceworkgroupstackworkgroup276abff0"
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_redshiftserverless.CfnWorkgroup",
+                  "version": "2.120.0"
+                }
+              }
+            },
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.Resource",
+              "version": "2.120.0"
+            }
+          },
+          "endpointAddress": {
+            "id": "endpointAddress",
+            "path": "RedshiftServerlessNamespaceWorkgroupStack/endpointAddress",
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.CfnOutput",
+              "version": "2.120.0"
+            }
+          },
+          "BootstrapVersion": {
+            "id": "BootstrapVersion",
+            "path": "RedshiftServerlessNamespaceWorkgroupStack/BootstrapVersion",
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.CfnParameter",
+              "version": "2.120.0"
+            }
+          },
+          "CheckBootstrapVersion": {
+            "id": "CheckBootstrapVersion",
+            "path": "RedshiftServerlessNamespaceWorkgroupStack/CheckBootstrapVersion",
+            "constructInfo": {
+              "fqn": "aws-cdk-lib.CfnRule",
+              "version": "2.120.0"
+            }
+          }
+        },
+        "constructInfo": {
+          "fqn": "aws-cdk-lib.Stack",
+          "version": "2.120.0"
+        }
+      },
+      "RedshiftServerlessNamespaceWorkgroupTest": {
+        "id": "RedshiftServerlessNamespaceWorkgroupTest",
+        "path": "RedshiftServerlessNamespaceWorkgroupTest",
+        "children": {
+          "DefaultTest": {
+            "id": "DefaultTest",
+            "path": "RedshiftServerlessNamespaceWorkgroupTest/DefaultTest",
+            "children": {
+              "Default": {
+                "id": "Default",
+                "path": "RedshiftServerlessNamespaceWorkgroupTest/DefaultTest/Default",
+                "constructInfo": {
+                  "fqn": "constructs.Construct",
+                  "version": "10.3.0"
+                }
+              },
+              "DeployAssert": {
+                "id": "DeployAssert",
+                "path": "RedshiftServerlessNamespaceWorkgroupTest/DefaultTest/DeployAssert",
+                "children": {
+                  "BootstrapVersion": {
+                    "id": "BootstrapVersion",
+                    "path": "RedshiftServerlessNamespaceWorkgroupTest/DefaultTest/DeployAssert/BootstrapVersion",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.CfnParameter",
+                      "version": "2.120.0"
+                    }
+                  },
+                  "CheckBootstrapVersion": {
+                    "id": "CheckBootstrapVersion",
+                    "path": "RedshiftServerlessNamespaceWorkgroupTest/DefaultTest/DeployAssert/CheckBootstrapVersion",
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.CfnRule",
+                      "version": "2.120.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.Stack",
+                  "version": "2.120.0"
+                }
+              }
+            },
+            "constructInfo": {
+              "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase",
+              "version": "2.120.0-alpha.0"
+            }
+          }
+        },
+        "constructInfo": {
+          "fqn": "@aws-cdk/integ-tests-alpha.IntegTest",
+          "version": "2.120.0-alpha.0"
+        }
+      },
+      "Tree": {
+        "id": "Tree",
+        "path": "Tree",
+        "constructInfo": {
+          "fqn": "constructs.Construct",
+          "version": "10.3.0"
+        }
+      }
+    },
+    "constructInfo": {
+      "fqn": "aws-cdk-lib.App",
+      "version": "2.120.0"
+    }
+  }
+}
\ No newline at end of file
diff --git a/test/aws-redshiftserverless/namespace.test.ts b/test/aws-redshiftserverless/namespace.test.ts
new file mode 100644
index 0000000..21727a9
--- /dev/null
+++ b/test/aws-redshiftserverless/namespace.test.ts
@@ -0,0 +1,249 @@
+import { App, SecretValue, Stack } from 'aws-cdk-lib';
+import { Match, Template } from 'aws-cdk-lib/assertions';
+import { Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam';
+import { Key } from 'aws-cdk-lib/aws-kms';
+import { INamespace, LogExport, Namespace } from '../../src/aws-redshiftserverless';
+
+describe('Redshift Serverless Namespace', () => {
+  let app: App;
+  let stack: Stack;
+
+  beforeEach(() => {
+    app = new App();
+    stack = new Stack(app, 'TestStack');
+  });
+
+  test('Create namsepace with minimal properties ', () => {
+    new Namespace(stack, 'Namespace', {});
+
+    Template.fromStack(stack).hasResourceProperties('AWS::RedshiftServerless::Namespace', {
+      NamespaceName: Match.anyValue(),
+    });
+  });
+
+  test('Create namsepace with maximum properties ', () => {
+    const defaultIamRole = new Role(stack, 'DefaultRole', {
+      assumedBy: new ServicePrincipal('redshift.amazonaws.com'),
+    });
+
+    const anotherRole = new Role(stack, 'AnotherRole', {
+      assumedBy: new ServicePrincipal('redshift.amazonaws.com'),
+    });
+
+    const kmsKey = new Key(stack, 'CMK');
+
+    new Namespace(stack, 'Namespace', {
+      adminUsername: 'my-admin',
+      adminUserPassword: SecretValue.unsafePlainText('My-password-123!'),
+      dbName: 'my-database',
+      defaultIamRole,
+      finalSnapshotName: 'my-final-snapshot',
+      finalSnapshotRetentionPeriod: 7,
+      iamRoles: [defaultIamRole, anotherRole],
+      logExports: [LogExport.USER_LOG, LogExport.CONNECTION_LOG, LogExport.USER_ACTIVITY_LOG],
+      kmsKey,
+      namespaceName: 'my-namespace',
+    });
+
+    Template.fromStack(stack).hasResourceProperties('AWS::RedshiftServerless::Namespace', {
+      AdminUsername: 'my-admin',
+      AdminUserPassword: 'My-password-123!',
+      DbName: 'my-database',
+      DefaultIamRoleArn: stack.resolve(defaultIamRole.roleArn),
+      FinalSnapshotName: 'my-final-snapshot',
+      FinalSnapshotRetentionPeriod: 7,
+      IamRoles: [stack.resolve(defaultIamRole.roleArn), stack.resolve(anotherRole.roleArn)],
+      KmsKeyId: stack.resolve(kmsKey.keyId),
+      LogExports: ['userlog', 'connectionlog', 'useractivitylog'],
+      NamespaceName: 'my-namespace',
+    });
+  });
+
+  describe('test import method', () => {
+    let existingNamespace: INamespace;
+
+    beforeEach(() => {
+      stack = new Stack();
+      existingNamespace = Namespace.fromNamespaceAttributes(stack, 'ImportedNamespace', {
+        namespaceId: 'my-namespace-id',
+        namespaceName: 'my-namespace-name',
+      });
+    });
+
+    test('should correctly set namespaceId', () => {
+      expect(existingNamespace.namespaceId).toEqual('my-namespace-id');
+    });
+
+    test('should correctly format namespaceArn', () => {
+      expect(existingNamespace.namespaceArn).toEqual(
+        Stack.of(stack).formatArn({
+          resource: 'redshift-serverless',
+          service: 'namespace',
+          resourceName: 'my-namespace-id',
+        }),
+      );
+    });
+  });
+
+  describe('validateAdmin test', () => {
+    test('throws when adminUsername is set without adminUserPassword', () => {
+      expect(() => {
+        new Namespace(stack, 'Namespace', {
+          adminUsername: 'my-admin',
+        });
+      }).toThrow('You must specify both `adminUsername` and `adminUserPassword`, or neither.');
+    });
+
+    test('throws when adminUserPassword is set without adminUsername', () => {
+      expect(() => {
+        new Namespace(stack, 'Namespace', {
+          adminUserPassword: SecretValue.unsafePlainText('My-password-123!'),
+        });
+      }).toThrow('You must specify both `adminUsername` and `adminUserPassword`, or neither.');
+    });
+
+    test.each(['123abc', 'invalid$name'])('throws when adminUsername is invalid, got %s', adminUsername => {
+      expect(() => {
+        new Namespace(stack, 'Namespace', {
+          adminUsername,
+          adminUserPassword: SecretValue.unsafePlainText('My-password-123!'),
+        });
+      }).toThrow(
+        `\`adminUsername\` must start with a letter and can only contain letters, numbers, and the special characters: _, +, ., @, -, got: ${adminUsername}.`,
+      );
+    });
+  });
+
+  describe('validateDbName test', () => {
+    test.each(['123abc', 'invalid$name'])('throws when dbName is invalid, got %s', dbName => {
+      expect(() => {
+        new Namespace(stack, 'Namespace', {
+          dbName,
+        });
+      }).toThrow(
+        `\`dbName\` must start with a letter, can only contain letters, numbers, and the special characters: _, +, ., @, -, got: ${dbName}.`,
+      );
+    });
+
+    test('throws when dbName length is invalid, got %s', () => {
+      expect(() => {
+        new Namespace(stack, 'Namespace', {
+          dbName: 'a'.repeat(128),
+        });
+      }).toThrow('`dbName` must not exceed 127 characters, got: 128 characters.');
+    });
+  });
+
+  describe('validateFinalSnapshot test', () => {
+    test.each(['123abc', 'UpperName', 'invalid$name', 'end-with-a-hyphen-', 'two--consecutive-hyphens'])(
+      'throws when finalSnapshotName is invalid, got %s',
+      finalSnapshotName => {
+        expect(() => {
+          new Namespace(stack, 'Namespace', {
+            finalSnapshotName,
+          });
+        }).toThrow(
+          `\`finalSnapshotName\` must consist only of lowercase alphanumeric characters or hyphens, with the first character as a letter, and it can't end with a hyphen or contain two consecutive hyphens, got: ${finalSnapshotName}.`,
+        );
+      },
+    );
+
+    test('throws when finalSnapshotName length is invalid, got %s', () => {
+      expect(() => {
+        new Namespace(stack, 'Namespace', {
+          finalSnapshotName: 'a'.repeat(256),
+        });
+      }).toThrow('`finalSnapshotName` must not exceed 255 characters, got: 256 characters.');
+    });
+
+    test('throws when finalSnapshotRetentionPeriod is set without finalSnapshotName', () => {
+      expect(() => {
+        new Namespace(stack, 'Namespace', {
+          finalSnapshotRetentionPeriod: 10,
+        });
+      }).toThrow('You must set `finalSnapshotName` when you specify `finalSnapshotRetentionPeriod`.');
+    });
+
+    test.each([0, 3654])(
+      'throws when finalSnapshotRetentionPeriod is invalid, got %d',
+      finalSnapshotRetentionPeriod => {
+        expect(() => {
+          new Namespace(stack, 'Namespace', {
+            finalSnapshotName: 'my-final-snapshot',
+            finalSnapshotRetentionPeriod,
+          });
+        }).toThrow(
+          `\`finalSnapshotRetentionPeriod\` must be between 1 and 3653, got: ${finalSnapshotRetentionPeriod}.`,
+        );
+      },
+    );
+  });
+
+  describe('validateDefaultIamRole test', () => {
+    test('throws when defaultIamRole role is not included in iamRoles', () => {
+      expect(() => {
+        const defaultIamRole = new Role(stack, 'DefaultRole', {
+          assumedBy: new ServicePrincipal('redshift.amazonaws.com'),
+        });
+
+        const anotherRole = new Role(stack, 'AnotherRole', {
+          assumedBy: new ServicePrincipal('redshift.amazonaws.com'),
+        });
+
+        new Namespace(stack, 'Namespace', {
+          defaultIamRole,
+          iamRoles: [anotherRole],
+        });
+      }).toThrow('`defaultIamRole` must be included in `iamRoles`.');
+    });
+  });
+
+  describe('validateNamespaceName test', () => {
+    test.each(['UpperName', 'invalid$name'])('throws when namespaceName is invalid , got %s', namespaceName => {
+      expect(() => {
+        new Namespace(stack, 'Namespace', {
+          namespaceName,
+        });
+      }).toThrow(
+        `\`namespaceName\` must consist only of lowercase alphanumeric characters or hyphens, got: ${namespaceName}.`,
+      );
+    });
+
+    test.each(['a'.repeat(2), 'a'.repeat(65)])('throws when namespaceName length is invalid, got %s', namespaceName => {
+      expect(() => {
+        new Namespace(stack, 'Namespace', {
+          namespaceName,
+        });
+      }).toThrow(`\`namespaceName\` must be between 3 and 64 characters, got: ${namespaceName.length} characters.`);
+    });
+  });
+
+  describe('test addIamRole method', () => {
+    test('add IAM Role after creation', () => {
+      const namespace = new Namespace(stack, 'Namespace', {});
+
+      const addRole = new Role(stack, 'AddRole', {
+        assumedBy: new ServicePrincipal('redshift.amazonaws.com'),
+      });
+
+      namespace.addIamRole(addRole);
+
+      Template.fromStack(stack).hasResourceProperties('AWS::RedshiftServerless::Namespace', {
+        IamRoles: [stack.resolve(addRole.roleArn)],
+      });
+    });
+
+    test('throws when an adding IAM role is already attached to the namespace', () => {
+      const addRole = new Role(stack, 'AddRole', {
+        assumedBy: new ServicePrincipal('redshift.amazonaws.com'),
+      });
+
+      expect(() => {
+        const namespace = new Namespace(stack, 'Namespace', {
+          iamRoles: [addRole],
+        });
+        namespace.addIamRole(addRole);
+      }).toThrow(`An adding IAM Role is already attached to the namespace, ARN: ${addRole.roleArn}.`);
+    });
+  });
+});
diff --git a/test/aws-redshiftserverless/workgroup.test.ts b/test/aws-redshiftserverless/workgroup.test.ts
new file mode 100644
index 0000000..9410b34
--- /dev/null
+++ b/test/aws-redshiftserverless/workgroup.test.ts
@@ -0,0 +1,229 @@
+import { App, Stack, aws_ec2 } from 'aws-cdk-lib';
+import { Template } from 'aws-cdk-lib/assertions';
+import { IWorkgroup, Namespace, Workgroup } from '../../src/aws-redshiftserverless';
+
+describe('Redshift Serverless Workgroup', () => {
+  let app: App;
+  let stack: Stack;
+  let vpc: aws_ec2.Vpc;
+
+  beforeEach(() => {
+    app = new App();
+    stack = new Stack(app, 'TestStack', {
+      env: { account: '012345678901', region: 'us-east-1' },
+    });
+    vpc = new aws_ec2.Vpc(stack, 'VPC');
+  });
+
+  test('Create workgroup with minimal properties ', () => {
+    new Workgroup(stack, 'Namespace', {
+      vpc,
+    });
+
+    Template.fromStack(stack).hasResourceProperties('AWS::RedshiftServerless::Workgroup', {
+      SecurityGroupIds: [
+        {
+          'Fn::GetAtt': ['NamespaceSecurityGroup051B6159', 'GroupId'],
+        },
+      ],
+      SubnetIds: [
+        { Ref: 'VPCPrivateSubnet1Subnet8BCA10E0' },
+        { Ref: 'VPCPrivateSubnet2SubnetCFCDAA7A' },
+        { Ref: 'VPCPrivateSubnet3Subnet3EDCD457' },
+      ],
+    });
+  });
+
+  test('Create workgroup with maximum properties ', () => {
+    const namespace = new Namespace(stack, 'Namespace', {});
+    const securityGroup = aws_ec2.SecurityGroup.fromSecurityGroupId(stack, 'SG', 'sg-123456789');
+
+    new Workgroup(stack, 'Workgroup', {
+      baseCapacity: 8,
+      configParameters: {
+        datestyle: 'ISO, MDY',
+        enable_user_activity_logging: 'true',
+        query_group: 'default',
+        require_ssl: 'true',
+        search_path: '$user, public',
+        max_query_execution_time: '14440',
+      },
+      enhancedVpcRouting: true,
+      namespace,
+      port: 5440,
+      publiclyAccessible: true,
+      securityGroups: [securityGroup],
+      vpc,
+      vpcSubnets: {
+        subnetType: aws_ec2.SubnetType.PRIVATE_WITH_EGRESS,
+      },
+      workgroupName: 'my-workgroup',
+    });
+
+    Template.fromStack(stack).hasResourceProperties('AWS::RedshiftServerless::Workgroup', {
+      WorkgroupName: 'my-workgroup',
+      NamespaceName: stack.resolve(namespace.namespaceName),
+      BaseCapacity: 8,
+      ConfigParameters: [
+        { ParameterKey: 'datestyle', ParameterValue: 'ISO, MDY' },
+        { ParameterKey: 'enable_user_activity_logging', ParameterValue: 'true' },
+        { ParameterKey: 'query_group', ParameterValue: 'default' },
+        { ParameterKey: 'require_ssl', ParameterValue: 'true' },
+        { ParameterKey: 'search_path', ParameterValue: '$user, public' },
+        { ParameterKey: 'max_query_execution_time', ParameterValue: '14440' },
+      ],
+      EnhancedVpcRouting: true,
+      Port: 5440,
+      PubliclyAccessible: true,
+      SecurityGroupIds: [stack.resolve(securityGroup.securityGroupId)],
+      SubnetIds: [
+        { Ref: 'VPCPrivateSubnet1Subnet8BCA10E0' },
+        { Ref: 'VPCPrivateSubnet2SubnetCFCDAA7A' },
+        { Ref: 'VPCPrivateSubnet3Subnet3EDCD457' },
+      ],
+    });
+  });
+
+  describe('import method', () => {
+    let securityGroup: aws_ec2.ISecurityGroup;
+    let importedWorkgroup: IWorkgroup;
+
+    beforeEach(() => {
+      stack = new Stack();
+      securityGroup = aws_ec2.SecurityGroup.fromSecurityGroupId(stack, 'SG', 'sg-123456789');
+      importedWorkgroup = Workgroup.fromWorkgroupAttributes(stack, 'ImportedWorkgroup', {
+        workgroupName: 'my-workgroup',
+        workgroupId: 'my-workgroup-id',
+        endpointAddress: 'my-workgroup.endpoint.com',
+        port: 5439,
+        securityGroups: [securityGroup],
+      });
+    });
+
+    test('should correctly set workgroupName', () => {
+      expect(importedWorkgroup.workgroupName).toEqual('my-workgroup');
+    });
+
+    test('should correctly set workgroupId', () => {
+      expect(importedWorkgroup.workgroupId).toEqual('my-workgroup-id');
+    });
+
+    test('should correctly set endpointAddress', () => {
+      expect(importedWorkgroup.endpointAddress).toEqual('my-workgroup.endpoint.com');
+    });
+
+    test('should correctly set port', () => {
+      expect(importedWorkgroup.port).toEqual(5439);
+    });
+
+    test('should correctly format workgroupArn', () => {
+      expect(importedWorkgroup.workgroupArn).toEqual(
+        Stack.of(stack).formatArn({
+          resource: 'redshift-serverless',
+          service: 'workgroup',
+          resourceName: 'my-workgroup-id',
+        }),
+      );
+    });
+
+    test('should correctly set security groups', () => {
+      expect(importedWorkgroup.connections.securityGroups).toEqual([securityGroup]);
+    });
+  });
+
+  describe('validateCapacity test', () => {
+    test.each([0, 1056])('throws when baseCapacity is out of range, got %d', baseCapacity => {
+      expect(() => {
+        new Workgroup(stack, 'Workgroup', {
+          baseCapacity,
+          vpc,
+        });
+      }).toThrow(`\`baseCapacity\` must be between 8 and 1024, got: ${baseCapacity}.`);
+    });
+
+    test('throws when baseCapacity is not units of 8 between 8 and 512', () => {
+      expect(() => {
+        new Workgroup(stack, 'Workgroup', {
+          baseCapacity: 15,
+          vpc,
+        });
+      }).toThrow('`baseCapacity` must be units of 8 between 8 and 512, got: 15.');
+    });
+
+    test('throws when baseCapacity is not units of 32 between 512 and 1024', () => {
+      expect(() => {
+        new Workgroup(stack, 'Workgroup', {
+          baseCapacity: 520,
+          vpc,
+        });
+      }).toThrow('`baseCapacity` must be units of 32 between 512 and 1024, got: 520.');
+    });
+  });
+
+  describe('validateWorkgroupName test', () => {
+    test.each(['ABC', 'name with spaces'])('throws when workgroupName is invalid, got %s', workgroupName => {
+      expect(() => {
+        new Workgroup(stack, 'Workgroup', {
+          workgroupName,
+          vpc,
+        });
+      }).toThrow(`\`workgroupName\` must contain only lowercase letters, numbers, and hyphens, got: ${workgroupName}.`);
+    });
+
+    test.each(['a'.repeat(2), 'a'.repeat(100)])(
+      'throws when workgroupName length is invalid, got %s',
+      workgroupName => {
+        expect(() => {
+          new Workgroup(stack, 'Workgroup', {
+            workgroupName,
+            vpc,
+          });
+        }).toThrow(`\`workgroupName\` must be between 3 and 64 characters, got: ${workgroupName.length} characters.`);
+      },
+    );
+  });
+
+  describe('validatePort test', () => {
+    test.each([5430, 5456, 8190, 8216])('throws when port is invalid, got %d', port => {
+      expect(() => {
+        new Workgroup(stack, 'Workgroup', {
+          port,
+          vpc,
+        });
+      }).toThrow(
+        `\`port\` must be in the range of 5431-5455 or 8191-8215 for Amazon Redshift Serverless, got: ${port}.`,
+      );
+    });
+  });
+
+  describe('validateSubnet test', () => {
+    test('throws when vpc has over 3 subnets but has only 2 AZs', () => {
+      const vpcFor2Az = new aws_ec2.Vpc(stack, 'VPCfor2Az', {
+        maxAzs: 2,
+        subnetConfiguration: [
+          {
+            cidrMask: 24,
+            name: 'Public',
+            subnetType: aws_ec2.SubnetType.PUBLIC,
+          },
+          {
+            cidrMask: 24,
+            name: 'Private',
+            subnetType: aws_ec2.SubnetType.PRIVATE_WITH_EGRESS,
+          },
+          {
+            cidrMask: 24,
+            name: 'AnotherPrivate',
+            subnetType: aws_ec2.SubnetType.PRIVATE_WITH_EGRESS,
+          },
+        ],
+      });
+
+      expect(() => {
+        new Workgroup(stack, 'Workgroup', {
+          vpc: vpcFor2Az,
+        });
+      }).toThrow('`vpc` must have at least 3 subnets, and they must span across 3 Availability Zones, got: 2 AZs.');
+    });
+  });
+});