简介
订单应用需要关系型数据库才能保存客户订单。本实验将使用 Amazon RDS 创建私有 PostgreSQL 数据库,通过标准 SQL 客户端连接,并配置应用使用新的端点。
你应已了解前面 VPC 和 EC2 课程中的 VPC 子网、安全组和应用连接。环境提供网络、应用和配置好的 AWS CLI,无需个人 AWS 账户。实验结束时将删除数据库。
认证考点关联
本实验为以下考试主题提供入门级动手练习。
- Cloud Practitioner (CLF-C02) · 任务 3.4:认识 Amazon RDS 作为托管关系型数据库服务的用途。
- Solutions Architect – Associate (SAA-C03) · 任务 3.3:理解数据库引擎和应用的数据库连接。
创建应用数据库
这一步将在预置的数据库网络中创建私有 PostgreSQL 实例。
Amazon RDS 管理关系型数据库实例。PostgreSQL 是存储表并执行 SQL 的数据库引擎。AWS CLI 管理 RDS 资源;SQL 客户端连接引擎以操作数据。创建 RDS 实例与查询表是不同的操作。
AWS Management Console 适合探索服务和查看资源。CLI 适合精确查询、重复操作和自动化,但掌握语法需要练习。本课程使用准备好的 Terminal 和 AWS View。AWS View 展示本实验的资源和应用结果,是与 AWS Management Console 分开的界面。
进入工作目录并加载提供的连接设置:
cd /home/labex/project
source database.env
DB_SECURITY_GROUP_ID 标识数据库的预置网络访问规则。PGSERVICEFILE 和 PGPASSFILE 告诉 PostgreSQL 客户端从哪里读取常规连接文件和密码文件。保持密码文件私密,无需显示其内容。
查看预置的 DB 子网组:
aws rds \
describe-db-subnet-groups \
--db-subnet-group-name orders-subnets \
--query 'DBSubnetGroups[].{Name:DBSubnetGroupName,VPC:VpcId,Subnets:Subnets[].SubnetIdentifier}'
DB 子网组指定可供 RDS 放置实例的 VPC 子网。本组包含两个可用区中的私有数据库子网。组中有两个子网本身并不代表启用了 Multi-AZ 部署。
创建实例:
aws rds \
create-db-instance \
--db-instance-identifier orders-db \
--db-instance-class db.t3.micro \
--engine postgres \
--engine-version 16.15 \
--allocated-storage 20 \
--master-username orders_admin \
--master-user-password "$(cat db-password.txt)" \
--db-name orders \
--db-subnet-group-name orders-subnets \
--vpc-security-group-ids "$DB_SECURITY_GROUP_ID" \
--no-publicly-accessible \
--backup-retention-period 0 \
--query 'DBInstance.{Identifier:DBInstanceIdentifier,Status:DBInstanceStatus,Engine:Engine}'
实例标识符 orders-db 是 RDS 资源的名称;数据库名称 orders 是该实例内部 PostgreSQL 数据库的名称。db.t3.micro 指定实例规格,20 是申请的存储大小,单位为 GiB。私有访问将应用连接限制在预置网络内。本次短期练习关闭自动备份保留;后续实验会介绍手动快照。
$(cat db-password.txt) 传入准备好的数据库密码,而不打印密码。不要将密码粘贴到笔记或截图中。
等待实例可用,然后查看连接端点:
aws rds \
wait db-instance-available \
--db-instance-identifier orders-db
aws rds \
describe-db-instances \
--db-instance-identifier orders-db \
--query 'DBInstances[0].{Identifier:DBInstanceIdentifier,Database:DBName,Status:DBInstanceStatus,Endpoint:Endpoint}'
预期数据库为 orders,状态为 available,PostgreSQL 端口为 5432。端点 是客户端选择此数据库实例的地址。AWS View 此时应列出主数据库 orders-db。目前尚未创建订单表。
连接 SQL 客户端和应用
这一步将测试数据库引擎,并将应用指向其端点。
psql 是 PostgreSQL 的标准命令行客户端。准备好的 orders-db 服务条目保存刚创建实例的连接详情。服务名称是方便使用的客户端配置条目,并不是 AWS 资源。

概念图:私有 PostgreSQL 连接需要可达端点和获准端口。
查询引擎:
psql \
"service=orders-db" \
--command 'SELECT current_database(), current_user;'
预期数据库为 orders,用户为 orders_admin。该结果来自数据库连接,而不是 RDS 资源元数据。RDS 管理数据库主机;应用通过数据库协议连接,而不是通过 SSH 访问主机。
从 RDS 获取端点。--query 选择一个字段,--output text 输出普通文本值,Shell 的 $(...) 将其保存到 DB_ENDPOINT:
DB_ENDPOINT=$(aws rds \
describe-db-instances \
--db-instance-identifier orders-db \
--query 'DBInstances[0].Endpoint.Address' \
--output text)
查看提供的应用配置:
cat app-config.json
read_host 选择查询使用的数据库,write_host 选择修改使用的数据库。目前两者都应使用主库。password_file 引用私有文件,而不是在此 JSON 文档中直接存放密码。
使用 JSON 编辑工具 jq 设置两个主机字段。先写入新文件,编辑成功后再替换原配置:
jq \
--arg host "$DB_ENDPOINT" \
'.read_host = $host | .write_host = $host' \
app-config.json > app-config.new
mv app-config.new app-config.json
测试应用连接:
curl \
--silent \
--show-error \
--fail \
http://127.0.0.1:8080/application/connection
预期 database 为 orders、user 为 orders_admin、read_only 为 false。主库可以接受写入,但本实验只建立连接。在订单表创建之前,AWS View 的订单列表仍不可用;下一实验将创建该表。

示例展示应用连接到主库中的 orders 数据库及其原生 RDS 端点。目前尚未创建订单表。你的资源标识符可能不同。

官方 Console 示例:Connectivity & security 中的 Endpoint 和 Port 对应 CLI 响应的 Endpoint.Address 与 Endpoint.Port。官方示例显示 MySQL 的 3306;本实验使用 PostgreSQL 的 5432 和你自己的命令返回的端点。不要复制示例主机名或端口。继续使用 Terminal 和 AWS View,无需登录 AWS。
Source: AWS RDS guide.
删除数据库实例
这一步将删除短期使用的数据库,同时保留预置的应用和网络。
删除实例,不保留最终快照:
aws rds \
delete-db-instance \
--db-instance-identifier orders-db \
--skip-final-snapshot \
--query 'DBInstance.DBInstanceIdentifier'
--skip-final-snapshot 将丢弃练习数据库,而不保存恢复副本。对于重要数据,应在删除实例前确定如何保留备份。
等待删除完成并查看资源清单:
aws rds \
wait db-instance-deleted \
--db-instance-identifier orders-db
aws rds \
describe-db-instances \
--query 'DBInstances[].DBInstanceIdentifier'
预期结果为 [],AWS View 应不再显示数据库。应用的旧端点已没有对应数据库,因此删除后连接失败是预期情况。保留提供的子网组、安全组和应用文件。
总结
你创建了私有 RDS PostgreSQL 实例,区分了资源标识符与数据库名称,并查看了端点。随后使用 psql 查询引擎,将应用连接到同一主库,最后删除实例并保留预置网络。
下一实验将创建订单表,并使用 SQL 保存和查询客户订单。



