使用 Terraform 設定資料庫遷移的 CI/CD 管道 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Terraform 設定資料庫遷移的 CI/CD 管道

由 Rahul Sharad Gaikwad (AWS)、Aarti Rajput (AWS)、Ashish Bhatt (AWS)、Aniket Dekate (AWS)、Naveen Suthar (AWS)、Nadeem Rahaman (AWS)、Ruchika Modi (AWS) 和 Tamilselvan P (AWS) 建立

Summary

此模式旨在建立持續整合和持續部署 (CI/CD) 管道,以可靠且自動化的方式管理資料庫遷移。它涵蓋了使用 Terraform 佈建必要基礎設施、遷移資料和自訂結構描述變更的程序,Terraform 是一種基礎設施即程式碼 (IaC) 工具。

具體而言, 模式會設定 CI/CD 管道,將內部部署 Microsoft SQL Server 資料庫遷移至 上的 Amazon Relational Database Service (Amazon RDS) AWS。您也可以使用此模式,將虛擬機器 (VM) 或其他雲端環境中的 SQL Server 資料庫遷移至 Amazon RDS。

此模式可解決下列與資料庫管理和部署相關的挑戰:

  • 手動資料庫部署耗時、容易出錯,且缺乏跨環境的一致性。

  • 協調基礎設施佈建、資料遷移和結構描述變更可能很複雜且難以管理。

  • 確保資料完整性並將資料庫更新期間的停機時間降至最低,對生產系統至關重要。

此模式提供下列優點:

  • 透過實作資料庫遷移的 CI/CD 管道,簡化更新和部署資料庫變更的程序。這可降低錯誤風險、確保跨環境的一致性,並將停機時間降至最低。

  • 協助改善可靠性、效率和協同合作。可在資料庫更新期間加快上市時間並減少停機時間。

  • 協助您為資料庫管理採用現代 DevOps 實務,進而提高軟體交付程序的敏捷性、可靠性和效率。

先決條件和限制

先決條件

  • 作用中 AWS 帳戶

  • 本機電腦上已安裝 Terraform 0.12 或更新版本 (如需說明,請參閱 Terraform 文件)

  • 來自 HashiCorp 的 Terraform AWS Provider 3.0.0 版或更新版本 (請參閱此供應商的 GitHub 儲存庫)

  • 最低權限 AWS Identity and Access Management (IAM) 政策 (請參閱部落格文章撰寫最低權限 IAM 政策的技術)

架構

此模式實作下列架構,為資料庫遷移程序提供完整的基礎設施。

CI/CD 管道架構,用於將內部部署 SQL Server 資料庫遷移至 AWS 上的 Amazon RDS。

在此架構中:

  • 來源資料庫是現場部署、虛擬機器 (VM) 或由其他雲端供應商託管的 SQL Server 資料庫。圖表假設來源資料庫位於內部部署資料中心。

  • 內部部署資料中心和 透過 VPN 或 AWS 連線進行 AWS Direct Connect 連線。這可提供來源資料庫與 AWS 基礎設施之間的安全通訊。

  • 目標資料庫是在資料庫佈建管道的協助 AWS 下,託管在 虛擬私有雲端 (VPC) 內的 Amazon RDS 資料庫。

  • AWS Database Migration Service (AWS DMS) 會將您的內部部署資料庫複寫到 AWS。它用於設定來源資料庫到目標資料庫的複寫。

下圖顯示設定不同層級資料庫遷移程序的基礎設施,其中包含佈建、 AWS DMS 設定和驗證。

從內部部署到 AWS 的遷移程序 CI/CD 管道詳細資訊。

在此程序中:

  • 驗證管道會驗證所有檢查。當所有必要的驗證完成時,整合管道會移至下一個步驟。

  • 資料庫佈建管道包含對資料庫提供的 Terraform 程式碼執行 Terraform 動作的各種 AWS CodeBuild 階段。當這些步驟完成時,它會在目標中部署資源 AWS 帳戶。

  • AWS DMS 管道由各種 CodeBuild 階段組成,這些階段會執行測試,然後使用 IaC 佈建執行遷移的 AWS DMS 基礎設施。

工具

AWS 服務 和 工具

其他服務

  • Terraform 是 HashiCorp 的 IaC 工具,可協助您建立和管理雲端和內部部署資源。

程式碼儲存庫

此模式的程式碼可在 GitHub Database Migration DevOps Framework 中使用 Terraform 範例儲存庫。

最佳實務

  • 實作資料庫遷移的自動化測試,以驗證結構描述變更和資料完整性的正確性。這包括單元測試、整合測試和end-to-end測試。

  • 為您的資料庫實作強大的備份和還原策略,特別是在遷移之前。這可確保資料完整性,並在發生故障時提供備用選項。

  • 實作強大的復原策略,以在遷移期間發生故障或問題時還原資料庫變更。這可能包括轉返至先前的資料庫狀態或還原個別遷移指令碼。

  • 設定監控和記錄機制,以追蹤資料庫遷移的進度和狀態。這可協助您快速識別和解決問題。

史詩

任務描述所需的技能

在本機工作站上設定 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 工程師
任務描述所需的技能

更新必要的參數。

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 工程師
任務描述所需的技能

驗證部署。

驗證db-cicd-integration管道的狀態,以確認資料庫遷移已完成。

1. 登入 AWS Management Console,然後開啟 AWS CodePipeline 主控台

2. 在導覽窗格中,選擇管道

3. 選擇db-cicd-integration管道。

4. 驗證管道執行是否成功完成。

DevOps 工程師
任務描述所需的技能

清除基礎設施。

  1. 專案完成後,請使用 命令清除您建立的基礎設施:

    terraform destroy --var-file=terraform.sample
  2. 輸入 yes 以確認。

DevOps 工程師

相關資源

AWS 文件

Terraform 文件