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

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

版本：2\.275\.0-alpha\.0
npm 元数据更新时间：2026-10-26T19:19:45.363Z
中文译文更新时间：2026-11-07T12:19:32.182Z
软件包许可：Apache-2\.0

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

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

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

- 包体积（解压后）：925 kB，58 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 20\.0\.0
- 运行依赖：0 个
- peer 依赖：constructs ^10\.5\.0，aws-cdk-lib ^2\.275\.0
- 首次发布：2021-10-13T18:38:41.025Z
- 最新版本发布：2026-10-26T19:19:44.524Z
- 近 30 天下载量：94959（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：380（近 12 个月 64 个）

## 中文简介

用于 AWS 的 CDK 构建库: redtition

## 安装

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

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

## README

# 亚马逊红移构造库

* * *

![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)

> 本单元中更高层次的构件的API是实验性的并正在积极开发中. 在今后任何版本中,它们都须作非背向相容的修改或去除。 这些是 不适用 [语义版本](https://semver.org/) 模型和断开的更改 在发行笔记中宣布. 这意味着虽然你可能使用它们,但可能需要更新 当更新到此软件包的更新版本时,您的源代码.

* * *

## 启动红移集群数据库

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

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

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

默认情况下,主密码将生成并存储在 AWS 保密管理器中. 您可以通过设置指定不包含在生成的密码中的字符 `excludeCharacters` 属性.

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

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

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

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

默认情况下,节点类型是 `RA3_LARGE`。您可以通过设置 `nodeType` 属性.

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

declare const vpc: ec2.IVpc;

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

## 数据库审计日志

Amazon Redshift 在您的数据库中记录连接和用户活动的信息 。 这些日志帮助您监控数据库的安全和故障排除目的,这一过程被称为数据库审核.

要捕捉用户活动日志,您还必须启用 `enable_user_activity_logging` 数据库参数 :

```ts
cluster.addToParameterGroup('enable_user_activity_logging', 'true');
```

对现有集群的参数变化只有在重启后才会生效。 见 [重新启动参数更新](https://npmcn.com/package/%40aws-cdk/aws-redshift-alpha/#readme-rebooting-for-parameter-updates) 如何将它自动化 `rebootForParameterChanges`。 。 。 .

### S3 日志

将审计日志发送给 S3 桶, 使用 `ClusterLogging.s3()`数字 :

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as s3 from 'aws-cdk-lib/aws-s3';
import { ClusterLogging } from '@aws-cdk/aws-redshift-alpha';

declare const vpc: ec2.IVpc;
declare const bucket: s3.IBucket;

const cluster = new Cluster(this, 'Redshift', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc,
  logging: ClusterLogging.s3({
    bucket,
    keyPrefix: 'redshift-logs/',
  }),
});
```

桶必须满足下列要求,否则Redshift不交付木料([文档](https://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing.html):

-   它必须使用亚马逊S3管理的密钥(SSE-S3)进行加密. SSE-KMS不支持.
-   它必须位于同一个区域与集群.
-   S3 对象锁定必须关闭 .

### 云表日志

发送审计日志到 Cloud Watch, 使用 `ClusterLogging.cloudWatch()`如果 `logExports` 中,所有日志类型都导出.

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { ClusterLogging, LogExport } from '@aws-cdk/aws-redshift-alpha';

declare const vpc: ec2.IVpc;

const cluster = new Cluster(this, 'Redshift', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc,
  logging: ClusterLogging.cloudWatch({
    logExports: [LogExport.CONNECTION_LOG, LogExport.USER_LOG],
  }),
});
```

## 可用区迁移

通过使用 [amazon Redship的搬迁](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html),您允许 Amazon Redshift 将一个集群移动到另一个可用区(AZ),而不会丢失数据或更改您的应用程序. 这一特点既适用于新的集群,也适用于现有的集群.

要启用此特性,请设置 `availabilityZoneRelocation` 属性改为 `true`。 。 。 .

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

declare const vpc: ec2.IVpc;

const cluster = new Cluster(this, 'Redshift', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc,
  nodeType: NodeType.RA3_XLPLUS,
  availabilityZoneRelocation: true,
});
```

**说明**编号: `availabilityZoneRelocation` 属性仅适用于 RA3 节点类型.

## 连接中

要控制谁可以访问集群,请使用 `.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-lib/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) 用于任何需要密码值的地方.

您可以通过设置指定不包含在生成的密码中的字符 `excludeCharacters` 属性.

