使用 Terraform 为数据库迁移设置 CI/CD 管道 - AWS 规范指引

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Terraform 为数据库迁移设置 CI/CD 管道

Rahul Sharad Gaikwad 博士、Ashish Bhatt、Aniket Dekate、Ruchika Modi、Tamilselvan P、Nadeem Rahaman、Aarti Rajput 和 Naveen Suthar,Amazon Web Services

Summary

此模式旨在建立持续集成和持续部署(CI/CD)管道,以可靠的自动化方式管理数据库迁移。它涵盖了使用 Terraform(基础设施即代码(IaC)工具)预调配所需基础设施、迁移数据及自定义架构变更的完整流程。

具体而言,该模式建立了一个 CI/CD 管道,用于将本地 Microsoft SQL Server 数据库迁移到亚马逊关系数据库服务 (Amazon RDS) AWS。您也可以使用此模式将部署在虚拟机或其他云环境中的 SQL Server 数据库迁移至 Amazon RDS。

此模式可解决数据库管理和部署过程中面临的以下挑战:

  • 手动部署数据库既耗时又容易出错,而且在不同环境间缺乏一致性。

  • 协调基础设施预调配、数据迁移和架构变更的过程既复杂又难以管理。

  • 对于生产系统而言,在数据库更新过程中确保数据完整性并最大限度地减少停机时间至关重要。

此模式具有以下优势:

  • 通过实施数据库迁移 CI/CD 管道,简化更新和部署数据库更改的过程。这样可降低出错风险,确保跨环境的一致性,并最大限度地减少停机时间。

  • 有助于提高可靠性、效率和协作性。缩短上市时间,减少数据库更新过程中的停机时间。

  • 帮助您采用现代数据库管理 DevOps 实践,从而提高软件交付流程的敏捷性、可靠性和效率。

先决条件和限制

先决条件

  • 活跃的 AWS 账户

  • 本地计算机上安装了 Terraform 0.12 或更高版本(有关说明,请参阅 Terraform 文档

  • Terraform P AWS rovider 版本 3.0.0 或更高版本 HashiCorp (请参阅此提供程序的GitHub 存储库

  • 最低权限 AWS Identity and Access Management (IAM) 策略(请参阅博客文章《编写最低权限 IAM 策略的技巧》)

架构

此模式实现以下架构,该架构为数据库迁移过程提供了完整的基础设施。

用于将本地 SQL Server 数据库迁移至 AWS 上的 Amazon RDS 的 CI/CD 管道架构

在此架构中:

  • 源数据库是部署在本地、虚拟机上或由其他云提供商托管的 SQL Server 数据库。该图假设源数据库位于本地数据中心。

  • 本地数据中心和 AWS 通过 VPN 或 AWS Direct Connect 连接进行连接。这提供了源数据库和 AWS 基础架构之间的安全通信。

  • 目标数据库是 Amazon RDS 数据库,它借助数据库配置管道托管在虚拟私 AWS 有云 (VPC) 内。

  • AWS Database Migration Service (AWS DMS) 将您的本地数据库复制到。 AWS它用于配置将源数据库复制到目标数据库的过程。

下图显示了使用不同级别的数据库迁移过程设置的基础架构,其中包括配置、 AWS DMS 设置和验证。

从本地到 AWS 的迁移过程的 CI/CD 管道详细信息。

在此过程中:

  • 验证管道会验证所有检查。当所有必要的验证完成后,集成管道将进入下一步。

  • 数据库配置管道由各个 AWS CodeBuild 阶段组成,这些阶段对为数据库提供的 Terraform 代码执行 Terraform 操作。完成这些步骤后,将在目标 AWS 账户中部署资源。

  • 该 AWS DMS 管道由多个 CodeBuild 阶段组成,这些阶段执行测试,然后使用 IaC 配置用于执行迁移 AWS DMS 的基础架构。

工具

AWS 服务 和工具

其他服务

  • Terraform 是一款 IaC 工具 HashiCorp ,可帮助您创建和管理云和本地资源。

代码存储库

此模式的代码可在使用 Terraform 示例 GitHub 存储库的数据库迁移 DevOps 框架中找到。

最佳实践

  • 为数据库迁移实施自动化测试,以验证架构变更的正确性和数据完整性。这包括单元测试、集成测试和 end-to-end测试。

  • 为数据库实施强大的备份和还原策略,尤其是在迁移之前。这样可以确保数据完整性,并在发生故障时提供回退选项。

  • 实施强大的回滚策略,以便在迁移过程中出现故障或问题时恢复数据库更改。这可能包括回滚到先前的数据库状态或恢复单个迁移脚本。

  • 设置监控和日志记录机制,以跟踪数据库迁移的进度和状态。这有助于您快速识别并解决问题。

操作说明

Task说明所需技能

在本地工作站上设置并配置 Git。

按照 Git 文档中的说明在本地工作站上安装并配置 Git。

DevOps 工程师

创建项目文件夹并添加 GitHub 存储库中的文件。

  1. 打开此模式的GitHub 存储库

  2. 选择代码查看克隆选项,然后复制 HTTPS 选项卡中的 URL。

  3. 为工作站上的项目创建一个文件夹。

  4. 打开终端,导航到此文件夹。

  5. 克隆 GitHub 存储库:

    git clone <github-repository-url>

    其中,<github-repository-url> 是您在步骤 2 中复制的 URL。

  6. 克隆完成后,转到项目文件夹中的克隆存储库:

    cd <folder-name>/aws-terraform-db-migration-framework-samples
  7. 在您选择的集成式开发环境(IDE)中打开此项目。

DevOps 工程师
Task说明所需技能

更新所需参数。

ssm-parameters.sh文件存储所有必需的 AWS Systems Manager 参数。您可以使用项目的自定义值来配置这些参数。

在本地工作站的setup/db-ssm-params文件夹中,打开ssm-parameters.sh文件并设置这些参数,然后再运行 CI/CD 管道。

DevOps 工程师

初始化 Terraform 配置。

db-cicd-integration 文件夹中,输入以下命令,以初始化包含 Terraform 配置文件的工作目录。

terraform init
DevOps 工程师

预览 Terraform 计划。

要创建 Terraform 计划,请输入以下命令:

terraform plan -var-file="terraform.sample"

Terraform 会评估配置文件,以确定已声明资源的目标状态。然后,其将比较目标状态与当前状态,并创建计划。

DevOps 工程师

验证计划。

查看计划,并确认它已在您的目标 AWS 账户中配置了所需架构。

DevOps 工程师

部署解决方案。

  1. 输入以下命令,以应用计划:

    terraform apply -var-file="terraform.sample"
  2. 输入 yes以确认。Terraform 创建、更新或销毁基础设施,以实现配置文件中声明的目标状态。有关序列的更多信息,请参阅此模式的架构部分。

DevOps 工程师
Task说明所需技能

验证部署。

验证 db-cicd-integration 管道的状态,确认数据库迁移已完成。

1. 登录 AWS 管理控制台,然后打开AWS CodePipeline 控制台

2. 在导航窗格中,选择管道

3. 选择 db-cicd-integration 管道。

4. 验证是否已成功完成管道执行。

DevOps 工程师
Task说明所需技能

清理基础设施。

  1. 项目完成后,使用以下命令清理您创建的基础设施:

    terraform destroy --var-file=terraform.sample
  2. 输入 yes以确认。

DevOps 工程师

相关资源

AWS 文档

Terraform 文档