在当今高度互联的世界中,这句话再准确不过了。数据迁移对于全球组织至关重要,从旨在快速扩展的初创公司到寻求 IT 基础架构现代化的企业。

    然而,作为一名技术爱好者,我经常发现自己在不同环境中驾驭大量数据的复杂性。没有很好地计划或执行的数据迁移(无论是一次性事件还是持续复制)都是手动完成的,没有使用任何脚本自动完成,或者没有经过良好的测试,这可能会导致迁移过程中出现问题并增加延迟或停机时间。

   AWS DMS 建立了一个平台,以最短的停机时间有效地执行迁移。我还意识到,我们可以使用 Terraform IAC 完全自动化此过程,以触发任何受支持的源数据库到目标数据库的迁移。使用 Terraform,我们可以创建目标节点和 AWS DMS 资源所需的基础设施,该基础设施可以自动完成数据迁移。

  • 什么是 AWS Data Migration Service (AWS DMS)?
  • 如何使用 AWS DMS 和 Terraform IAC 自动执行数据迁移
  • AWS DMS 的主要优势和功能?

让我们开始吧!

1. 什么是 AWS DMS(数据库迁移服务)?

    AWS DMS(数据库迁移服务)是一种基于云的工具,通过将数据从任何受支持的源复制到任何受支持的目标,促进数据库迁移到 AWS 云。它还支持连续数据捕获 (CDC) 功能,该功能可持续将数据从源复制到目标。

如何使用 AWS DMS 和 Terraform IaC 进行数据迁移???了解后你也会了_云原生

AWS DMS 架构概述

AWS DMS 的使用案例

    AWS Database Migration Service (AWS DMS) 支持许多使用案例,从同类迁移到复杂的跨平台转换。

同构数据迁移

    同构数据库迁移在相同或相似的数据库之间迁移数据。由于源数据库和目标数据库之间的架构结构和数据类型一致,此一步过程非常简单。

如何使用 AWS DMS 和 Terraform IaC 进行数据迁移???了解后你也会了_terraform_02

同构数据库迁移

异构数据库迁移

    异构数据库迁移涉及在不同数据库之间传输数据,例如 Oracle 到 Amazon Aurora、Oracle 到 PostgreSQL 或 SQL Server 到 MySQL。此过程需要转换源架构和代码以匹配目标数据库。

    使用 AWS 架构转换工具,此迁移将分为两步:架构转换和数据迁移。源架构和代码转换涉及转换表、视图、存储过程、函数、数据类型、同义词等。AWS Schema Conversion Tool 无法自动转换的任何对象都会被明确标记为手动转换以完成迁移。

如何使用 AWS DMS 和 Terraform IaC 进行数据迁移???了解后你也会了_云计算_03

DMS 架构转换

如何使用 AWS DMS 和 Terraform IaC 进行数据迁移???了解后你也会了_云计算_04

异构数据库迁移

AWS DMS 的先决条件

以下是 AWS DMS 数据迁移的先决条件

  • 通过防火墙和安全组访问源端点和目标端点
  • 源终结点连接
  • 目标终结点连接
  • 复制实例
  • 目标架构或数据库
  • 用于触发 Lambda 函数的 CloudWatch 事件
  • 用于启动复制任务的 Lambda 函数
  • 资源限制增加
AWS DMS 组件

在迁移到 AWS DMS 之前,让我们先了解一下 AWS DMS 组件。

复制实例

    复制实例由处理复制任务的 Amazon EC2 实例管理。它们连接到源数据存储,读取目标的数据并设置其格式,然后将其加载到目标数据存储中。

如何使用 AWS DMS 和 Terraform IaC 进行数据迁移???了解后你也会了_云计算_05

复制实例

源端点和目标端点

    AWS DMS 使用终端节点连接到源数据库和目标数据库,从而允许将数据从源终端节点迁移到目标终端节点。

支持的源终结点包括:

    支持的源终端节点包括 Google Cloud for MySQL、Amazon RDS for PostgreSQL、Microsoft SQL Server、Oracle Database、Amazon DocumentDB、PostgreSQL、Microsoft Azure SQL Database、IBM DB2、兼容 MySQL 的 Amazon Aurora、MongoDB、Amazon RDS for Oracle、Amazon S3、Amazon RDS for MariaDB、Amazon RDS for Microsoft SQL Server、MySQL、Amazon RDS for MySQL、兼容 PostgreSQL 的 Amazon Aurora、 MariaDB 和 SAP Adaptive Server Enterprise (ASE)。

支持的终端

    支持的目标终端节点包括 PostgreSQL、SAP Adaptive Server Enterprise (ASE)、Google Cloud for MySQL、IBM DB2、MySQL、Amazon RDS for Microsoft SQL Server、Oracle 数据库、Amazon RDS for MariaDB、兼容 MySQL 的 Amazon Aurora、MariaDB、Amazon S3、Amazon RDS for PostgreSQL、Microsoft SQL Server、Amazon DocumentDB、Microsoft Azure SQL Database、Amazon RDS for Oracle、MongoDB、兼容 PostgreSQL 的 Amazon Aurora、 Amazon RDS for MySQL 和 Amazon RDS for Microsoft SQL Server。