```ts
new User(this, 'User', {
  cluster: cluster,
  databaseName: 'databaseName',
  excludeCharacters: '"@/\\\ \'`',
});
```

### 创建表格

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

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

大于v2.114.1的表格可以更改其表格名称,因为版本为QQ v2.114.1,这是不可能的. 因此,已禁用 QQ v2.114.1 的表格名称更改 .

```ts
new Table(this, 'Table', {
  tableName: 'oldTableName' // This value can be change for versions greater than v2.114.1
  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,
});
```

表格及其相应的列可以配置以包含注释 :

```ts
new Table(this, 'Table', {
  tableColumns: [
    { name: 'col1', dataType: 'varchar(4)', comment: 'This is a column comment' },
    { name: 'col2', dataType: 'float', comment: 'This is a another column comment' }
  ],
  cluster: cluster,
  databaseName: 'databaseName',
  tableComment: 'This is a table comment',
});
```

表格列可以配置以使用特定的压缩编码 :

```ts
import { ColumnEncoding } from '@aws-cdk/aws-redshift-alpha';

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

表格列还可包含 `id` 属性,它可以使表格列重新命名.

**页:1** 用来使用 `id` 属性,您还必须启用 `@aws-cdk/aws-redshift:columnId` 特性旗.

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

查询执行期限默认为一分. 您可以通过设置 `timeout` 属性.

有效超时值为1秒至15分.

```ts
import { Duration } from 'aws-cdk-lib';

new Table(this, 'Table', {
  tableColumns: [
    { id: 'col1', name: 'col1', dataType: 'varchar(4)' },
    { id: 'col2', name: 'col2', dataType: 'float' }
  ],
  cluster: cluster,
  databaseName: 'databaseName',
  timeout: Duration.minutes(15),
});
```

### 授予特权

您可以通过使用 : `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,
});
```

## 添加参数

您可以在参数组中添加参数`ClusterParameterGroup.addParameter()`。 。 。 .

```ts
import { ClusterParameterGroup } from '@aws-cdk/aws-redshift-alpha';

const params = new ClusterParameterGroup(this, 'Params', {
  description: 'desc',
  parameters: {
    require_ssl: 'true',
  },
});

params.addParameter('enable_user_activity_logging', 'true');
```

此外,还可以在集群的相关参数组中添加一个参数: `Cluster.addToParameterGroup()`。如果集群没有相关的参数组,则创建一个新的参数组.

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as cdk from 'aws-cdk-lib';
declare const vpc: ec2.Vpc;

const cluster = new Cluster(this, 'Cluster', {
  masterUser: {
    masterUsername: 'admin',
    masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),
  },
  vpc,
});

cluster.addToParameterGroup('enable_user_activity_logging', 'true');
```

## 重新启动参数更新

在大多数情况下,现有的集群 [必须手动重新启动](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html) 以应用参数更改。 您可以通过设置集群的 `rebootForParameterChanges` 属性改为 `true` ,或者通过使用 `Cluster.enableRebootForParameterChanges()`。 。 。 .

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as cdk from 'aws-cdk-lib';
declare const vpc: ec2.Vpc;

const cluster = new Cluster(this, 'Cluster', {
  masterUser: {
    masterUsername: 'admin',
    masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),
  },
  vpc,
});

cluster.addToParameterGroup('enable_user_activity_logging', 'true');
cluster.enableRebootForParameterChanges()
```

## 资源行动

您可以通过指定 `resourceAction` 财产, 包括 [减少和恢复专题组](https://docs.aws.amazon.com/redshift/latest/mgmt/rs-mgmt-pause-resume-cluster.html),以及启动 [多AZ集群的故障](https://docs.aws.amazon.com/redshift/latest/mgmt/test-cluster-multi-az.html)。 。 。 .

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { ResourceAction } from '@aws-cdk/aws-redshift-alpha';

declare const vpc: ec2.IVpc;

// Pause the cluster
new Cluster(this, 'PausedCluster', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc,
  resourceAction: ResourceAction.PAUSE,
});

// Resume the cluster
new Cluster(this, 'ResumedCluster', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc,
  resourceAction: ResourceAction.RESUME,
});

