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

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

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

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

原始 npm 页面：https://www.npmjs.com/package/%40aws-cdk/aws-rds
原文对照：https://npmcn.com/package/%40aws-cdk/aws-rds/?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 元数据）

- 包体积（解压后）：4.8 MB，51 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 14\.15\.0
- 运行依赖：11 个
- peer 依赖：@aws-cdk/aws-cloudwatch 1\.204\.0，@aws-cdk/aws-ec2 1\.204\.0，@aws-cdk/aws-events 1\.204\.0，@aws-cdk/aws-iam 1\.204\.0，@aws-cdk/aws-kms 1\.204\.0，@aws-cdk/aws-logs 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/cx-api 1\.204\.0，constructs ^3\.3\.69
- 首次发布：2018-07-31T13:38:49.379Z
- 最新版本发布：2023-06-19T21:11:27.237Z
- 近 30 天下载量：85087（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：288（近 12 个月 0 个）

## 中文简介

AWS:RDS 的 CDK 构造库

## 安装

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

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

## 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)。 。 。 .

* * *

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

## 启动分组数据库

要建立一个集群数据库(如Aurora),定义一个 `DatabaseCluster`您必须 总是在VPC中启动一个数据库. 使用 `vpcSubnets` 属性到控件是否 您的情况将被单独或公开启动 :

```ts
declare const vpc: ec2.Vpc;
const cluster = new rds.DatabaseCluster(this, 'Database', {
  engine: rds.DatabaseClusterEngine.auroraMysql({ version: rds.AuroraMysqlEngineVersion.VER_2_08_1 }),
  credentials: rds.Credentials.fromGeneratedSecret('clusteradmin'), // Optional - will default to 'admin' username and generated password
  instanceProps: {
    // optional , defaults to t3.medium
    instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.SMALL),
    vpcSubnets: {
      subnetType: ec2.SubnetType.PRIVATE_WITH_NAT,
    },
    vpc,
  },
});
```

如果没有一个常数,你想要使用的确切版本, 所有人,我们.. `Version` 类有静态 `of` 用于创建任意版本的方法.

```ts
const customEngineVersion = rds.AuroraMysqlEngineVersion.of('5.7.mysql_aurora.2.08.1');
```

默认情况下,主密码会生成并存储在AWS Secrets管理器中,并带有自动生成的描述.

您的集群默认为空 。 要在构建时添加默认数据库,请指定 `defaultDatabaseName` 属性.

使用 `DatabaseClusterFromSnapshot` 从快照创建集群:

```ts
declare const vpc: ec2.Vpc;
new rds.DatabaseClusterFromSnapshot(this, 'Database', {
  engine: rds.DatabaseClusterEngine.aurora({ version: rds.AuroraEngineVersion.VER_1_22_2 }),
  instanceProps: {
    vpc,
  },
  snapshotIdentifier: 'mySnapshot',
});
```

## 启动实例数据库

要建立实例数据库,请定义 `DatabaseInstance`您必须 总是在VPC中启动一个数据库. 使用 `vpcSubnets` 属性到控件是否 您的情况将被单独或公开启动 :

```ts
declare const vpc: ec2.Vpc;
const instance = new rds.DatabaseInstance(this, 'Instance', {
  engine: rds.DatabaseInstanceEngine.oracleSe2({ version: rds.OracleEngineVersion.VER_19_0_0_0_2020_04_R1 }),
  // optional, defaults to m5.large
  instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE3, ec2.InstanceSize.SMALL),
  credentials: rds.Credentials.fromGeneratedSecret('syscdk'), // Optional - will default to 'admin' username and generated password
  vpc,
  vpcSubnets: {
    subnetType: ec2.SubnetType.PRIVATE_WITH_NAT,
  }
});
```

如果没有一个常数 准确的引擎版本,你想使用, 所有人,我们.. `Version` 类有静态 `of` 用于创建任意版本的方法.

```ts
const customEngineVersion = rds.OracleEngineVersion.of('19.0.0.0.ru-2020-04.rur-2020-04.r1', '19');
```

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

