使用AWS CLI创建RDS for MySQL数据库

本文描述了如何从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

全文完。