使用 亚马逊云科技 CLI 自动创建多个 亚马逊云科技 DMS 终端节点和复制任务

2023 年 7 月:这篇文章经过审核以确保准确性。

亚马逊云科技 数据库迁移服务 (亚马逊云科技 DMS) 是一项托管迁移和复制服务,可帮助您将数据库和分析工作负载快速、安全地迁移到 亚马逊云科技,同时最大限度地减少停机时间和零数据丢失。亚马逊云科技 DMS 可以将您的数据从 亚马逊云科技 DMS 支持的来源 迁移 到 亚马逊云科技 DMS 支持的目标 ,包括最广泛使用的商业和开源数据库。亚马逊云科技 DMS 迁移任务的自动化具有以下好处:

  • 减少了手动操作
  • 由于自动化,缩短了时间
  • 可重复
  • 更简单的测试和验证过程

总体而言,亚马逊云科技 DMS 要求以下内容:

  • 用于识别源平台和目标平台以及成功连接到数据库所需的信息的端点
  • 一个 亚马逊云科技 DMS 任务,用于映射正在迁移的对象以及单个对象级别所需的任何特殊处理

在这篇文章中,我们向您展示了自动创建 亚马逊云科技 DMS 终端节点和 亚马逊云科技 DMS 任务的解决方案。

解决方案概述

我们的用例包括从微软 SQL Server 数据库迁移到兼容 Amazon Aurora PostgreSQL 的版本数据库。 该解决方案由包含在 GitHub 存储库 中的脚本组成 ,该脚本根据存储在 亚马逊云科技 Secrets Manager 中的参数和密码运行 亚马逊云科技 命令行接口 ( 亚马逊云科技 CLI) 命令 。解决方案的架构以图表形式呈现在以下流程图中,该流程图将引导您完成自动和验证 亚马逊云科技 DMS 终端节点和任务的创建过程。

流程图包括以下步骤:

  1. GitHub 存储库 中启动 blog_createdmsall.sh 脚本 。
  2. 确定数据库密钥是否存在。
    1. 如果不是,请继续执行步骤 3。
    2. 如果是,请继续执行步骤 4。
  3. 提示输入用户 ID 和密码,并创建密钥。
  4. 从 CSV 文件中读取数据库信息。
  5. 通过从密钥管理器检索证书来创建端点。
  6. 生成 亚马逊云科技 DMS 数据复制任务创建脚本。
  7. 使用 RUNNOW 选项生成 亚马逊云科技 DMS 数据验证任务创建脚本:
    1. 如果 没有 ,则修改特定数据库的表映射或任务设置 JSON。
    2. 如果 ,请继续执行步骤 9。
  8. 测试端点连接。
  9. 创建 亚马逊云科技 DMS 数据复制任务。
  10. 创建 亚马逊云科技 DMS 数据验证任务。

先决条件

使用此解决方案需要满足以下先决条件:

  • 现有的源数据库和目标数据库。
  • 现有的 亚马逊云科技 DMS 复制实例
  • 如果本地数据库需要 TLS 连接,则为现有证书。
  • 在服务器上安装和配置了 亚马逊云科技 CLI。
  • 可连接源数据库和目标数据库的 亚马逊云科技 DMS 实例。
  • 亚马逊云科技 DMS 使用的数据库 ID 和密码是在源数据库和目标数据库中预先创建的。此解决方案需要两对用户帐户和密码:第一对用于源数据库,第二对用于目标数据库。出于自动化的目的,所有源数据库与目标数据库共享相同的凭据集。
  • 同一 DBMS 引擎的 亚马逊云科技 DMS 终端节点设置是相同的。但是,每个引擎可以有自己的设置。
  • 所有 亚马逊云科技 DMS 任务共享相同的表映射和任务设置,以简化逻辑。但是,该解决方案包含一个 RUNN OW 选项,用于保存脚本以供手动运行。使用此选项,您可以修改脚本以使用不同的设置 JSON 文件。
  • 脚本所需的参数在 DMSPROFILE.ini 输入文件中设置。
  • 所有源数据库和目标数据库信息都在 DMSDB.ini 文本文件中,该文件包含五个字段: 端点类型 引擎名称、 数据库名称 端口 IP 和主机名。