要使用 RDS 的存储自动缩放选项, 您可以指定最大分配的存储 . 这是RDS可以自动缩放存储的上限. 更多信息可以找到 [这里](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.Autoscaling) 最大存储配置示例 :

```ts
declare const vpc: ec2.Vpc;
const instance = new rds.DatabaseInstance(this, 'Instance', {
  engine: rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_12_3 }),
  // optional, defaults to m5.large
  instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.SMALL),
  vpc,
  maxAllocatedStorage: 200,
});
```

使用 `DatabaseInstanceFromSnapshot` 财务报告和审定财务报表 `DatabaseInstanceReadReplica` 从快照创建实例或 来源数据库:

```ts
declare const vpc: ec2.Vpc;
new rds.DatabaseInstanceFromSnapshot(this, 'Instance', {
  snapshotIdentifier: 'my-snapshot',
  engine: rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_12_3 }),
  // optional, defaults to m5.large
  instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.LARGE),
  vpc,
});

declare const sourceInstance: rds.DatabaseInstance;
new rds.DatabaseInstanceReadReplica(this, 'ReadReplica', {
  sourceDatabaseInstance: sourceInstance,
  instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.LARGE),
  vpc,
});
```

仅支持MySQL和MariaDB自动备份已读复制实例. 默认, 自动备份为已读复制所禁用,只能启用(使用) `backupRetention`(中文(简体) ) 如果同时启用源实例.

创建带有选项和参数组的“ 生产” Oracle 数据库实例 :