// Failover the cluster
new Cluster(this, 'FailOverCluster', {
  masterUser: {
    masterUsername: 'admin',
  },
  // VPC must have 3 AZs for the cluster which executes failover action
  vpc,
  // Must be a multi-AZ cluster to failover
  multiAz: true,
  resourceAction: ResourceAction.FAILOVER_PRIMARY_COMPUTE,
});
```

## 弹性 IP

如果您配置您的集群以公开访问, 您可以选择一个 _弹性 IP 地址_ 用于外部 IP 地址。 一个弹性IP地址是一个与你的AWS账户相联的静态IP地址. 您可以使用弹性IP地址从 VPC 外部连接到您的集群. 一个弹性的IP地址赋予了您在不影响客户端用来连接到您的集群的IP地址的情况下改变您基础配置的能力. 这种办法对失败后恢复等情况可能有所帮助.

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as cdk from 'aws-cdk-lib';
declare const vpc: ec2.Vpc;

new Cluster(this, 'Redshift', {
    masterUser: {
      masterUsername: 'admin',
      masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),
    },
    vpc,
    publiclyAccessible: true,
    elasticIp: '10.123.123.255', // A elastic ip you own
})
```

如果集群在一个 VPC 中,而您想要使用集群内部的私有IP地址与之连接,那么启用非常重要 _DNS 分辨率_ 财务报告和审定财务报表 _DNS 主机名_ 在 VPC 配置中。 如果不设定这些参数,VPC内部的连接会连接到弹性IP地址而不是私人IP地址.

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const vpc = new ec2.Vpc(this, 'VPC', {
  enableDnsSupport: true,
  enableDnsHostnames: true,
});
```

注意,如果已经存在一个公共无障碍集群, VPC 配置将更改为使用 _DNS 主机名_ 财务报告和审定财务报表 _DNS 分辨率_,连接仍然使用弹性IP地址,直到集群被调整大小.

### 弹性IP vs. 集群节点公共IP

弹性IP地址是一个外部IP地址,用于访问一个VPC以外的集群. 它与集群节点公用IP地址和通过: `clusterEndpoint` 属性。 公有和私有的集群节点IP地址无论该集群是否向公众开放都会出现. 它们仅在某些情况下用于配置远程主机的入侵规则. 这些情况发生在您使用安全外壳( SSH) 连接从 Amazon EC2 实例或其他远程主机装入数据时 .

### 集群创建后附加弹性 IP

在某些情况下,您可能想要将集群与弹性IP地址联系起来,或者改变与集群相关的弹性IP地址. 要在集群创建后附加弹性IP地址,首先更新集群使其不公开取用,再使其既公开取用,又在同一操作中添加弹性IP地址.

## 增强VPC 运行

当您使用 Amazon Redtition 增强 VPC 路由时, Amazon Redtition 强制您通过基于 Amazon VPC 服务的虚拟私有云( VPC) 在您的集群和您的数据存储器之间实现所有 COPY 和 UNLOAD 通信 。 通过使用增强的VPC路由,可以使用标准的VPC功能,如"亚马逊VPC用户指南"所描述的VPC安全组,网络访问控制列表(ACLs),VPC端点,VPC端点政策,互联网网关,和域名系统(DNS)服务器等. 您使用这些功能来严格管理您的 Amazon Redshift 集群和其他资源之间的数据流动 。 当您通过 VPC 使用增强的 VPC 路由进行线路交通时,您也可以使用 VPC 流量日志来监控 COPY 和 UNLOAD 流量.

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as cdk from 'aws-cdk-lib';
declare const vpc: ec2.Vpc;

new Cluster(this, 'Redshift', {
    masterUser: {
      masterUsername: 'admin',
      masterPassword: cdk.SecretValue.unsafePlainText('tooshort'),
    },
    vpc,
    enhancedVpcRouting: true,
})
```

如果不启用增强的VPC路由,亚马逊Redshift路由通过互联网的交通,包括AWS网络内的其他服务的交通.

## 默认 IAM 角色

一些Amazon Redship功能要求Amazon Redship代表您访问其他AWS服务. 亚马逊红移集群代表您行事, 您为您的集群提供安全证书 。 提供安全证书的首选方法是具体规定AWS身份和访问管理(IAM)的作用.

当创建一个IAM角色并将其设定为使用控制台的集群默认时,不需要提供IAM角色的亚马逊资源名(ARN)来进行认证和授权.

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const vpc: ec2.Vpc;

const defaultRole = new iam.Role(this, 'DefaultRole', {
  assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),
},
);

new Cluster(this, 'Redshift', {
    masterUser: {
      masterUsername: 'admin',
    },
    vpc,
    roles: [defaultRole],
    defaultRole: defaultRole,
});
```

默认角色也可以使用 `addDefaultIamRole` 方法.

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const vpc: ec2.Vpc;

const defaultRole = new iam.Role(this, 'DefaultRole', {
  assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),
},
);

const redshiftCluster = new Cluster(this, 'Redshift', {
    masterUser: {
      masterUsername: 'admin',
    },
    vpc,
    roles: [defaultRole],
});

redshiftCluster.addDefaultIamRole(defaultRole);
```

