Logo
Section 1 / 3

创建并连接到 Amazon RDS

按照逐步说明,将数据库从本地服务器迁移至亚马逊关系型数据库服务。

导入

创建并连接到 Amazon RDS

按照逐步说明,将数据库从本地服务器迁移至亚马逊关系型数据库服务。

在本章中,我们将把本地的 PostgreSQL 数据库迁移至由亚马逊提供的在线服务器。

...
Amazon RDS and PostgreSQL

首先,你需要一个 AWS 账户。如果你还没有账户,请访问 https://aws.amazon.com 并创建一个。虽然需要绑定信用卡,但使用本课程中讨论的免费套餐服务不会产生任何费用。

使用 AWS CLI 执行命令

请使用下方终端执行用于创建和管理 Amazon RDS 实例的 AWS CLI 命令。要使用 AWS CLI,需先配置 AWS 凭证。

你必须已将 AWS 访问密钥 ID 和 AWS 秘密访问密钥保存在某个位置。如果尚未拥有或希望生成新的密钥,请按以下步骤操作:

  1. 登录你的 AWS 账户
  2. 点击左上角的 Services 下拉菜单
  3. 在 Security, Identity, & Compliance 下选择 IAM
  4. 在左侧边栏点击 Users
  5. 选择(或创建)你想要获取密钥的用户
  6. 打开 Security credentials 标签页
  7. 选择 Create access key

每次连接到以下终端时,都需要配置你的 AWS 凭证。我们已为你自动完成此步骤。每次连接终端时,你的 AWS 凭证将已配置好。请在下方终端中以环境变量形式提供你的 AWS 访问密钥 ID 和秘密访问密钥:

Terminal

注意: 如果在执行命令过程中终端断开连接,请重新连接后从断点处继续操作。

创建数据库实例

在上方终端中执行以下命令,创建一个 RDS PostgreSQL 数据库实例:

1aws rds create-db-instance --db-name example_1 --db-instance-identifier database-1 --db-instance-class db.t3.micro --engine postgres --master-username educative --master-user-password password123 --backup-retention-period 7 --port 5432 --publicly-accessible --allocated-storage 10

上述 create-db-instance 命令包含多个参数,部分说明如下:

  • db-name 定义数据库名称,在本例中为 example_1。
  • master-username 定义数据库用户名,在本例中为 educative。
  • master-user-password 定义数据库密码,在本例中为 password123。

我们需要将这些值添加到 settings.py 文件中的 DATABASES 字段。此外,还需将这些值保存下来,以便在最后一章部署项目到 Heroku 时使用。为此,我们将使用平台提供的 API 密钥功能,该功能集成在代码组件中,外观如以下图片所示:

...
API keys

要将这些值设置为 API 密钥,请进入下方“测试功能”部分的组件。点击 编辑 按钮,并按以下顺序输入:

  • example_1 填入 RDS_DB_NAME 字段。
  • educative 填入 RDS_DB_USERNAME 字段。
  • password123 填入 RDS_DB_PASSWORD 字段。

RDS_DB_HOST 将稍后添加。

一旦保存这些值,它们将自动填入 settings.py 文件的第 94 至 96 行。同时,这些值也将被保存以供最后一章使用。

创建数据库实例需要几分钟时间(大约 5 到 10 分钟)。你可以等待实例 database-1 变为可用状态:

1aws rds wait db-instance-available --db-instance-identifier database-1

配置安全组入站规则

接下来需要配置安全组的入站规则。第一步是获取数据库实例的安全组 ID。由于后续会用到该 ID,我们将它保存在一个名为 SGID 的变量中:

1export SGID=`aws rds describe-db-instances --query "*[].VpcSecurityGroups[].[VpcSecurityGroupId]"`

你可以通过执行 echo $SGID 命令查看 SGID 变量的内容。

此处假设系统中仅有一个 RDS 实例。若存在多个实例,则 describe-db-instances 命令的输出将是一个数组,查询语句需相应调整。如果你熟悉 JSON,这应该不难处理。

SGID 变量包含方括号和引号。我们将其清理掉:

1SGID=`echo $SGID | cut -d'"' -f 2`

执行 echo $SGID 命令以打印数据库实例的安全组 ID。将该值保存为下方组件中的 RDS_DB_SGID API 密钥。

最后,配置安全组以允许端口 5432 的入站连接:

1aws ec2 authorize-security-group-ingress --group-id $SGID --protocol tcp --port 5432 --cidr 0.0.0.0/0

获取 RDS 实例的主机名

使用以下命令获取 RDS 实例的主机名:

1aws rds describe-db-instances --query "*[].[Endpoint.Address][0][0]"

你将得到类似 database-1.**********.rds.amazonaws.com 的结果。将该值保存为下方组件中的 RDS_DB_HOST API 密钥。它将在 settings.py 文件的第 97 行替换 HOST 属性的值。

请注意,上述查询假设我们只有一个 RDS 实例,因此使用索引 0 获取第一个(也是唯一一个)实例的主机名。如果你有多个 RDS 实例,则需修改查询。例如,若有五个实例,最后一个(第五个)实例的索引应为 4,查询应改为 "*[].[Endpoint.Address][4][0]"。

测试功能

No configuration found for ID: 0936e2a5ae92b111c11955442c33d8f64b0b94fa0914918c908d17f48e986506

运行应用程序并访问 Listings 页面。由于我们使用的是一个全新的、无数据的数据库,页面中应无任何列表项。

测试数据库的第一步是使用注册表单创建一个账户。账户创建成功后,使用新账号登录。登录成功即表示你已成功连接到 Amazon RDS。尝试通过 New Listing 页面创建新的房源,并前往 Listings 页面查看这些房源。

注意: 使用完 RDS 后,建议删除数据库实例。你可以通过 AWS 控制台或 CLI 删除该实例以释放 RDS 资源。但请注意,我们在最后一章仍需使用 RDS 数据库实例来部署项目到 Heroku。因此,建议在完成课程后再释放 RDS 资源。

美化 Django 网络应用

创建 Amazon S3 存储桶