[建立生产甲骨文实例的例子](https://npmcn.com/package/%40aws-cdk/aws-rds/test/integ.instance.lit.ts)

## 建立公众无障碍环境

您可以使用 `publiclyAccessible` 属性. 如果您指定 `true`,它创建了一个具有可公开解析的DNS名称的实例,它解决了一个公开的IP地址. 如果您指定 `false`,它创建了一个带有DNS名称的内部实例,可以解决一个私人IP地址. 默认值取决于 `vpcSubnets`。 。 。 . 会的 `true` 若为 `vpcSubnets` 实值 `subnetType: SubnetType.PUBLIC`, (中文(简体) ), `false` 否则.

```ts
declare const vpc: ec2.Vpc;
// Setting public accessibility for DB instance
new rds.DatabaseInstance(this, 'Instance', {
  engine: rds.DatabaseInstanceEngine.mysql({
    version: rds.MysqlEngineVersion.VER_8_0_19,
  }),
  vpc,
  vpcSubnets: {
    subnetType: ec2.SubnetType.PRIVATE_WITH_NAT,
  },
  publiclyAccessible: true,
});

// Setting public accessibility for DB cluster
new rds.DatabaseCluster(this, 'DatabaseCluster', {
  engine: rds.DatabaseClusterEngine.AURORA,
  instanceProps: {
    vpc,
    vpcSubnets: {
      subnetType: ec2.SubnetType.PRIVATE_WITH_NAT,
    },
    publiclyAccessible: true,
  },
});
```

## 事件

要定义数据库实例的 Amazon Cloud Watch 事件规则,请使用 `onEvent` 方法 :

```ts
declare const instance: rds.DatabaseInstance;
declare const fn: lambda.Function;
const rule = instance.onEvent('InstanceEvent', { target: new targets.LambdaFunction(fn) });
```

## 登录证书

默认情况下,数据库实例和集群(除 `DatabaseInstanceFromSnapshot` 财务报告和审定财务报表 `ServerlessClusterFromSnapshot`将拥有 `admin` 使用自动生成的密码. 可以为管理员用户指定一个替代用户名(和密码),而不是默认.

以下例子使用了 `DatabaseInstance`,但同样的用法适用于 `DatabaseCluster`。 。 。 .

```ts
declare const vpc: ec2.Vpc;
const engine = rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_12_3 });
new rds.DatabaseInstance(this, 'InstanceWithUsername', {
  engine,
  vpc,
  credentials: rds.Credentials.fromGeneratedSecret('postgres'), // Creates an admin user of postgres with a generated password
});

new rds.DatabaseInstance(this, 'InstanceWithUsernameAndPassword', {
  engine,
  vpc,
  credentials: rds.Credentials.fromPassword('postgres', SecretValue.ssmSecure('/dbPassword', '1')), // Use password from SSM
});

const mySecret = secretsmanager.Secret.fromSecretName(this, 'DBSecret', 'myDBLoginInfo');
new rds.DatabaseInstance(this, 'InstanceWithSecretLogin', {
  engine,
  vpc,
  credentials: rds.Credentials.fromSecret(mySecret), // Get both username and password from existing secret
});
```

由 `fromGeneratedSecret()` 可定制 :

```ts
declare const vpc: ec2.Vpc;
const engine = rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_12_3 });
const myKey = new kms.Key(this, 'MyKey');

new rds.DatabaseInstance(this, 'InstanceWithCustomizedSecret', {
  engine,
  vpc,
  credentials: rds.Credentials.fromGeneratedSecret('postgres', {
    secretName: 'my-cool-name',
    encryptionKey: myKey,
    excludeCharacters: '!&*^#@()',
    replicaRegions: [{ region: 'eu-west-1' }, { region: 'eu-west-2' }],
  }),
});
```

### 快照证书

如上所指出,数据库创建于 `DatabaseInstanceFromSnapshot` 或者说 `ServerlessClusterFromSnapshot` 默认情况下不会创建用户和自动生成的密码,因为无法为快照更改主用户名. 相反,他们会使用快照中现有的用户名和密码. 您仍然可以生成新的密码 - 生成一个类似于其它构造的秘密, 通过证书 `fromGeneratedSecret()` 或者说 `fromGeneratedPassword()`。 。 。 .

```ts
declare const vpc: ec2.Vpc;
const engine = rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_12_3 });
const myKey = new kms.Key(this, 'MyKey');

new rds.DatabaseInstanceFromSnapshot(this, 'InstanceFromSnapshotWithCustomizedSecret', {
  engine,
  vpc,
  snapshotIdentifier: 'mySnapshot',
  credentials: rds.SnapshotCredentials.fromGeneratedSecret('username', {
    encryptionKey: myKey,
    excludeCharacters: '!&*^#@()',
    replicaRegions: [{ region: 'eu-west-1' }, { region: 'eu-west-2' }],
  }),
});
```

## 连接中

要控制谁可以访问集群或实例,请使用 `.connections` 属性。 RDS数据库有: 默认端口,所以不需要指定端口 :

```ts
declare const cluster: rds.DatabaseCluster;
cluster.connections.allowFromAnyIpv4(ec2.Port.allTraffic(), 'Open to the world');
```

访问您数据库集群的终点将作为 `.clusterEndpoint` 财务报告和审定财务报表 `.readerEndpoint` 属性 :

```ts
declare const cluster: rds.DatabaseCluster;
const writeAddress = cluster.clusterEndpoint.socketAddress;   // "HOSTNAME:PORT"
```

例如,数据库:

```ts
declare const instance: rds.DatabaseInstance;
const address = instance.instanceEndpoint.socketAddress;   // "HOSTNAME:PORT"
```

## 证书的轮换

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

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

declare const instance: rds.DatabaseInstance;
instance.addRotationSingleUser({
  automaticallyAfter: cdk.Duration.days(7), // defaults to 30 days
  excludeCharacters: '!@#$%^&*', // defaults to the set " %+~`#$&*()|[]{}:;<>?!'/@\"\\"
});
```

[为集群设置主密码旋转的例子](https://npmcn.com/package/%40aws-cdk/aws-rds/test/integ.cluster-rotation.lit.ts)

还有多种用户轮换计划:

```ts
declare const instance: rds.DatabaseInstance;
declare const myImportedSecret: rds.DatabaseSecret;
instance.addRotationMultiUser('MyUser', {
  secret: myImportedSecret, // This secret must have the `masterarn` key
});
```

也可以与实例/集群一起创建用户证书并加入旋转:

```ts
declare const instance: rds.DatabaseInstance;
const myUserSecret = new rds.DatabaseSecret(this, 'MyUserSecret', {
  username: 'myuser',
  secretName: 'my-user-secret', // optional, defaults to a CloudFormation-generated name
  masterSecret: instance.secret,
  excludeCharacters: '{}[]()\'"/\\', // defaults to the set " %+~`#$&*()|[]{}:;<>?!'/@\"\\"
});
const myUserSecretAttached = myUserSecret.attach(instance); // Adds DB connections information in the secret

instance.addRotationMultiUser('MyUser', { // Add rotation using the multi user scheme
  secret: myUserSecretAttached,
});
```

**说明**:这个用户必须使用主证书在数据库中手动创建. 一旦该用户存在, 旋转将立即开始 .

秘密旋转需要访问"秘密管理者API". 这可以通过 互联网连接(通过NAT)或带有VPC接口端点. 默认情况下, 旋转 Lambda 函数 与实例/集群在同一子网中部署。 如果无法从 这些子网或使用默认 API 端点,使用 `vpcSubnets` 和(或) `endpoint` 选项:

```ts
declare const instance: rds.DatabaseInstance;
declare const myEndpoint: ec2.InterfaceVpcEndpoint;

instance.addRotationSingleUser({
  vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_NAT }, // Place rotation Lambda in private subnets
  endpoint: myEndpoint, // Use VPC interface endpoint
});
```

另见 [@aws-cdk/aws-机密管理员](https://github.com/aws/aws-cdk/blob/master/packages/%40aws-cdk/aws-secretsmanager/README.md) (c) 现有集群/企业的证书轮换.

## IAM 认证

也可以使用 AWS 身份和访问管理(IAM) 数据库认证来认证数据库实例; 见 [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html 互联网档案馆的存檔,存档日期2014-12-22](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html) 更多信息 以及支持的版本和限制清单.

**说明**数字 : `grantConnect()` 目前不工作 - 见 [此 GitHub 问题](https://github.com/aws/aws-cdk/issues/11851)。 。 。 .

以下实例显示允许对数据库实例进行IAM认证,并允许连接访问IAM角色.

```ts
declare const vpc: ec2.Vpc;
const instance = new rds.DatabaseInstance(this, 'Instance', {
  engine: rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_0_19 }),
  vpc,
  iamAuthentication: true, // Optional - will be automatically set if you call grantConnect().
});
const role = new iam.Role(this, 'DBRole', { assumedBy: new iam.AccountPrincipal(this.account) });
instance.grantConnect(role); // Grant the role connection access to the DB.
```

以下例子显示, RDS 代理服务器对一个IAM角色的连接访问.

```ts
declare const vpc: ec2.Vpc;
const cluster = new rds.DatabaseCluster(this, 'Database', {
  engine: rds.DatabaseClusterEngine.AURORA,
  instanceProps: { vpc },
});

