亚马逊文档DB 构建库
AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.
关于如何移徙的更多信息,请参见: 移动到 AWS CDK v2 指南。 。 。 .
启动分组数据库
要建立分组文档数据库,请定义 DatabaseCluster您必须
总是在VPC中启动一个数据库. 使用 vpcSubnets 属性到控件是否
您的情况将被单独或公开启动 :
declare const vpc: ec2.Vpc;
const cluster = new docdb.DatabaseCluster(this, 'Database', {
masterUser: {
username: 'myuser', // NOTE: 'admin' is reserved by DocumentDB
excludeCharacters: '\"@/:', // optional, defaults to the set "\"@/" and is also used for eventually created rotations
secretName: '/myapp/mydocdb/masteruser', // optional, if you prefer to specify the secret name
},
instanceType: ec2.InstanceType.of(ec2.InstanceClass.R5, ec2.InstanceSize.LARGE),
vpcSubnets: {
subnetType: ec2.SubnetType.PUBLIC,
},
vpc,
});
默认情况下,主密码会生成并存储在AWS Secrets管理器中,并带有自动生成的描述.
您的集群默认为空 .
连接中
要控制谁可以访问集群,请使用 .connections 属性。 文档DB 数据库有一个默认端口, 所以
您不需要指定端口 :
declare const cluster: docdb.DatabaseCluster;
cluster.connections.allowDefaultPortFromAnyIpv4('Open to the world');
访问您数据库集群的终点将作为 .clusterEndpoint 财务报告和审定财务报表 .clusterReadEndpoint
属性 :
declare const cluster: docdb.DatabaseCluster;
const writeAddress = cluster.clusterEndpoint.socketAddress; // "HOSTNAME:PORT"
如果您要添加到集群中, 请使用 addSecurityGroups 方法。 警卫
这样添加的组将不会由 Connections 组合对象.
declare const vpc: ec2.Vpc;
declare const cluster: docdb.DatabaseCluster;
const securityGroup = new ec2.SecurityGroup(this, 'SecurityGroup', {
vpc,
});
cluster.addSecurityGroups(securityGroup);
删除保护
在 Amazon DocumentDB 集群上可以启用删除保护来防止意外删除集群:
declare const vpc: ec2.Vpc;
const cluster = new docdb.DatabaseCluster(this, 'Database', {
masterUser: {
username: 'myuser',
},
instanceType: ec2.InstanceType.of(ec2.InstanceClass.R5, ec2.InstanceSize.LARGE),
vpcSubnets: {
subnetType: ec2.SubnetType.PUBLIC,
},
vpc,
deletionProtection: true, // Enable deletion protection.
});
证书的轮换
当主密码生成并存储在 AWS 秘密管理器中时,可以自动旋转:
declare const cluster: docdb.DatabaseCluster;
cluster.addRotationSingleUser(); // Will rotate automatically after 30 days
还有多种用户轮换计划:
import * as secretsmanager from '@aws-cdk/aws-secretsmanager';
declare const myImportedSecret: secretsmanager.Secret;
declare const cluster: docdb.DatabaseCluster;
cluster.addRotationMultiUser('MyUser', {
secret: myImportedSecret, // This secret must have the `masterarn` key
});
还可以与集群一起创建用户证书并加入旋转:
declare const cluster: docdb.DatabaseCluster;
const myUserSecret = new docdb.DatabaseSecret(this, 'MyUserSecret', {
username: 'myuser',
masterSecret: cluster.secret,
});
const myUserSecretAttached = myUserSecret.attach(cluster); // Adds DB connections information in the secret
cluster.addRotationMultiUser('MyUser', { // Add rotation using the multi user scheme
secret: myUserSecretAttached, // This secret must have the `masterarn` key
});
说明:这个用户必须使用主证书在数据库中手动创建. 一旦该用户存在, 旋转将立即开始 .
另见 @aws-cdk/aws-机密管理员 现有集群的证书轮换.
审计和档案员
发送审计或配置程序需要配置到两个位置:
import * as iam from '@aws-cdk/aws-iam';
import * as logs from'@aws-cdk/aws-logs';
declare const myLogsPublishingRole: iam.Role;
declare const vpc: ec2.Vpc;
const cluster = new docdb.DatabaseCluster(this, 'Database', {
masterUser: {
username: 'myuser',
},
instanceType: ec2.InstanceType.of(ec2.InstanceClass.R5, ec2.InstanceSize.LARGE),
vpcSubnets: {
subnetType: ec2.SubnetType.PUBLIC,
},
vpc,
exportProfilerLogsToCloudWatch: true, // Enable sending profiler logs
exportAuditLogsToCloudWatch: true, // Enable sending audit logs
cloudWatchLogsRetention: logs.RetentionDays.THREE_MONTHS, // Optional - default is to never expire logs
cloudWatchLogsRetentionRole: myLogsPublishingRole, // Optional - a role will be created if not provided
});