Terraform を使用してデータベース移行用の CI/CD パイプラインを設定する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Terraform を使用してデータベース移行用の CI/CD パイプラインを設定する

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

概要

このパターンでは、信頼性が高く自動化された方法でデータベース移行を管理するための継続的インテグレーションと継続的デプロイ (CI/CD) パイプラインを確立します。Infrastructure as Code (IaC) ツールである Terraform を使用して、必要なインフラストラクチャのプロビジョニング、データの移行、スキーマの変更のカスタマイズを行うプロセスについて説明します。

具体的には、このパターンでは、オンプレミスの Microsoft SQL Server データベースを AWSの Amazon Relational Database Service (Amazon RDS) に移行する CI/CD パイプラインを設定します。このパターンを使用して、仮想マシン (VM) または別のクラウド環境にある SQL Server データベースを Amazon RDS に移行することもできます。

このパターンは、データベースの管理とデプロイに関連する以下の問題に対処します。

  • 手動のデータベースデプロイは時間がかかり、エラーが発生しやすく、環境間の一貫性がありません。

  • インフラストラクチャのプロビジョニング、データ移行、スキーマの変更を調整することは、複雑で管理が難しい場合があります。

  • 本稼働システムでは、データの整合性を確保し、データベースの更新中のダウンタイムを最小限に抑えることが重要です。

このパターンには次の利点があります。

  • データベース移行用の CI/CD パイプラインを実装することで、データベースの変更の更新とデプロイのプロセスを合理化します。これにより、エラーのリスクが軽減され、環境間の一貫性が確保され、ダウンタイムを最小限に抑えられます。

  • 信頼性、効率、連携の向上に役立ちます。市場投入までの時間を短縮し、データベースの更新中のダウンタイムを減らすことができます。

  • データベース管理に最新の DevOps プラクティスを採用しやすくなります。これにより、ソフトウェアのデリバリープロセスの俊敏性、信頼性、効率性が向上します。

前提条件と制限

前提条件

アーキテクチャ

このパターンでは、データベース移行プロセス用の完全なインフラストラクチャを提供する次のアーキテクチャを実装します。

オンプレミス SQL Server データベースを AWS の Amazon RDS に移行するための CI/CD パイプラインアーキテクチャ。

このアーキテクチャの詳細は以下のとおりです。

  • ソースデータベースは、オンプレミスか、仮想マシン (VM) 上にあるか、別のクラウドプロバイダーによってホストされている SQL Server データベースです。この図は、ソースデータベースがオンプレミスデータセンターにあることを前提としています。

  • オンプレミスデータセンターと AWS は、VPN または AWS Direct Connect 接続を介して接続されます。これにより、ソースデータベースと AWS インフラストラクチャ間の安全な通信が可能になります。

  • ターゲットデータベースは、データベースプロビジョニングパイプラインを使用して の仮想プライベートクラウド (VPC) AWS 内でホストされる Amazon RDS データベースです。

  • AWS Database Migration Service (AWS DMS) はオンプレミスデータベースを にレプリケートします AWS。これは、ソースデータベースのターゲットデータベースへの複製を設定するために使用されます。

次の図は、さまざまなレベルのデータベース移行プロセスでセットアップされたインフラストラクチャを示しています。これには、プロビジョニング、 AWS DMS セットアップ、検証が含まれます。

オンプレミスから AWS への移行プロセスの CI/CD パイプラインの詳細。

このプロセスでは、次のことが行われます。

  • 検証パイプラインはすべてのチェックを検証します。必要なすべての検証が完了すると、統合パイプラインは次のステップに進みます。

  • DB プロビジョニングパイプラインは、データベース用に提供された Terraform コードに対して Terraform アクションを実行するさまざまな AWS CodeBuild ステージで構成されます。これらのステップが完了すると、ターゲット AWS アカウントにリソースがデプロイされます。

  • AWS DMS パイプラインは、テストを実行し、IaC を使用して移行を実行するための AWS DMS インフラストラクチャをプロビジョニングするさまざまな CodeBuild ステージで構成されます。

ツール

AWS のサービス および ツール

  • AWS CodeBuild はフルマネージド型の継続的統合サービスであり、このサービスにより、ソースコードをコンパイルし、テストを実行し、デプロイ可能なソフトウェアパッケージを作成できます。

  • AWS CodePipeline はフルマネージド型の継続的デリバリーサービスで、アプリケーションとインフラストラクチャの更新を迅速かつ高い信頼性で行うために、パイプラインのリリースを自動化します。

  • Amazon Relational Database Service (Amazon RDS) を使用して、 AWS クラウドでリレーショナルデータベースをセットアップ、運用、スケーリングできます。

  • Amazon Simple Storage Service (Amazon S3) は、スケーラビリティ、データ可用性、セキュリティ、パフォーマンスを提供するオブジェクトストレージサービスです。

  • AWS Database Migration Service (AWS DMS) を使用すると、データストアを に移行する AWS クラウド か、クラウドとオンプレミスのセットアップの組み合わせ間で移行できます。

その他のサービス

  • Terraform は HashiCorp の IaC ツールであり、クラウドおよびオンプレミスのリソースの作成と管理を支援します。

コードリポジトリ

このパターンのコードは、GitHub 内の Database Migration DevOps Framework using Terraform samples リポジトリで入手できます。

ベストプラクティス

  • データベース移行の自動テストを実装して、スキーマの変更とデータの整合性の正確性を確認します。これには、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。

  • データベースの堅牢なバックアップおよび復元戦略を、特に移行前に実装します。これにより、データの整合性が確保され、障害が発生した場合にフォールバックオプションが提供されます。

  • 移行中に障害や問題が発生した場合にデータベースの変更を元に戻すための堅牢なロールバック戦略を実装します。これには、以前のデータベースの状態にロールバックしたり、個々の移行スクリプトを元に戻したりすることが含まれます。

  • データベース移行の進行状況とステータスを追跡するため、モニタリングとログ記録のメカニズムを設定します。これにより、問題をすばやく特定して解決できます。

エピック

タスク説明必要なスキル

ローカルワークステーションに Git をセットアップして構成します。

Git ドキュメントの手順に従って、ローカルワークステーションに Git をインストールして設定します。

DevOps エンジニア

プロジェクトフォルダを作成し、GitHub リポジトリからファイルを追加します。

  1. このパターン用の GitHub リポジトリを開きます。

  2. [Code] を選択してクローンオプションを表示し、[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 マネジメントコンソール、AWS CodePipeline コンソールを開きます。

2. ナビゲーションペインで [Pipelines] (パイプライン) を選択します。

3. db-cicd-integration パイプラインを選択します。

4. パイプライン実行が正常に完了したことを検証します。

DevOps エンジニア
タスク説明必要なスキル

インフラストラクチャをクリーンアップします。

  1. プロジェクトが完了したら、コマンドを使用して、作成したインフラストラクチャをクリーンアップします。

    terraform destroy --var-file=terraform.sample
  2. yes を入力して確定します。

DevOps エンジニア

関連リソース

AWS ドキュメント

Terraformのドキュメント