const proxy = new rds.DatabaseProxy(this, 'Proxy', {
  proxyTarget: rds.ProxyTarget.fromCluster(cluster),
  secrets: [cluster.secret!],
  vpc,
});

const role = new iam.Role(this, 'DBProxyRole', { assumedBy: new iam.AccountPrincipal(this.account) });
proxy.grantConnect(role, 'admin'); // Grant the role connection access to the DB Proxy for database user 'admin'.
```

**说明**: 除了上述设置之外,还需要创建一个数据库用户来支持IAM auth. 见 [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.DBcounts.html 互联网档案馆的存檔,存档日期2013-12-21](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.DBAccounts.html) 用于设置指令.

## Kerberos 认证

也可以使用 Kerberos 认证到使用 AWS 管理 Microsoft AD 进行认证的数据库实例; 见 [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/kerberos-autentication.html 互联网档案馆的存檔,存档日期2014-12-21](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/kerberos-authentication.html) 更多信息 以及支持的版本和限制清单.

以下示例显示对数据库实例的允许域支持和创建IAM访问功能 目录服务.

```ts
declare const vpc: ec2.Vpc;
const role = new iam.Role(this, 'RDSDirectoryServicesRole', {
  assumedBy: new iam.ServicePrincipal('rds.amazonaws.com'),
  managedPolicies: [
    iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonRDSDirectoryServiceAccess'),
  ],
});
const instance = new rds.DatabaseInstance(this, 'Instance', {
  engine: rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_0_19 }),
  vpc,
  domain: 'd-????????', // The ID of the domain for the instance to join.
  domainRole: role, // Optional - will be create automatically if not provided.
});
```

**说明**: 除以上设置外, 您还需要确保数据库实例具有网络连接 到域控制器。 这包括允许跨VPC的交通,如果在不同的VPC中,并设置 允许数据库实例和域控制器之间的通信. 配置后,请查看 [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/kerberos-autentication.html 互联网档案馆的存檔,存档日期2014-12-21](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/kerberos-authentication.html) 详情 用于每个可用的数据库引擎的用户配置.

## 计量

数据库实例和集群都暴露了度量衡(`cloudwatch.Metric`:

```ts
// The number of database connections in use (average over 5 minutes)
declare const instance: rds.DatabaseInstance;
const dbConnections = instance.metricDatabaseConnections();