复制任务

    复制任务有助于从源端点到目标端点的顺畅数据传输。这涉及指定迁移所需的表和架构,以及任何特殊的处理要求,例如日志记录、控制表数据和错误处理。创建复制任务是开始迁移之前的关键步骤,包括定义迁移类型、源和目标终端节点以及复制实例。

复制任务包括三种主要的迁移类型:

  • 总负载:仅迁移现有数据。
  • CDC(变更数据捕获)满载: 迁移现有数据并持续复制更改。
  • 仅限 CDC(更改数据捕获):仅连续复制数据中的更改。
  • 仅验证:仅专注于数据验证。

这些类型导致三个主要阶段:

  • 迁移现有数据(满载):AWS DMS将数据从源表传输到目标表。
  • 缓存更改应用程序:在进行总负载时,对加载表的更改将缓存在复制服务器上。完成表的总负载后,AWS DMS 将应用缓存的更改。
  • 持续复制(更改数据捕获):最初,事务积压会延迟源数据库和目标数据库。随着时间的流逝,这些积压工作将被处理,从而实现稳定的迁移流。

    此详细说明可确保 AWS DMS 有条不紊地指导数据迁移过程,从而保持数据完整性和一致性。

CloudWatch 事件

    AWS CloudWatch EventBridge 提供有关 AWS DMS 事件的通知,例如复制任务启动/删除和复制实例创建/删除。EventBridge 接收这些事件,并根据预定义的规则定向通知。

Lambda 函数

    我们使用 AWS Lambda 函数来启动复制任务。在 AWS DMS 中创建事件信令任务时,Lambda 函数由配置的 EventBridge 规则自动触发。

资源限制

    在管理 AWS Database Migration Service (DMS) 时,我们遵循默认资源配额,这是软限制。在 AWS 支持票证的帮助下,可以根据需要增加这些限制,以确保最佳性能。

关键的 AWS DMS 资源限制包括:

  • 每个用户帐户的终结点数:1000(默认)
  • 每个复制实例的终结点数:100(默认)
  • 每个用户帐户的任务数:600(默认)
  • 每个复制实例的任务数:200(默认)
  • 每个用户帐户的复制实例数:60(默认)

    例如,要将 100 个数据库从本地 MySQL 源迁移到 RDS MySQL,我们使用以下计算:

  • 每个数据库的任务数:1
  • 每个数据库的终结点数:2
  • 每个复制实例的终端节点数:100

每个复制实例的任务总数 = 每个复制实例的终结点数 / 每个数据库的终结点 = 100 / 2 = 50。

    这意味着我们每个复制实例最多可以迁移 50 个数据库。使用两个复制实例,我们可以一次性高效地迁移所有 100 个数据库。这种方法举例说明了战略性地使用资源配额进行有效的数据库迁移。

如何使用 Terraform IaC 自动执行数据迁移:概述

    Terraform 和 DMS 可自动执行并保护数据迁移,从而简化流程,同时高效管理 AWS 基础设施。

以下是此无缝且安全的迁移过程的分步概述:

步骤 1:获取迁移数据库列表

检索要迁移的数据库的列表。

步骤 2:数据库创建(同构迁移)

    创建目标架构或数据库结构,以便在同类数据迁移时为数据转换做好准备。

步骤 3:创建复制子网组

创建复制子网组以确保数据移动的无缝网络通信。

步骤 4:源/目标连接终结点

为每个用于迁移的数据库集配备源和目标连接。

步骤 5:创建复制实例

创建复制实例以处理数据迁移过程。

步骤 6:Lambda 与 Cloud Watch Events 集成

集成 CloudWatch 事件和 Lambda 函数以启动复制任务。

步骤 7:复制任务的创建和分配

创建复制任务并将其分配给复制实例,设置迁移。

步骤 8:迁移任务启动

为每个数据库启动迁移任务。

如何使用 AWS DMS 和 Terraform IaC 进行数据迁移???了解后你也会了_云计算_06

迁移过程和工作流图

数据迁移自动化的体系结构概述

具有 Terraform 基础设施即代码 (IAC) 的 AWS DMS 可自动执行数据迁移。数据迁移自动化过程从 Jenkins 管道的动态框架开始。该框架使用各种输入参数来自定义和定制迁移过程,提供灵活性和适应性。

下面是体系结构的详细概述:

如何使用 AWS DMS 和 Terraform IaC 进行数据迁移???了解后你也会了_terraform_07

使用 Terraform IAC 的 AWS DMS 架构

第 1 步:Jenkins 流水线参数

        适用于 AWS DMS 的 Jenkins 管道首先定义基本输入参数,例如区域和环境详细信息、Terragrunt 模块详细信息和迁移首选项。

