

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

# 使用 Terraform 为数据库迁移设置 CI/CD 管道
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform"></a>

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

## Summary
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-summary"></a>

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

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

此模式可解决数据库管理和部署过程中面临的以下挑战：
+ 手动部署数据库既耗时又容易出错，而且在不同环境间缺乏一致性。
+ 协调基础设施预调配、数据迁移和架构变更的过程既复杂又难以管理。
+ 对于生产系统而言，在数据库更新过程中确保数据完整性并最大限度地减少停机时间至关重要。

此模式具有以下优势：
+ 通过实施数据库迁移 CI/CD 管道，简化更新和部署数据库更改的过程。这样可降低出错风险，确保跨环境的一致性，并最大限度地减少停机时间。
+ 有助于提高可靠性、效率和协作性。缩短上市时间，减少数据库更新过程中的停机时间。
+ 帮助您采用现代数据库管理 DevOps 实践，从而提高软件交付流程的敏捷性、可靠性和效率。

## 先决条件和限制
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 本地计算机上安装了 Terraform 0.12 或更高版本（有关说明，请参阅 [Terraform 文档](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)）
+ Terraform P AWS rovider 版本 3.0.0 或更高版本 HashiCorp （请参阅此提供程序的[GitHub 存储库](https://github.com/hashicorp/terraform-provider-aws)）
+ 最低权限 AWS Identity and Access Management (IAM) 策略（请参阅博客文章《[编写最低权限 IAM 策略的技巧](https://aws.amazon.com/blogs/security/techniques-for-writing-least-privilege-iam-policies/)》）

## 架构
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-architecture"></a>

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

![\[用于将本地 SQL Server 数据库迁移至 AWS 上的 Amazon RDS 的 CI/CD 管道架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/87845d9f-8e6e-4c51-b9ee-9e7833671d05/images/a1e95458-419a-4de9-85ef-b17d8340700a.png)


在此架构中：
+ 源数据库是部署在本地、虚拟机上或由其他云提供商托管的 SQL Server 数据库。该图假设源数据库位于本地数据中心。
+ 本地数据中心和 AWS 通过 VPN 或 AWS Direct Connect 连接进行连接。这提供了源数据库和 AWS 基础架构之间的安全通信。
+ 目标数据库是 Amazon RDS 数据库，它借助数据库配置管道托管在虚拟私 AWS 有云 (VPC) 内。
+ AWS Database Migration Service (AWS DMS) 将您的本地数据库复制到。 AWS它用于配置将源数据库复制到目标数据库的过程。

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

![\[从本地到 AWS 的迁移过程的 CI/CD 管道详细信息。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/87845d9f-8e6e-4c51-b9ee-9e7833671d05/images/3aca17e5-6fd7-4317-b578-ab5e485c6efb.png)


在此过程中：
+ 验证管道会验证所有检查。当所有必要的验证完成后，集成管道将进入下一步。
+ 数据库配置管道由各个 AWS CodeBuild 阶段组成，这些阶段对为数据库提供的 Terraform 代码执行 Terraform 操作。完成这些步骤后，将在目标 AWS 账户中部署资源。
+ 该 AWS DMS 管道由多个 CodeBuild 阶段组成，这些阶段执行测试，然后使用 IaC 配置用于执行迁移 AWS DMS 的基础架构。

## 工具
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-tools"></a>

**AWS 服务 和工具**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)是一项完全托管的持续集成服务，用于编译源代码、运行测试和生成 ready-to-deploy软件包。
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 是一种完全托管式持续交付服务，可帮助您自动执行发布管道，以实现快速可靠的应用程序和基础设施更新。
+ [Amazon Relational Database Service（Amazon RDS）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)可帮助您在 AWS 云中设置、操作和扩展关系数据库。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一种对象存储服务，可提供出色的可扩展性、数据可用性、安全性和性能。
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到云和本地设置的组合中， AWS 云 或者迁移到云端和本地设置的组合之间。

**其他服务**
+ [Terraform](https://www.terraform.io/) 是一款 IaC 工具 HashiCorp ，可帮助您创建和管理云和本地资源。

**代码存储库**

此模式的代码可在[使用 Terraform 示例 GitHub 存储库的数据库迁移 DevOps 框架](https://github.com/aws-samples/aws-terraform-db-migration-framework-samples)中找到。

## 最佳实践
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-best-practices"></a>
+ 为数据库迁移实施自动化测试，以验证架构变更的正确性和数据完整性。这包括单元测试、集成测试和 end-to-end测试。
+ 为数据库实施强大的备份和还原策略，尤其是在迁移之前。这样可以确保数据完整性，并在发生故障时提供回退选项。
+ 实施强大的回滚策略，以便在迁移过程中出现故障或问题时恢复数据库更改。这可能包括回滚到先前的数据库状态或恢复单个迁移脚本。
+ 设置监控和日志记录机制，以跟踪数据库迁移的进度和状态。这有助于您快速识别并解决问题。

## 操作说明
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-epics"></a>

### 设置本地工作站
<a name="set-up-your-local-workstation"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在本地工作站上设置并配置 Git。 | 按照 [Git 文档](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)中的说明在本地工作站上安装并配置 Git。 | DevOps 工程师 | 
| 创建项目文件夹并添加 GitHub 存储库中的文件。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-ci-cd-pipeline-for-db-migration-with-terraform.html) | DevOps 工程师 | 

### 预调配目标架构
<a name="provision-the-target-architecture"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 更新所需参数。 | 该`ssm-parameters.sh`文件存储所有必需的 AWS Systems Manager 参数。您可以使用项目的自定义值来配置这些参数。在本地工作站的`setup/db-ssm-params`文件夹中，打开`ssm-parameters.sh`文件并设置这些参数，然后再运行 CI/CD 管道。 | DevOps 工程师 | 
| 初始化 Terraform 配置。 | 在 `db-cicd-integration` 文件夹中，输入以下命令，以初始化包含 Terraform 配置文件的工作目录。<pre>terraform init</pre> | DevOps 工程师 | 
| 预览 Terraform 计划。 | 要创建 Terraform 计划，请输入以下命令：<pre>terraform plan -var-file="terraform.sample"  </pre>Terraform 会评估配置文件，以确定已声明资源的目标状态。然后，其将比较目标状态与当前状态，并创建计划。 | DevOps 工程师 | 
| 验证计划。 | 查看计划，并确认它已在您的目标 AWS 账户中配置了所需架构。 | DevOps 工程师 | 
| 部署解决方案。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-ci-cd-pipeline-for-db-migration-with-terraform.html) | DevOps 工程师 | 

### 验证部署
<a name="verify-the-deployment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证部署。 | 验证 `db-cicd-integration` 管道的状态，确认数据库迁移已完成。1. 登录 AWS 管理控制台，然后打开[AWS CodePipeline 控制台](https://console.aws.amazon.com/codesuite/codepipeline/home)。2. 在导航窗格中，选择**管道**。3. 选择 `db-cicd-integration` 管道。4. 验证是否已成功完成管道执行。 | DevOps 工程师 | 

### 使用后清理基础设施
<a name="clean-up-infrastructure-after-use"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 清理基础设施。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-ci-cd-pipeline-for-db-migration-with-terraform.html) | DevOps 工程师 | 

## 相关资源
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-resources"></a>

**AWS 文档**
+ [开始使用 Terraform 产品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-Terraform.html)

**Terraform 文档**
+ [Terraform installation](https://learn.hashicorp.com/tutorials/terraform/install-cli)（Terraform 安装）
+ [Terraform 后端配置](https://developer.hashicorp.com/terraform/language/backend)
+ [Terraform AWS 提供者文档](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)