# @aws-cdk/aws-redshift 中文文档

规范地址：https://npmcn.com/package/%40aws-cdk/aws-redshift/

版本：1\.204\.0
npm 元数据更新时间：2023-11-21T10:16:44.194Z
中文译文更新时间：2026-11-07T17:29:08.318Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40aws-cdk/aws-redshift
原文对照：https://npmcn.com/package/%40aws-cdk/aws-redshift/?lang=original
项目主页：https://github.com/aws/aws-cdk
源码仓库：https://github.com/aws/aws-cdk

弃用说明：AWS CDK v1 has reached End-of-Support on 2023-06-01\. This package is no longer being updated, and users should migrate to AWS CDK v2\. For more information on how to migrate, see https://docs\.aws\.amazon\.com/cdk/v2/guide/migrating-v2\.html

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：1.6 MB，54 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 14\.15\.0
- 运行依赖：9 个
- peer 依赖：@aws-cdk/aws-ec2 1\.204\.0，@aws-cdk/aws-iam 1\.204\.0，@aws-cdk/aws-kms 1\.204\.0，@aws-cdk/aws-lambda 1\.204\.0，@aws-cdk/aws-s3 1\.204\.0，@aws-cdk/aws-secretsmanager 1\.204\.0，@aws-cdk/core 1\.204\.0，@aws-cdk/custom-resources 1\.204\.0，constructs ^3\.3\.69
- 首次发布：2018-07-31T13:38:56.679Z
- 最新版本发布：2023-06-19T21:08:51.494Z
- 近 30 天下载量：3625（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：288（近 12 个月 0 个）

## 中文简介

用于 AWS 的 CDK 构建库: redtition

## 安装

```sh
npm install @aws-cdk/aws-redshift
```

也可以使用：`pnpm add @aws-cdk/aws-redshift`、`yarn add @aws-cdk/aws-redshift`、`bun add @aws-cdk/aws-redshift`

## README

# 亚马逊红移构造库

* * *

