1. 简介

Amazon Aurora 是一款兼容 MySQL 和 PostgreSQL 的云原生关系型数据库,它融合了高端商业数据库的高性能与高可用性,同时具备开源数据库的简洁性和成本效益。

在本教程中,我们将重点介绍如何通过 Java 创建并操作 Amazon RDS 实例,并连接执行 SQL 测试。适合有一定经验的开发者快速上手 Aurora 的开发与集成。

我们从项目搭建开始。

2. Maven 依赖配置

首先创建一个 Maven 项目,并添加 AWS SDK 的依赖:

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>aws-sdk-java</artifactId>
    <version>2.24.9</version>
</dependency>

最新版本可以前往 Maven Central 查看。

3. 准备工作(Prerequisites)

在使用 AWS SDK 之前,需要准备以下内容:

AWS 账户:如果你还没有 AWS 账户,请前往 AWS 官网注册

安全凭证(Security Credentials)

选择 AWS 区域(Region)

  • RDS 实例需要部署在特定区域,不同区域价格可能不同
  • 更多信息请参考 官方定价文档
  • 本教程使用 **Asia Pacific (Sydney)**,即 ap-southeast-2

4. 连接 AWS RDS 服务

我们需要创建一个客户端连接来访问 Amazon RDS Web 服务:

RdsClient rdsClient = RdsClient.builder()
    .region(Region.AP_SOUTHEAST_2)
    .credentialsProvider(ProfileCredentialsProvider.create("default"))
    .build();

5. 创建 Aurora 实例

5.1. 创建 RDS 实例

创建 RDS 实例前,需要构建一个 CreateDbInstanceRequest 对象,包含如下关键属性:

  • DB 实例标识符:全局唯一的名称
  • 实例类型(Instance Class):CPU、内存等配置,参考 实例类型表
  • 数据库引擎:支持 MySQL 或 PostgreSQL,这里我们使用 PostgreSQL
  • 主用户名和密码
  • 初始数据库名称
  • 存储类型:如 gp2(通用 SSD),参考 EBS 类型说明
  • 存储空间大小(GiB)

示例代码如下:

CreateDbInstanceRequest instanceRequest = CreateDbInstanceRequest.builder()
    .dbInstanceIdentifier("Sydney")
    .engine("postgres")
    .multiAZ(false)
    .masterUsername(db_username)
    .masterUserPassword(db_password)
    .dbName(db_database)
    .storageType("gp2")
    .allocatedStorage(10)
    .build();

然后调用 createDBInstance() 方法创建实例:

CreateDbInstanceResponse createDbInstanceResponse = rdsClient.createDBInstance(instanceRequest);

⚠️ 注意:该调用是异步的,响应中不会立即返回 Endpoint URL

5.2. 查询已创建的 DB 实例

使用 describeDBInstances() 方法列出所有实例信息:

DescribeDbInstancesResponse response = rdsClient.describeDBInstances();
List<DBInstance> instances = response.dbInstances();
for (DBInstance instance : instances) {
    String identifier = instance.dbInstanceIdentifier();
    String engine = instance.engine();
    String status = instance.dbInstanceStatus();
    Endpoint endpoint = instance.endpoint();
    String endpointUrl = "Endpoint URL not available yet.";
    if (endpoint != null) {
        endpointUrl = endpoint.toString();
    }
    logger.info(identifier + "\t" + engine + "\t" + status);
    logger.info("\t" + endpointUrl);
}

其中,Endpoint URL 是连接数据库时所需的主机地址。

5.3. JDBC 测试连接

接下来我们通过 JDBC 连接数据库并执行基本操作。

首先创建 db.properties 文件,填写数据库连接信息:

db_hostname=<Endpoint URL>
db_username=username
db_password=password
db_database=mydb

加载配置并连接数据库:

Properties prop = new Properties();
InputStream input = AwsRdsDemo.class.getClassLoader().getResourceAsStream("db.properties");
prop.load(input);
String db_hostname = prop.getProperty("db_hostname");
String db_username = prop.getProperty("db_username");
String db_password = prop.getProperty("db_password");
String db_database = prop.getProperty("db_database");

建立连接并创建表:

Connection conn = DriverManager.getConnection(jdbc_url, db_username, db_password);
Statement statement = conn.createStatement();
String sql = "CREATE TABLE IF NOT EXISTS jdbc_test (id SERIAL PRIMARY KEY, content VARCHAR(80))";
statement.executeUpdate(sql);

插入数据:

PreparedStatement preparedStatement = conn.prepareStatement("INSERT INTO jdbc_test (content) VALUES (?)");
String content = "" + UUID.randomUUID();
preparedStatement.setString(1, content);
preparedStatement.executeUpdate();

查询数据:

String sql = "SELECT count(*) as count FROM jdbc_test";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
    String count = resultSet.getString("count");
    Logger.log("Total Records: " + count);
}

5.4. 删除实例

删除 DB 实例需要构建 DeleteDbInstanceRequest,并传入实例标识符和是否跳过快照参数:

DeleteDbInstanceRequest request = DeleteDbInstanceRequest.builder()
    .dbInstanceIdentifier(identifier)
    .skipFinalSnapshot(true)
    .build();

DeleteDbInstanceResponse response = rdsClient.deleteDBInstance(request);

⚠️ 如果设置 skipFinalSnapshot = false,则会在删除前自动创建一个快照用于备份。

6. 总结

本文介绍了如何使用 AWS SDK 通过 Java 与 Amazon Aurora(PostgreSQL)进行交互,涵盖了从创建实例、连接数据库、执行 SQL 到删除实例的完整流程。

Aurora 相比原生 MySQL 和 PostgreSQL,性能提升明显(最高可达 5 倍于 MySQL,3 倍于 PostgreSQL),是很多企业级应用的首选方案。

更多详情请访问 Amazon Aurora 官方页面

代码示例可在 GitHub 仓库 获取。


原始标题:Guide to AWS Aurora RDS with Java