本文描述了如何从AWS CLI命令行工具管理创建并管理RDS Aurora for MySQL数据库集群。
一、准备工作
1、配置CLI
首先在要操作API的Linux上或者本地Windows上,配置好API,且设置API的默认区域是要进行操作的区域。
2、确认创建RDS时候要调用的安全规则组
请进入VPC界面,安全规则组的管理界面中,提前创建好一个数据库专用的安全组,并记录下他的ID,如下图,其中sg-0246xxxxx开头的这一串就是安全规则组ID,后续会用到。
这个步骤,如果希望也通过API查询,则使用如下API:
aws ec2 describe-security-groups
返回结果是JSON格式的,可以用代码进行处理,从中可以找到group名字和ID,也包括了安全组规则。如下图。
至此我们获得了安全规则组ID。
3、确认创建RDS时候要调用的子网组
创建RDS时候,要指定RDS要接入的子网分组。这个参数,在控制台上,可以通过RDS服务下的“Subnet Groups”查询,其中Name列出的“default-vpc-27xxxxx”就是要调用的子网ID。
这个参数也可以通过CLI命令获得,方法是:
aws rds describe-db-subnet-groups
执行结果如下,输出结果是JSON格式。其中红色部分就是子网ID。
至此获得了子网ID。
4、创建RDS加密所需要的KEY
(1)本区域已经通过控制台图形界面创建过数据库,那么将自动生成加密的Key,可以使用如下命令查询。
aws kms list-keys
加入本区域内有key,则会输出如下的内容:
从上图中,需要记住KeyId,在下边创建RDS时候需要指定。
(2)如果本区域尚无任何Key,上一个方法中的查询命令无法查询到,则执行如下命令生成Key。(执行本命令的API需要具有KMS权限)
aws kms create-key \
--description "RDSkey" \
--origin AWS_KMS
创建完成效果图。请记住返回值中的KeyId,下一步需要指定。
5、查询RDS可用规格
通过控制台,可以看到可以创建的RDS实例规格。例如本文使用 db.r5.large 规格。需要主要的是RDS只能使用这个列表中的规格,不能使用一般EC2虚拟机的规格。
至此准备工作完成。
二、创建数据库
1、从CLI创建RDS集群(不含RDS实例)
执行如下命令:
aws rds create-db-cluster \
--db-cluster-identifier mycluster04 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.07.1 \
--kms-key-id 9c172bb7-d1c7-4d3d-b827-f274cc25a24e \
--storage-encrypted \
--master-username master \
--master-user-password secret99 \
--db-subnet-group-name eu-subnet \
--vpc-security-group-ids sg-016476651f5de2cbb \
--enable-cloudwatch-logs-exports \
'["audit","error","general","slowquery"]'
请把上述命令中,将–kms-key-id需要替换为上一步输出的KMS key;将–db-subnet-group-name为本文前边步骤查询出来的子网组;将–vpc-security-group-ids替换为本文前文查询出来的安全规则组ID。数据库管理员的用户名和密码可以自行指定。
此外,有一个需要注意的是数据库版本,我们输入5.7.mysql_aurora.2.07.1是指AWS Aurora for MySQL的数据库5.7系列的2.07.1版本,这个2.07.1是AWS自己的版本号,这个版本是已经支持零停机升级等众多特性的版本。本文结尾的参考文档中,AWS原始文档提到的代码样例输入是5.7.12,这个版本是一个比较老的版本,不支持Performance Insight监控等特性,因此不要选用。请使用本文提供的版本号。
等待几分钟创建完成。输出结果如下:
至此集群创建完成。
请注意返回信息中的endpoint地址,即 mycluster04.cluster-coxprirjp8qm.eu-central-1.rds.amazonaws.com 就是集群访问地址。另外返回信息也包含了reader的只读节点的endpoint入口地址。
2、从CLI创建RDS写入实例(writer节点)
在AWS的控制台上图形界面中,创建RDS会自动创建Writer实例,选了高可用后,会自动创建第一个Reader实例。但是,通过CLI,创建Cluster只是创建一个集群,本身是不包含写入节点的,必须再发送命令触发。
执行如下命令:
aws rds create-db-instance \
--db-cluster-identifier mycluster04 \
--db-instance-class 5.7.mysql_aurora.2.07.1 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.07.1 \
--db-instance-identifier mydb04
本文中,不需要在提交用户名和密码参数了,因为在cluster步骤已经设置了用户名和密码。这几个需要提交的是最小化参数。其中,替换–db-cluster-identifier是为第一步创建时候指定的集群名称。
执行命令后,返回结果如下截图,创建需要5分钟左右。
请注意,返回结果中也包含一个endpoint,但这个地址是写入节点本机的,不是集群地址,不具备高可用能力,因此程序中不能使用这个地址连接数据库。程序应使用前文创建的cluster的endpoint连接。
至此第一个写入节点创建完成。
3、创建只读节点
在使用Aurora for MySQL数据库场景下,一个集群允许创建15个节点。Aurora创建只读节点调用的API和创建写入节点是同一个。我们本文末尾的参考资料中,查找RDS对象时候,从RDS文档中可以看到一个名为“create-db-instance-read-replica”的接口,这个接口是只对RDS for MySQL有效,对Aurora for MySQL不需要使用此接口。
由此,执行如下命令:
aws rds create-db-instance \
--db-cluster-identifier mycluster04 \
--db-instance-class db.r5.large \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.07.1 \
--db-instance-identifier mydb04-reader
在这段命令中,集群名称必须使用前边步骤的创建的集群名称。主机规格建议选择和写入节点一致,也可以选择不一致。最后的只读节点名字可以随意,推荐按照写入节点名字加后缀的方式。
返回结果如下。
三、验证数据库访问
接下来我们验证下API效果。登录到控制台,可以看到数据库创建成功。
我们使用SSH登录到EC2上,连接测试从CLI开通的数据库。请注意,连接时候不要使用上文中的写入节点的endpoint地址,而是要使用第一页创建出来的Cluster集群的Endpoint地址。命令如下:
mysql -h mycluster03.cluster-coxprirjp8qm.eu-central-1.rds.amazonaws.com -u master -p
可以看到连接成功。
连接成功后,执行如下命令,可查询Aurora for MySQL的版本。
select AURORA_VERSION();
查询结果如下截图。
至此创建数据库完成。
四、配置修正问题
AWS RDS是托管服务,有大量的管理性功能,通过控制台UI图形界面配置,对某参数或者功能enable或者disable随时可见。通过CLI命令行和接口创建RDS,大部分参数都是default值,不显式指定,系统就会使用默认值。这样也带来一个问题,可有需要打开的功能,并未在开通的时候打开。
对此解决办法是,对照控制台的图形界面,逐个确认希望打开的功能,然后查询API文档,找到对应参数,最后放在API接口上执行变更命令接口,修改RDS集群或实例的配置。这里需要注意,部分参数只对集群(Cluster)有效,部分参数只对实例(Instance)有效。而且,部分参数修改需要重启生效。
这里以Performance Insight监控为例。当通过上文的API创建数据库时候,是没有打开增强监控的。那么在数据库创建完毕后,可以通过CLI执行变更,打开增强监控。
编辑如下命令,将对应的ID都替换为上文创建好的数据库,并执行如下命令。
aws rds modify-db-instance \
--db-instance-identifier mydb04 \
--enable-performance-insights \
--performance-insights-retention-period 7 \
--performance-insights-kms-key-id 9c172bb7-d1c7-4d3d-b827-f274cc25a24e
上边命令中的–db-instance-identifier要替换成实例的名字(注意不是集群名字),使用的kms-id需要替换成前文创建数据库时候调用的id。
执行结果如下截图,可看到红色标记部分的Performance Insight已经是Enable。
至此,数据库的配置变更完毕。其他数据参数仿照此方法进行变更。
五、参考文档
查询EC2安全规则组:
https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-groups.html
查询RDS集群的配置:
https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-subnet-groups.html
查询KMS ID
创建集群:
https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html
创建Aurora写入/只读节点
https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html
调整cluster级别的参数:
https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html
调整instance级别的参数:
https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html
全文完。