// Average CPU utilization over 5 minutes
declare const cluster: rds.DatabaseCluster;
const cpuUtilization = cluster.metricCPUUtilization();

// The average amount of time taken per disk I/O operation (average over 1 minute)
const readLatency = instance.metric('ReadLatency', { statistic: 'Average', period: Duration.seconds(60) });
```

## 启用 S3 集成

S3桶中的数据可以使用SQL查询导入或从某些数据库引擎中导出. 启用此功能 函数,设置 `s3ImportBuckets` 财务报告和审定财务报表 `s3ExportBuckets` 用于导入和导出的属性。 何时 配置, CDK 自动创建并配置 IAM 角色 . 此外 `s3ImportRole` 财务报告和审定财务报表 `s3ExportRole` 属性可用于直接设置此角色.

您可以在此读取更多关于将数据加载到(或从) S3 的数据 :

-   奥罗拉·迈斯克 [导入](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.LoadFromS3.html) 财务报告和审定财务报表 [导出](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.SaveIntoS3.html)。 。 。 .
-   奥罗拉·波斯格雷斯克 [导入](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Migrating.html#USER_PostgreSQL.S3Import) 财务报告和审定财务报表 [导出](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-s3-export.html)。 。 。 .
-   微软 SQL 服务器 - [进出口](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html)
-   邮递SQL - [导入](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html) 财务报告和审定财务报表 [导出](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/postgresql-s3-export.html)
-   预言 [进出口](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html)

以下片段设置一个数据库集群,其中包含不同S3桶的数据被导入和输出 -

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

declare const vpc: ec2.Vpc;
const importBucket = new s3.Bucket(this, 'importbucket');
const exportBucket = new s3.Bucket(this, 'exportbucket');
new rds.DatabaseCluster(this, 'dbcluster', {
  engine: rds.DatabaseClusterEngine.AURORA,
  instanceProps: {
    vpc,
  },
  s3ImportBuckets: [importBucket],
  s3ExportBuckets: [exportBucket],
});
```

## 创建数据库代理