![End-of-Support](https://img.shields.io/badge/End--of--Support-critical.svg?style=for-the-badge)

> AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.
> 
> 关于如何移徙的更多信息,请参见: [_移动到 AWS CDK v2_ 指南](https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html)。 。 。 .

* * *

## 启动红移集群数据库

建立Redshift集群,定义 `Cluster`将在VPC中推出. 您可以指定一个 VPC, 否则将会创建 。 节点总是由私人子网启动,并默认加密.

```ts
import * as ec2 from '@aws-cdk/aws-ec2';

const vpc = new ec2.Vpc(this, 'Vpc');
const cluster = new Cluster(this, 'Redshift', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc
});
```

默认情况下,主密码将生成并存储在 AWS 保密管理器中.

名为默认的数据库 `default_db` 将在组中创建。 要更改数据库的名称,请设置 `defaultDatabaseName` 属性.

默认情况下,集群将无法公开访问. 视使用情况而定,您可使用 `publiclyAccessible` 属性.

## 连接中

要控制谁可以访问集群,请使用 `.connections` 属性。 红移集群有 默认端口,所以不需要指定端口 :

```ts
cluster.connections.allowDefaultPortFromAnyIpv4('Open to the world');
```

访问您数据库集群的终点将作为 `.clusterEndpoint` 属性 :

```ts
cluster.clusterEndpoint.socketAddress;   // "HOSTNAME:PORT"
```

## 数据库资源

此模块允许创建用户等非 CloudFormation 数据库资源 还有桌子 这样您就可以管理身份、权限和状态资源 从您的 CDK 应用程序中跳出.

因为CloudFormation没有这些资源,所以这个库的杠杆作用 [自定义 资源](https://docs.aws.amazon.com/cdk/api/latest/docs/custom-resources-readme.html) 管理他们。 除了提供Redshift服务所需的IAM许可外 调用,自定义资源处理器的执行角色需要数据库证书 在集群内创建资源.

这些数据库证书可通过下列方式明确提供: `adminUser` 属性 用于构建各种数据库资源。 或者,全权证书可以是: 自动从 Redshift 集群的默认管理员中拉出 证书。 但是,只有在证书的密码允许的情况下,才能使用这个选项 由 CDK 应用程序生成( 即没有设定值 vas) [页:1 `masterPassword` 属性](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-redshift.Login.html#masterpasswordspan-classapi-icon-api-icon-experimental-titlethis-api-element-is-experimental-it-may-change-without-noticespan) 联 合 国 [`Cluster.masterUser`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-redshift.Cluster.html#masteruserspan-classapi-icon-api-icon-experimental-titlethis-api-element-is-experimental-it-may-change-without-noticespan)) (中文(简体) ).

### 创建用户

在 Redshift 集群数据库中通过即时编辑创建用户 `User` 构造。 这个 将生成用户名和密码,将证书保存在 [AWS 保密管理器 `Secret`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-secretsmanager.Secret.html), (中文(简体) ), 并查询 Redshift 集群,以创建新的数据库用户 证书.

```ts
new User(this, 'User', {
  cluster: cluster,
  databaseName: 'databaseName',
});
```

默认情况下, 用户证书会用您的 AWS 账户默认密钥加密 管理器加密密钥 。 您可以指定用于此目的的加密密钥 提供 `encryptionKey` 属性.

```ts
import * as kms from '@aws-cdk/aws-kms';

const encryptionKey = new kms.Key(this, 'Key');
new User(this, 'User', {
  encryptionKey: encryptionKey,
  cluster: cluster,
  databaseName: 'databaseName',
});
```

默认情况下,用户名会自动从用户构造ID及其路径生成 在构造树上。 您可以通过提供该定义的值来指定特定的用户名 `username` 属性。 用户名必须是有效的标识符;参见: [名称和编号 标识符](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html) 输入 _亚马逊 红移数据库开发者指南_。 。 。 .

```ts
new User(this, 'User', {
  username: 'myuser',
  cluster: cluster,
  databaseName: 'databaseName',
});
```

用户密码由 AWS 保密管理器使用默认配置生成 发现于 [`secretsmanager.SecretStringGenerator`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-secretsmanager.SecretStringGenerator.html), (中文(简体) ), 密码长度除外 `30` 并排除一些不符合 SQL 字符 。 这个 密码的纯文本永远不会出现在 CDK 应用程序中; 相反, a [云格式动态 参考文献](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html) 用于任何需要密码值的地方.

### 创建表格

在 Redshift 集群数据库中创建一个表格 `Table` 构造。 这将向 Redshift 集群查询以创建新的数据库表格 与提供计划.

```ts
new Table(this, 'Table', {
  tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],
  cluster: cluster,
  databaseName: 'databaseName',
});
```

表格可以配置为 distStyle 属性和一个 distKey 列 :

```ts
new Table(this, 'Table', {
  tableColumns: [
    { name: 'col1', dataType: 'varchar(4)', distKey: true },
    { name: 'col2', dataType: 'float' },
  ],
  cluster: cluster,
  databaseName: 'databaseName',
  distStyle: TableDistStyle.KEY,
});
```

表格也可以配置为排序Style属性并排序Key列 :

```ts
new Table(this, 'Table', {
  tableColumns: [
    { name: 'col1', dataType: 'varchar(4)', sortKey: true },
    { name: 'col2', dataType: 'float', sortKey: true },
  ],
  cluster: cluster,
  databaseName: 'databaseName',
  sortStyle: TableSortStyle.COMPOUND,
});
```

### 授予特权

您可以通过使用 : `Table.grant()` 方法.

```ts
const user = new User(this, 'User', {
  cluster: cluster,
  databaseName: 'databaseName',
});
const table = new Table(this, 'Table', {
  tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],
  cluster: cluster,
  databaseName: 'databaseName',
});

table.grant(user, TableAction.DROP, TableAction.SELECT);
```

在通过 CDK 管理权限时要小心, 作为试图管理用户的 多个 CDK 应用程序中同一表格中的权限可能导致意外 压倒这些权限。 考虑以下两个 CDK 应用程序,它们都提到 改为同一用户和表格。 在应用程序1中,创建了资源,用户是 给定 `INSERT` 表格中的权限 :

```ts
const databaseName = 'databaseName';
const username = 'myuser'
const tableName = 'mytable'

const user = new User(this, 'User', {
  username: username,
  cluster: cluster,
  databaseName: databaseName,
});
const table = new Table(this, 'Table', {
  tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],
  cluster: cluster,
  databaseName: databaseName,
});
table.grant(user, TableAction.INSERT);
```

在应用程序2中,资源被导入并给出用户 `INSERT` 权限在 该表:

```ts
const databaseName = 'databaseName';
const username = 'myuser'
const tableName = 'mytable'

const user = User.fromUserAttributes(this, 'User', {
  username: username,
  password: SecretValue.unsafePlainText('NOT_FOR_PRODUCTION'),
  cluster: cluster,
  databaseName: databaseName,
});
const table = Table.fromTableAttributes(this, 'Table', {
  tableName: tableName,
  tableColumns: [{ name: 'col1', dataType: 'varchar(4)' }, { name: 'col2', dataType: 'float' }],
  cluster: cluster,
  databaseName: 'databaseName',
});
table.grant(user, TableAction.INSERT);
```

两个应用程序都试图通过下列方式给予用户桌面上的适当特权: 提交资料 `GRANT USER` SQL 查询到 Redshift 集群 。 注意,其中后者 由于用户已获得特权,两通电话将毫无效果.

现在,如果应用 1 要删除呼叫 `grant`页:1 `REVOKE USER` SQL 查询是 提交到 Redshift 集群。 一般来说,第1号申请并不知道 申请2也批准了这一许可,因此不能决定不签发该许可 撤销。 这导致申请2仍然包含以下内容的不良状态: 呼叫 `grant` 但用户没有指定的权限.

请注意,如果在同一权限范围内给予重复的特权,则不发生这种情况 应用程序,因为在提交任何 SQL 查询之前,此类权限将被删除.

## 证书的轮换

当主密码生成并存储在 AWS 秘密管理器中时,可以自动旋转:

```ts
cluster.addRotationSingleUser(); // Will rotate automatically after 30 days
```

还有多种用户轮换计划:

```ts

const user = new User(this, 'User', {
  cluster: cluster,
  databaseName: 'databaseName',
});
cluster.addRotationMultiUser('MultiUserRotation', {
  secret: user.secret,
});
```

## 常见问题

### @aws-cdk/aws-redshift 是什么？

用于 AWS 的 CDK 构建库: redtition注意：该包已被作者标记为弃用——AWS CDK v1 has reached End-of-Support on 2023-06-01\. This package is no longer being updated, and users should migrate to AWS CDK v2\. For more information on how to migrate, see https://docs\.aws\.amazon\.com/cdk/v2/guide/migrating-v2\.html

### 如何安装 @aws-cdk/aws-redshift？

在项目目录运行 npm install @aws-cdk/aws-redshift，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@aws-cdk/aws-ec2（1\.204\.0）、@aws-cdk/aws-iam（1\.204\.0）、@aws-cdk/aws-kms（1\.204\.0）、@aws-cdk/aws-lambda（1\.204\.0）、@aws-cdk/aws-s3（1\.204\.0）、@aws-cdk/aws-secretsmanager（1\.204\.0）、@aws-cdk/core（1\.204\.0）、@aws-cdk/custom-resources（1\.204\.0）、constructs（^3\.3\.69）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @aws-cdk/aws-redshift 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @aws-cdk/aws-redshift 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @aws-cdk/aws-redshift 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>= 14\.15\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @aws-cdk/aws-redshift 可以商用吗？

@aws-cdk/aws-redshift 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @aws-cdk/aws-redshift 的下载量有多少？

根据 npm 官方下载统计，@aws-cdk/aws-redshift 在 2026/10/08 – 2026/11/06 这 30 天内被下载 3,625 次，日均约 121 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @aws-cdk/aws-redshift 还在维护吗？

最新版本 1\.204\.0 发布于 2023/06/20（3 年前）；至今共发布 288 个版本，其中过去 12 个月发布了 0 个；首次发布于 2018/07/31。作者已将其标记为弃用，新项目建议寻找替代方案。