## IAM的作用

将IAM角色附加到"再转会"集群上,允许"再转会"服务代表您执行行动.

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const vpc: ec2.Vpc

const role = new iam.Role(this, 'Role', {
  assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),
});
const cluster = new Cluster(this, 'Redshift', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc,
  roles: [role],
});
```

机构间监测会议的其他作用可附加于一个集群,使用 `addIamRole` 方法.

```ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const vpc: ec2.Vpc

const role = new iam.Role(this, 'Role', {
  assumedBy: new iam.ServicePrincipal('redshift.amazonaws.com'),
});
const cluster = new Cluster(this, 'Redshift', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc,
});
cluster.addIamRole(role);
```

## 多阿兹

亚马逊红移支持 [多个可用区(多AZ)部署](https://npmcn.com/package/%40aws-cdk/aws-redshift-alpha/\(https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-multi-az.html\)) 用于提供RA3集群. 通过使用多 AZ 部署, 当一个可用区发生出乎意料的事件时, 您的 Amazon RedShift 数据仓库可以在失败的情况下继续运行 .

要创建多AZ集群,请设定 `multiAz` 属性改为 `true` 当创建集群时.

```ts
declare const vpc: ec2.IVpc;

new redshift.Cluster(stack, 'Cluster', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc, // 3 AZs are required for Multi-AZ
  nodeType: redshift.NodeType.RA3_XLPLUS, // must be RA3 node type
  clusterType: redshift.ClusterType.MULTI_NODE, // must be MULTI_NODE
  numberOfNodes: 2, // must be 2 or more
  multiAz: true,
});
```

## 调整大小

由于您的数据存储需要改变, 有可能调整您的 Redshift 集群大小 。 如果集群是通过CDK部署的, 必须通过 CCDK 调整其大小,使更改在 AWS Cloud Formation 模板中注册. 调整业务有两种类型:

-   弹性调整大小 - 节点和节点类型的数量可以更改,但不能同时更改. 弹性调整是默认行为, 因为它是一个快速的操作 通常在几分钟内完成。 弹性调整大小只支持以下类型的集群:
    
    -   dc1. 宽度(如果组群在VPC中)
    -   dc1.8x 宽度( 如果您的集群属于 VPC )
    -   dc2. 宽度
    -   dc2.8x 宽度
    -   ds2.x 大号
    -   ds 2.8x 宽度
    -   r3. 宽度
    -   ra3.xlplus 键
    -   宽度为3.4
    -   ra3.16x 宽度
-   经典的调整大小 - 节点的数目,节点类型,或两者均可以更改. 这次行动需要更长的时间才能完成, 但当调整的操作不符合弹性调整的标准时,则有用. 如果你喜欢经典的再大小, 您可以设置 `classicResizing` 旗下创建集群时.
    

还有一些其他的制约因素需要意识到,例如弹性再调整大小不支持单节点集群,而且有 限制可添加到集群的节点数量。 见 [AWS 红移文档](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-operations.html#rs-resize-tutorial) 财务报告和审定财务报表 [AWS API 文档](https://docs.aws.amazon.com/redshift/latest/APIReference/API_ResizeCluster.html) 更多细节.

## 维护轨道名称

当Amazon Redshift发布新的集群版本时,您的集群会在其维护窗口中被更新. 您可以控制您的集群是否被更新到最近批准的发布或之前的发布. 见 [AWS 红移文档](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-considerations.html#rs-mgmt-maintenance-tracks) 更多细节.

要控制维护窗口中应用哪个集群版本,请设置 `maintenanceTrackName` 属性.

```ts
new redshift.Cluster(stack, 'Cluster', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc,
  maintenanceTrackName: redshift.MaintenanceTrackName.CURRENT,
});
```

您可以指定以下之一 `MaintenanceTrackName` 值 :

-   `CURRENT`: 使用最新核准的分组版本.
-   `TRAILING`: 在当前版本之前使用集群版本.

## 常见问题

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

用于 AWS 的 CDK 构建库: redtition

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

在项目目录运行 npm install @aws-cdk/aws-redshift-alpha，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：constructs（^10\.5\.0）、aws-cdk-lib（^2\.275\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

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

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

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

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

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

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

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

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

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

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

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

最新版本 2\.275\.0-alpha\.0 发布于 2026/10/27（12 天前）；至今共发布 380 个版本，其中过去 12 个月发布了 64 个；首次发布于 2021/10/14。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

