

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

# Terraform を使用してデータベース移行用の CI/CD パイプラインを設定する
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform"></a>

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

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

このパターンでは、信頼性が高く自動化された方法でデータベース移行を管理するための継続的インテグレーションと継続的デプロイ (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 プラクティスを採用しやすくなります。これにより、ソフトウェアのデリバリープロセスの俊敏性、信頼性、効率性が向上します。

## 前提条件と制限
<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)を参照してください)
+ HashiCorp の Terraform AWS Provider バージョン 3.0.0 以降 (このプロバイダーの [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/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/87845d9f-8e6e-4c51-b9ee-9e7833671d05/images/a1e95458-419a-4de9-85ef-b17d8340700a.png)


このアーキテクチャの詳細は以下のとおりです。
+ ソースデータベースは、オンプレミスか、仮想マシン (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 パイプラインの詳細。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/87845d9f-8e6e-4c51-b9ee-9e7833671d05/images/3aca17e5-6fd7-4317-b578-ab5e485c6efb.png)


このプロセスでは、次のことが行われます。
+ 検証パイプラインはすべてのチェックを検証します。必要なすべての検証が完了すると、統合パイプラインは次のステップに進みます。
+ DB プロビジョニングパイプラインは、データベース用に提供された Terraform コードに対して Terraform アクションを実行するさまざまな AWS CodeBuild ステージで構成されます。これらのステップが完了すると、ターゲット AWS アカウントにリソースがデプロイされます。
+  AWS DMS パイプラインは、テストを実行し、IaC を使用して移行を実行するための AWS DMS インフラストラクチャをプロビジョニングするさまざまな CodeBuild ステージで構成されます。

## ツール
<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) はフルマネージド型の継続的統合サービスであり、このサービスにより、ソースコードをコンパイルし、テストを実行し、デプロイ可能なソフトウェアパッケージを作成できます。
+ [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/) は HashiCorp の IaC ツールであり、クラウドおよびオンプレミスのリソースの作成と管理を支援します。

**コードリポジトリ**

このパターンのコードは、GitHub 内の [Database Migration DevOps Framework using Terraform samples](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>
+ データベース移行の自動テストを実装して、スキーマの変更とデータの整合性の正確性を確認します。これには、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。
+ データベースの堅牢なバックアップおよび復元戦略を、特に移行前に実装します。これにより、データの整合性が確保され、障害が発生した場合にフォールバックオプションが提供されます。
+ 移行中に障害や問題が発生した場合にデータベースの変更を元に戻すための堅牢なロールバック戦略を実装します。これには、以前のデータベースの状態にロールバックしたり、個々の移行スクリプトを元に戻したりすることが含まれます。
+ データベース移行の進行状況とステータスを追跡するため、モニタリングとログ記録のメカニズムを設定します。これにより、問題をすばやく特定して解決できます。

## エピック
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-epics"></a>

### ローカルワークステーションをセットアップする
<a name="set-up-your-local-workstation"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ローカルワークステーションに 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/ja_jp/prescriptive-guidance/latest/patterns/set-up-ci-cd-pipeline-for-db-migration-with-terraform.html) | DevOps エンジニア | 

### ターゲットアーキテクチャをプロビジョニングする
<a name="provision-the-target-architecture"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 必須パラメータを更新します。 | `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/ja_jp/prescriptive-guidance/latest/patterns/set-up-ci-cd-pipeline-for-db-migration-with-terraform.html) | DevOps エンジニア | 

### デプロイメントを確認する
<a name="verify-the-deployment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| デプロイを検証する。 | `db-cicd-integration` パイプラインのステータスを確認して、データベースの移行が完了していることを確認します。1. にサインインし AWS マネジメントコンソール、[AWS CodePipeline コンソール](https://console.aws.amazon.com/codesuite/codepipeline/home)を開きます。2. ナビゲーションペインで **[Pipelines]** (パイプライン) を選択します。3. `db-cicd-integration` パイプラインを選択します。4. パイプライン実行が正常に完了したことを検証します。 | DevOps エンジニア | 

### 使用後にインフラストラクチャをクリーンアップする
<a name="clean-up-infrastructure-after-use"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| インフラストラクチャをクリーンアップします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/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 のインストール](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+ [Terraform のバックエンド設定](https://developer.hashicorp.com/terraform/language/backend)
+ [Terraform AWS プロバイダーのドキュメント](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)