关键输入参数包括:

  • AWS_REGION:从存储库填充区域列表。
  • APP_ENVIRONMENT:从存储库填充应用程序环境列表。
  • TG_MODULE:从存储库填充 Terragrunt 模块文件夹列表。
  • TG_ACTION:允许用户从计划、验证和应用中选择 Terragrunt 操作。
  • TG_EXTRA_FLAGS:用户可以传递 Terragrunt 更多标志。
  • FETCH_DBLIST:确定迁移数据库列表生成类型(AUTOMATIC 和 MANUAL)。
  • CUSTOM_DBLIST:如果选择FETCH_DBLIST为“手动”,则用于迁移的 SQL Server 自定义数据库列表。
  • MIGRATION_TYPE:允许用户选择DMS迁移类型(满载、满载和CDC、CDC)。
  • START_TASKS:允许用户打开或关闭迁移任务执行。
  • TEAMS:用于生成通知的 MS Teams 频道。
第 2 步:执行阶段

根据输入参数,管道将经历不同的执行阶段:

  • IAC 的源代码签出:管道首先签出 IAC 的源代码,为以下步骤奠定坚实的基础。
  • 迁移数据库列表:根据所选的迁移类型,管道会自动从源实例提取迁移数据库列表或使用手动列表。
  • 架构或数据库创建: 通过创建数据迁移所需的架构或数据库结构来创建目标实例。
  • Terraform/Terragrunt 执行:管道执行 Terraform 或 Terragrunt 模块以简化 AWS DMS 迁移过程。
  • 通知:在整个迁移过程中,更新将通过电子邮件或 MS Teams 发送。
第 3 步:自动和手动列表获取

    使用 shell 脚本自动从源实例获取迁移数据库列表,并保持FETCH_DBLIST自动。或者,用户可以手动提供用于迁移的选择性列表。

步骤 4:迁移类型

    Terraform/Terragrunt 模块根据 MIGRATION_TYPE 中指定的迁移类型启动 CDC、full-load-and-cdc 和 full-load 迁移。

第 5 步:自动化控制

使用 START_TASKS 手动或自动启动迁移任务。

第 6 步:凭据管理

为安全起见,请在执行 DMS Terraform/Terragrunt 模块时从 AWS Secrets Manager 检索数据库凭证。

步骤 7:创建端点

为目标实例和源实例建立端点,实现无缝连接和数据传输。

步骤 8:复制实例

根据数据库计数或配额限制创建复制实例。

步骤 9:CloudWatch 集成

    配置 AWS CloudWatch 事件以在创建 AWS DMS 复制任务后触发 Lambda 函数。

步骤 10:复制任务配置

为单个数据库创建复制任务,并将其分配给可用的复制实例,以优化数据传输。

第 11 步:任务自动化

复制任务在就绪状态下自动开始使用 Lambda 函数。

步骤 12:监视迁移

使用 AWS DMS 控制台实时监控数据迁移进度,深入了解迁移过程。

第 13 步:正在进行的更改

    迁移后,将正在进行的更改无缝复制到目标实例中,确保数据一致性。

第 14 步:自动验证

    根据提供的验证配置,针对源实例和目标实例自动验证迁移的数据,以增强数据完整性。

步骤 15:完成和配置

确保在验证后完成用户迁移和数据库配置。

第 16 步:目标测试和验证

更新应用程序配置以使用目标实例进行测试,以确保功能正常。

步骤 17:直接转换复制

    经过全面测试后,从源实例执行直接转换复制,拍摄源实例的最终快照以结束该过程。

AWS DMS with Terraform 的主要特性和优势

    采用 Terraform IAC 的 AWS DMS 具有多种优势:成本效益、易用性、最大限度的停机时间和强大的复制。

成本优化

    AWS DMS 迁移提供了一种经济高效的模型,因为它根据计算资源和额外的日志存储进行成本计算。

易用性

    迁移过程得到简化,无需特定的驱动程序或应用程序安装,并且通常无需对源数据库进行任何更改。一键式资源创建简化了整个迁移过程。

连续复制和最短的停机时间

    AWS DMS 可确保持续的源数据库复制,即使在运行期间也是如此,从而实现最短的停机时间和无缝的数据库切换。

持续复制

    通过持续的复制任务保持源数据库和目标数据库之间的同步,可确保数据一致性。

多样化的来源/目标支持

    AWS DMS 支持跨 SQL、NoSQL 和基于文本的目标从同类迁移(例如 MySQL 到 MySQL)到异构迁移(例如 Oracle 到 Amazon Aurora)。

数据库整合

    AWS DMS with Terraform 可以轻松地将多个源数据库整合到单个目标数据库中,这适用于同构和异构迁移。

模式转换和迁移的效率

    AWS DMS 最大限度地减少了迁移用户、存储过程、触发器和架构转换等任务中的手动工作,同时根据应用程序功能验证目标数据库。

使用 Terraform IAC 自动预配

    利用 Terraform 自动创建和销毁 AWS DMS 复制任务,非常适合管理涉及多个数据库的迁移。

自动化管道集成

    与 CI/CD 管道无缝集成,实现高效的迁移管理、监控和进度跟踪。

    如何使用 AWS DMS 和 Terraform IAC 的组合来自动执行数据迁移。该博客作为指南,探索这些技术之间的协同作用,并为企业提供优化数字化转型的工具。