DMSPROFILE.ini 输入文件的内容如下所示:

PROFILE: default
REPLINSTANCEARN: arn:aws:dms:us-west-1:111122223333:rep: RL4OKQYFQ5WQJPBECVIN26I67MS2FFZ53GMALHY
CERTIFICATEARN: arn:aws:dms:us-west-1:111122223333:cert:TIY44ZWDPJ6ORJNJ2XQWO66RGRZN5Y2LFZKTC3A
LINEBREAK: \
SOURCENAMEPREFIX: dmsblog-s
TARGETNAMEPREFIX: dmsblog-t
MIGRATIONTYPE: full-load-and-cdc
DBLISTFILE: DMSDB.ini
CUSTOMERKEY: NO
RUNNOW: NO
VERSION: 1
REGION: us-west-1

以下是 DMSDB.ini 的示例内容 :

----RecordFormat "EndpointType Engine-name DBname Port IP/Hostname"
source sqlserver Adventure 1433 sqlserver-ca.cj3oksygvtvq.us-west-1.rds.amazonaws.com
target aurora-postgresql adventure 5432 ab3-db-dms-rauroradbcluster-1au8tsk10jn5k.cluster-cj3oksygvtvq.us-west-1.rds.amazonaws.com

实施解决方案

本节包含使用此解决方案所需的步骤:

  1. 确定一台可以同时连接到源数据库和目标数据库以及安装的 亚马逊云科技 CLI 的服务器。
  2. GitHub 存储库 中包含的脚本下载到服务器上的新文件夹中。
  3. 该过程从运行主脚本 blog_createdmsall.sh 开始 ,该脚本加载配置文件中的所有参数。
  4. 如果 DMSSECRET.INI 文件不存在,则 blog_createdmsall.sh 脚本会在步骤 3 中 调用 blog_create_secret.sh 。如果 DMSSECRET.INI 文件存在,则脚本会跳过步骤 4 并继续执行步骤 5。
  5. 密钥创建脚本 blog_create_secret.sh 提示用户输入源数据库和目标数据库的用户 ID 和密码组合。此信息用于在密钥管理器中创建密钥。创建端点时会使用这些机密。运行时未提及该机密。创建了两对密钥(一个用户帐户和每个密钥对):一对用于源,另一对用于目标。

以下屏幕截图是 blog_createdmsall.sh 脚本的示例输出。

你可以通过 Secrets Manager 控制台验证密钥是否已创建。

  1. 从 Secrets Manager 中检索用户 ID 和密码,然后启动循环读取 DMSDB.ini 文件中包含的数据库信息。

数据库信息由成对的行组成,因此第一行用于源,第二行用于目标。以下屏幕截图显示了从 Secrets Manager 检索数据库凭据的脚本。

  1. 创建源端点和目标端点并生成测试连接脚本。

您可以通过 亚马逊云科技 DMS 控制台验证终端节点是否已成功创建。

  1. 生成 亚马逊云科技 DMS 复制任务创建脚本。

  1. 生成 亚马逊云科技 DMS 数据验证任务创建脚本。

在此示例中, RUNN OW 选项设置为 NO ,因此显示脚本名称并结束主脚本。这使您有机会自定义 亚马逊云科技 DMS 任务定义属性,例如表映射或任务设置 JSON 文件。如果 RUNN OW 设置为 YES ,则步骤 8—10 将在主脚本中运行,从而实现完全自动化。

以下屏幕截图显示了手动运行脚本的说明。

  1. 测试 亚马逊云科技 DMS 终端节点连接并显示连接结果。

它在所有端点上并行运行,大约需要 60 秒才能完成。