亚马逊 RDS 代理服务器位于应用程序和关系数据库之间,以高效管理 连接数据库,提高应用程序的可扩展性。 学习更多关于 [亚马逊 RDS 代理](https://aws.amazon.com/rds/proxy/)

以下代码配置 RDS 代理服务器 `DatabaseInstance`。 。 。 .

```ts
declare const vpc: ec2.Vpc;
declare const securityGroup: ec2.SecurityGroup;
declare const secrets: secretsmanager.Secret[];
declare const dbInstance: rds.DatabaseInstance;

const proxy = dbInstance.addProxy('proxy', {
    borrowTimeout: Duration.seconds(30),
    maxConnectionsPercent: 50,
    secrets,
    vpc,
});
```

## 导出日志

您可以将数据库日志发布到 Amazon Cloud Watch Logs. 有了Cloud Watch日志,你可以对日志数据进行实时分析, 将数据存储在高度耐用存储中,并使用 Cloud Watch 日志代理管理数据。 这两个数据库都可以使用 实例和集群; 可用的日志类型取决于正在使用的数据库类型和引擎.

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

// Exporting logs from a cluster
const cluster = new rds.DatabaseCluster(this, 'Database', {
  engine: rds.DatabaseClusterEngine.aurora({
    version: rds.AuroraEngineVersion.VER_1_17_9, // different version class for each engine type
  }),
  instanceProps: {
    vpc,
  },
  cloudwatchLogsExports: ['error', 'general', 'slowquery', 'audit'], // Export all available MySQL-based logs
  cloudwatchLogsRetention: logs.RetentionDays.THREE_MONTHS, // Optional - default is to never expire logs
  cloudwatchLogsRetentionRole: myLogsPublishingRole, // Optional - a role will be created if not provided
  // ...
});

// Exporting logs from an instance
const instance = new rds.DatabaseInstance(this, 'Instance', {
  engine: rds.DatabaseInstanceEngine.postgres({
    version: rds.PostgresEngineVersion.VER_12_3,
  }),
  vpc,
  cloudwatchLogsExports: ['postgresql'], // Export the PostgreSQL logs
  // ...
});
```

## 选项组

一些 DB 引擎提供了额外的功能,从而更容易管理数据和数据库,并为您的数据库提供额外的安全性. Amazon RDS使用选项组来启用并配置这些特性. 一个选项组可以指定特性,称为选项, 用于特定亚马逊 RDS DB 实例.

```ts
declare const vpc: ec2.Vpc;
declare const securityGroup: ec2.SecurityGroup;

new rds.OptionGroup(this, 'Options', {
  engine: rds.DatabaseInstanceEngine.oracleSe2({
    version: rds.OracleEngineVersion.VER_19,
  }),
  configurations: [
    {
      name: 'OEM',
      port: 5500,
      vpc,
      securityGroups: [securityGroup], // Optional - a default group will be created if not provided.
    },
  ],
});
```

## 参数组

数据库参数指定数据库的配置方式. 例如,数据库参数可以指定资源的数量,如内存,以分配给数据库. 您通过将您的 DB 实例与参数组连接来管理您的数据库配置 . Amazon RDS定义了带有默认设置的参数组.

您可以为您的集群或实例创建自己的参数组,并将其与您的数据库关联 :

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

const parameterGroup = new rds.ParameterGroup(this, 'ParameterGroup', {
  engine: rds.DatabaseInstanceEngine.sqlServerEe({
    version: rds.SqlServerEngineVersion.VER_11,
  }),
  parameters: {
    locks: '100',
  },
});

new rds.DatabaseInstance(this, 'Database', {
  engine: rds.DatabaseInstanceEngine.SQL_SERVER_EE,
  vpc,
  parameterGroup,
});
```

指定参数的另一种方法是使用内置字段 `parameters` 为您创建 RDS 参数组. 如果您不想重复使用不同实例的参数组实例, 您可以使用 :

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

new rds.DatabaseInstance(this, 'Database', {
  engine: rds.DatabaseInstanceEngine.sqlServerEe({ version: rds.SqlServerEngineVersion.VER_11 }),
  vpc,
  parameters: {
    locks: '100',
  },
});
```

您无法同时指定参数映射和参数组 .

## 无服务器

[Amazon Aurora 无服务器](https://aws.amazon.com/rds/aurora/serverless/) 是对亚马逊的按需自动缩放配置 奥罗拉 数据库将自动启动、关闭和扩展容量 根据您的应用程序需要上下。 它能让你运行数据库 在云中不管理任何数据库实例.

以下示例初始化了一个Aurora Serverless PostgreSql集群. Aurora 无服务器集群可指定缩放属性,用于 根据工作量自动无缝地缩放数据库集群.

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

const cluster = new rds.ServerlessCluster(this, 'AnotherCluster', {
  engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL,
  parameterGroup: rds.ParameterGroup.fromParameterGroupName(this, 'ParameterGroup', 'default.aurora-postgresql10'),
  vpc,
  scaling: {
    autoPause: Duration.minutes(10), // default is to pause after 5 minutes of idle time
    minCapacity: rds.AuroraCapacityUnit.ACU_8, // default is 2 Aurora capacity units (ACUs)
    maxCapacity: rds.AuroraCapacityUnit.ACU_32, // default is 16 Aurora capacity units (ACUs)
  }
});
```

Aurora 无服务器集群不支持以下特性:

-   从 Amazon S3 桶装入数据
-   将数据保存到 Amazon S3 桶
-   引用带有 Aurora MySQL 本地函数的 AWS Lambda 函数
-   奥罗拉复制品
-   后跟踪
-   多主集群
-   数据库克隆
-   IAM 数据库克隆
-   IAM 数据库认证
-   从 MySQL DB 实例恢复快照
-   性能透视
-   RDS 代理服务器

更多关于 [aurora 无服务器的限制](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html#aurora-serverless.limitations)

通过读取 Amazon Aurora 服务器来学习更多使用 [文档](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html)

使用 `ServerlessClusterFromSnapshot` 从快照创建无服务器集群 :

```ts
declare const vpc: ec2.Vpc;
new rds.ServerlessClusterFromSnapshot(this, 'Cluster', {
  engine: rds.DatabaseClusterEngine.AURORA_MYSQL,
  vpc,
  snapshotIdentifier: 'mySnapshot',
});
```

### 数据 API

您可以使用内建数据 API 访问您的 Aurora 服务器无 DB 集群 。 Data API不需要持续连接到 DB 集群. 相反,它提供了一个安全的HTTP端点并和AWS SDKs集成.

以下示例显示给予Lamba函数Data API访问权限.

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

const cluster = new rds.ServerlessCluster(this, 'AnotherCluster', {
  engine: rds.DatabaseClusterEngine.AURORA_MYSQL,
  vpc, // this parameter is optional for serverless Clusters
  enableDataApi: true, // Optional - will be automatically set if you call grantDataApiAccess()
});

declare const code: lambda.Code;
const fn = new lambda.Function(this, 'MyFunction', {
  runtime: lambda.Runtime.NODEJS_14_X,
  handler: 'index.handler',
  code,
  environment: {
    CLUSTER_ARN: cluster.clusterArn,
    SECRET_ARN: cluster.secret!.secretArn,
  },
});
cluster.grantDataApiAccess(fn);
```

**说明**:要引用 Data API,资源需要读取与集群相关的秘密.

要了解更多使用数据 API的情况,请参见 [文档](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html)。 。 。 .

### 默认 VPC

这个 `vpc` 参数是可选的.

如果不提供,该集群将在账户和区域的默认 VPC 中创建. 由于此 VPC 不部署在 AWS CDK 中, 您无法配置 `vpcSubnets`, (中文(简体) ), `subnetGroup` 或者说 `securityGroups` aurora无服务器集群. 如果你想提供其中之一 `vpcSubnets`, (中文(简体) ), `subnetGroup` 或者说 `securityGroups` 参数,请提供a `vpc`。 。 。 .

## 常见问题

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

AWS:RDS 的 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

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

在项目目录运行 npm install @aws-cdk/aws-rds，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@aws-cdk/aws-cloudwatch（1\.204\.0）、@aws-cdk/aws-ec2（1\.204\.0）、@aws-cdk/aws-events（1\.204\.0）、@aws-cdk/aws-iam（1\.204\.0）、@aws-cdk/aws-kms（1\.204\.0）、@aws-cdk/aws-logs（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/cx-api（1\.204\.0）、constructs（^3\.3\.69）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

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

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

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

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

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

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

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

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

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

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

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

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