您可以通过 亚马逊云科技 DMS 终端节点控制台验证连接是否成功。

  1. 运行 create-DMS-replications-Task.sh 脚本创建 亚马逊云科技 DMS 复制任务。

  1. 运行 create-DMS-validation-full-load-Task.sh 脚本以创建满载任务和变更数据捕获 (CDC) 任务。

  1. 运行 create-DMS-validation-cdc-Task.sh 脚本创建 亚马逊云科技 DMS 验证任务。

您可以通过 亚马逊云科技 DMS 控制台验证任务是否已成功创建。

您可以通过修改步骤 11 中的任务设置 JSON 来选择将数据验证作为复制任务的一部分。如果您创建仅限验证的任务,则与复制任务不同,您无法选择指定满负荷加上 CDC。我们的经验表明,仅限 CDC 的验证任务会执行全表验证。此策略使您可以灵活地决定如何运行任务。

如果您有大量任务,则可以在多个复制实例之间对它们进行负载平衡,以提高吞吐量。

您也可以使用 blog_create_operation.sh 生成操作脚本:

  • start-DMS-task.sh
  • stop-DMS-task.sh
  • delete-DMS-task.sh

清理

本节包含在项目完成且无需保留任何资源后清理此解决方案创建的构件所需的步骤。如果可能需要重新运行复制或验证,请不要执行这些步骤。

有两种清理资源的方法:通过脚本或通过 亚马逊云科技 管理控制台

通过脚本清理

你可以通过运行清理脚本来删除我们创建的所有资源:

  1. 登录到你用来运行脚本的服务器。
  2. 导航到包含代码的文件夹。
  3. 按顺序运行以下脚本:
    1. delete-DMS-task.sh
    2. delete-DMS-endpoint.sh
    3. delete-DMS-secret.sh

这些脚本是在解决方案实施期间创建的。

通过控制台进行清理

您可以通过以下步骤删除我们通过控制台创建的所有资源:

  1. 在 亚马逊云科技 DMS 控制台上,停止所有 亚马逊云科技 DMS 任务。
  2. 删除 亚马逊云科技 DMS 任务和终端节点。
  3. 在密钥管理器控制台上,删除您创建的密钥。

结论

自动创建和验证终端节点可降低建立大规模组织迁移数据库所需的 亚马逊云科技 DMS 结构所需的工作量。此外,自动化可以消除手动迁移引入的任何错误。

如果您对这篇文章有任何疑问或建议,请发表评论。我们希望我们分享的信息有所帮助!


作者简介

蔡峰 是 亚马逊云科技 的数据库顾问。他在向客户提供数据库服务方面拥有广泛的背景。Feng 目前是 亚马逊云科技 全球能力中心的成员,为公共部门客户提供同构和异构数据库迁移支持。

瓦吉德·阿里·米尔 是 亚马逊云科技 的数据库顾问。他在银行、电信和云咨询等客户方面拥有丰富的数据库经验。Wajid 目前是 亚马逊云科技 全球能力中心的成员,为商业客户提供同构和异构数据库迁移支持。

迪恩·卡普斯 是 亚马逊云科技 的数据库顾问。他拥有在传统、开放系统和云平台上提供数据库支持的经验。Dean 目前是 亚马逊云科技 全球能力中心的成员,为公共部门客户提供同构和异构数据库迁移支持。

Baji Shaik 是全球能力中心 亚马逊云科技 ProServe 的高级首席顾问。他的背景涵盖了 SQL 和 NoSQL 数据库技术方面的广泛专业知识和经验。他是一名数据库迁移专家,开发了许多成功的数据库解决方案,解决了将数据库从本地迁移到 Amazon RDS 和 Amazon Aurora PostgreSQL/MySQL 时面临的挑战性业务需求。他是一位杰出的作家,曾写过几本关于 PostgreSQL 的书。他最近的一些作品包括《PostgreSQL 配置》、《在云端入门 PostgreSQL》和《PostgreSQL 开发要点》。此外,他还举办了几次会议和研讨会。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。