Amazon Web Services ブログ

AWS DMS と AWS Snowball を使用して大規模なデータベース移行を可能にする



データベースの移行のある時点で、ネットワークの帯域幅が制限要因になります。高速インターネットリンクが利用できない場合、大量のデータを転送するには数か月かかる場合があります。たとえば、100 テラバイトのデータを 100 Mbps の専用接続で転送するには 100 日以上かかります。遠隔地にいる場合や他のネットワークの問題がある場合には、比較的小さな 500 GB データベースの移行でもかなり遅くなることがよくあります。さらに、多数の小規模なデータベースを同時に移行して規模が膨らむことで、この問題が悪化する可能性もあります。

他にも、データベース自体への外部アクセスが欠如していと、一般的にデータベース移行プロジェクトを妨害または遅延させる可能性があります。ソースデータベースからデータベースの移行を開始する準備が万端であるのに、企業ネットワーク外へのアクセスが許可されていないことを発見するということにもなりかねません。この記事で説明するシナリオや同種の他のシナリオでは、AWS Snowball サービスおよび同サービスの AWS Database Migration Service (AWS DMS) との統合により、大規模なデータベース環境をオフラインで移行する際に多大なメリットが得られる可能性があります。

1 回限りの移行として、または継続的なレプリケーションを使用して、200,000 を超えるデータベースが AWS DMS に移行されました。AWS DMS は AWS Schema Conversion Tool (AWS SCT) と連携して、低コストで可用性の高い方法でデータベース移行プロセスを大幅に簡素化および迅速化します。このツールは、お使いのデータセンターにインストールされている AWS Snowball デバイスと連携して動作します。このデバイスを使用すると、データベースの移行をローカルで実行し、AWS Snowball デバイスを AWS に返送してクラウドストレージターゲットにインポートできます。このプロセスにより、一般的にクラウドの移行を遅くしたり、妨げたりするネットワーク帯域幅の制約が緩和されます。

このブログ記事では、AWS のサービスをプロビジョニングして、データを受信し、AWS Snowball デバイスを設定し、そして実際にデータを移動するために必要な移行ジョブを設定します。

手順の概要とアーキテクチャ

AWS Snowball は、ペタバイトのデータを AWS に移動できる、AWS Snowball Edge Storage Optimized デバイスなどの高耐久化された物理ストレージおよびコンピューティングデバイスのサービスです。このサービスは、長い転送時間、使用可能な帯域幅の不足、セキュリティ上の懸念など、大規模なデータ転送で発生する可能性がある課題を克服するのに役立ちます。Amazon Prime で本や消費者向け製品を注文できることをご存知なら、2 日後にはお伺いできることも想像に難くないでしょう。同様に、Snowball Edge デバイスを AWS マネジメントコンソールから注文すると、数日後に約 80 TB の使用可能な暗号化ストレージ付きのデバイスがお客様のデータセンターに届きます。

以下は、移行ワークフローのアーキテクチャ図です (図 1)。 オンプレミスデータセンターにある主要なコンポーネントには、ソースデータベース、ローカルレプリケーションインスタンス、AWS SCT、Snowball Edge デバイスなどがあります。リモート AWS リージョンには、ステージング、ターゲットデータベース、およびリモートレプリケーションエージェントに使用される Amazon Simple Storage Service (Amazon S3) バケットがあります。ローカルレプリケーションインスタンスと SCT はソースデータベースを読み取り、既存のスキーマテーブルをソースデータベースから Snowball Edge デバイスにコピーします。次に Snowball Edge を AWS に返送すれば、お客様に代わってデータを Amazon S3 バケットにインポートします。増分データは、ローカルレプリケーションインスタンスによって S3 にアップロードされ、リモートレプリケーションインスタンスによってターゲットデータベースに適用されます。SCT によって作成された DMS タスクを使用して、データをターゲットにロードし、準備ができたらカットオーバーできます。

ローカルレプリケーションエージェントと SCT は、仮想マシンまたはベアメタルホストにインストールされます。DMS エージェントは、Red Hat Enterprise Linux バージョン 6.2〜6.8、7.0、7.1 (64 ビット)、および SUSE Linux バージョン 12 (64 ビット) でのみサポートされています。詳細については、AWS DMS ドキュメントを参照してください。

移行ワークフローのアーキテクチャ図

図 1。統合ソリューションアーキテクチャ

この統合アーキテクチャの際立った特徴には、次の点があります。

  • 外部へポートを開くことなく、データセンター内に安全で強化されたデータ転送デバイスを物理的に直接接続することができます。
  • 大規模なデータベースをオンプレミスから AWS クラウドに移動できるようになりました。
  • この統合では、「プル」モデルのではなく、「プッシュ」モデルでデータベースを移行します。
  • ネットワークインフラストラクチャをアップグレードし、専用の帯域幅を消費することなく、同じ Snowball Edge デバイスを使用して複数のデータベースを移行できます。
  • これらのマルチテラバイトデータベースを AWS に移行している間、オンプレミスデータベースはオンラインの状態が維持されます。Snowball Edge デバイスが AWS に返送され、ターゲット Amazon Relational Database Service (RDS) または Amazon EC2 ベースのデータベースに自動的にロードされると、これらは廃棄できます。
  • 既存のデータを (1 回) 移行するか、オプションでターゲットデータベースへの継続的なデータレプリケーションを実行できます。

Snowball Edge と AWS DMS の使用に関する注意事項:

  • データベースの移行を実行するときは、ステップバイステップのドキュメントに従ってください。
  • データ転送には、約 80 TB のストレージ容量を持つSnowball Edge Storage Optimized デバイス を注文することをお勧めします。
  • 必要なエージェントを実行するには、サポートされているオペレーティングシステムを実行している次の 2 つのホストが必要です。
    • DMS エージェント (AWS SCT パッケージの一部)。
    • Schema Conversion Tool
  • Snowball Edge は、ソースデータベースと同じネットワーク上にある必要があります。

次の手順では、AWS DMS と Snowball Edge の新しい統合を利用して、1 つまたは複数のデータベースを移行できます。

準備

準備には、前提条件の設定、Amazon S3 バケットの作成、Snowball Edge の入手と設定が含まれます。段階的な手順とベストプラクティスについては、Snowball Edge 移行ガイドをご覧ください。こちらの詳細な手順に従って、Snowball Edge アクセスキーとシークレットキーを取得する必要があります。

前提条件

前提条件として、ソースデータベースとターゲットデータベースをセットアップする必要があります。これを行うには、AWS DMS ソース設定ターゲット設定のドキュメントをご覧ください。

Amazon S3 バケットを作成する (ステージング S3)

ドキュメントの説明に従ってソースデータベースとターゲットデータベースをセットアップしたら、Amazon S3 にバケットを作成します。このバケットは「ステージング S3」とも呼ばれています。

このバケットは、データベース移行プロセス中に既存のデータと進行中のトランザクションの一時的なステージング領域として機能します。データベースの移行が完了し、ターゲットデータベースへのカットオーバーが完了したら、このステージング S3 バケットを削除できます。このバケットは、ターゲットデータベースと同じ AWS リージョンにある必要があります。また、AWS DMS と AWS SCT には、このバケットにアクセスするために AWS Identity and Access Management (IAM) ロールが必要です。

詳細については、AWS DMS ドキュメントの「S3 を AWS DMS のソースとして使用する場合の前提条件」を参照してください。

Snowball Edge を注文して設定する

次に、AWS マネジメントコンソールを使用して AWS Snowball ジョブを作成し、Snowball Edge デバイスを注文します。このステップの一部として、前のステップで作成した Amazon S3 バケット (ステージング S3) を指定します。

Snowball Edge デバイスが到着したら、Snowball Edge ドキュメントの使用開始セクションに記載されている手順に従って、ローカルネットワーク上でデバイスを設定します。Snowball Edge デバイスをネットワークに接続したら、Snowball クライアントをインストールします。最後に、マニフェストファイルをダウンロードし、コードのロックを解除して、こちらの手順に従って Snowball Edge のロックを解除します。

設定

次に、以下の手順を実行して移行の設定を行います。

ステップ 1: AWS SCT を設定する

設定の最初のステップで、AWS SCT のグローバル設定を行います。この設定には、AWS のサービスプロファイルと、ソースデータベースとターゲットデータベースのデータベースドライバーが含まれます。

これを行うには、AWS SCT を起動し、[Settings] で [Global Settings]、[AWS Service Profiles] の順に選択します。[Global Settings] ページが開きます。[Add new AWS Service Profile] を選択します。

次の要素がサービスプロファイルに追加されていることを確認します (Snowball Edge を使用するための AWS SCT の設定の詳細については、AWS DMS ドキュメントを参照してください)。

  • プロファイル名
  • AWS アクセスキー
  • AWS シークレットキー
  • リージョン
  • S3 バケットフォルダ

すべての必要な詳細とともに、新しい AWS のサービスプロファイルを追加する

次に、[Test Connection] をクリックして、すべてのプロファイル値が正しいこと、そしてすべてのテストで Pass のステータスが表示されていることを確認します。テストに合格したら、[OK] を選択してから [OK] を再度選択して、ウィンドウとダイアログボックスを閉じます。

[Import Job] をクリックし、Snowball Edge ジョブのリストを選択してから、[OK] をクリックします。

インポートジョブを選択し、リストから Snowball Edge ジョブを選択して、[OK] をクリックします。

次に、Snowball Edge を使用するために AWS SCT を設定します。Snowball Edge の IP アドレス、デバイスのリスニングポート (デフォルトは 8080)、前に取得した Snowball Edge のアクセスキーとシークレットキーを入力します。[OK] を選択して、変更を保存します。

Snowball Edge を使用するために AWS SCT を設定する

AWS SCT で AWS のサービスプロファイルが設定されている場合、ソースデータベースとターゲットデータベースの詳細を使用して、SCT に新しいプロジェクトを作成できます。その後、この AWS SCT プロジェクトのソースデータベースとターゲットデータベースの両方に接続できます。

AWS SCT で AWS のサービスプロファイルが設定されている場合、ソースデータベースとターゲットデータベースの詳細を使用して、SCT で新しいプロジェクトを作成できます。

ステップ 2: AWS DMS Replication Agent インスタンスにソースおよびターゲットデータベースドライバーをインストールする

AWS DMS は、レプリケーションインスタンスを使用してソースデータストアに接続し、ソースデータを読み取り、ターゲットデータストアで使用するためにデータをフォーマットします。その後、Snowball Edge デバイスにコピーされます。このアーキテクチャでは、リモート DMS インスタンスがデータをターゲットデータストアにロードします。このインスタンスにソースおよびターゲットデータベースドライバーをインストールする必要があります。

レプリケーションインスタンスのソースデータベースには ODBC ドライバーが必要です。たとえば、Linux で MySQL ドライバーを設定するには、次のコマンドを実行します。特定のソースおよびターゲットデータベース向けににこれらのドライバーを設定する方法については、データベースのドキュメントを参照してください。

sudo yum install unixODBC

sudo yum install mysql-connector-odbc

上記のコマンドを実行した後、/etc/odbcinst.ini ファイルに次の内容が含まれていることを確認してください。

cat /etc/odbcinst.ini
[MySQL ODBC 5.3 Unicode Driver]
Driver=/usr/lib64/libmyodbc5w.so
UsageCount=1

[MySQL ODBC 5.3 ANSI Driver]
Driver=/usr/lib64/libmyodbc5a.so
UsageCount=1

ステップ 3: AWS DMS Replication Agent インスタンスを設定し、AWS DMS Replication Agent をインストールする

エージェントを実行し、データを移行するために 1 つまたは複数のソースデータベースに接続するローカルマシンは、AWS DMS Replication Agent インスタンスと呼ばれています。このインスタンスで実行されているエージェントプロセスは、AWS DMS Replication Agent と呼ばれています。

いくつかの考慮事項に応じて、使用するインスタンスのサイズを決定します。考慮するのは、このマシンで実行するタスクの数と、ソースデータベースから Snowball Edge デバイスへのデータ移行のスループット要件です。

AWS DMS エージェントをインストールするには、AWS SCT インストールファイルが解凍された場所で「dmsagent」ディレクトリを見つけます。オペレーティングシステムに適したエージェントをインストールします。詳細なインストール手順については、こちらをご覧ください。

インストール中に、ポート番号とパスワードを入力する必要があります。このポート番号とパスワードは、次のステップの AWS SCT UI で使用します。

sudo /opt/amazon/aws-schema-conversion-tool-dms-agent/bin/configure.sh

AWS DMS レプリケーションエージェントを設定する
注意: AWS Schema Conversion Tool でエージェントを設定するときに以下のパラメータを使用します

AWS DMS Replication Agent のパスワードを入力してください
パスワードには 8 文字以上 20 文字以下の英数字を使用し、少なくとも 1 つの数字と 1 つの大文字を含める必要があります。
パスワード: *******
...
[パスワード設定コマンド] 成功しました

AWS DMS Replication Agent がリッスンするポート番号を入力してください
注意: ポート番号に応じてファイアウォールルールを設定する必要があります
ポート: 8192
サービスを開始しています...
...
AWS DMS Replication Agent が開始されました
スクリプトを再度実行することにより、いつでも AWS DMS Replication Agent を再設定できます。

ステップ 4:コンソールで AWS DMS レプリケーションインスタンスを設定する

AWS DMS と Snowball Edge の統合では、AWS DMS レプリケーションインスタンスは AWS DMS リモートレプリケーションインスタンスと呼ばれます。 この場合、インスタンスは AWS クラウドで実行されているため、このように名前が付けられます。この配置は、ローカルホストで実行される AWS DMS Replication Agent インスタンスの配置とは対照的です。2 つのレプリケーションインスタンスの説明については、アーキテクチャ図を参照してください (図 1)。

AWS マネジメントコンソールを使用して AWS DMS リモートレプリケーションインスタンスを作成する方法については、AWS DMS ドキュメントを参照してください。

実行

設定をセットアップしたので、次の手順に従い移行を実行できます。

ステップ 1: AWS SCT をレプリケーションエージェントに接続する

このステップでは、設定ステップ 3 で指定したホスト名、ポート番号、およびパスワードを使用してレプリケーションエージェントに接続します。

AWS SCT ユーザーインターフェイスで、[View]、[Database Migration View (Local&DMS)] に移動し、[Register] を選択します。

次のスクリーンショットに示すように、AWS DMS レプリケーションエージェント設定に使用されるホストの IP アドレス、ポート番号、およびパスワードを指定します。

AWS DMS レプリケーションエージェントの設定に使用されるホストの IP アドレス、ポート番号、およびパスワードを指定します。

こちらは、登録後の表示画面です。

こちらは、登録後の表示画面です

ステップ 2: AWS SCT でローカルおよび DMS タスクを作成する

ローカルおよびリモートの AWS DMS レプリケーションインスタンスでタスクを作成できるようになりました。AWS DMS タスクは、データ移行を実行する実際のワークハウスです。

次のステップは、AWS SCT UI から 1 つのステップでローカルおよびリモートタスクを作成する方法を示しています。

  1. 最初に、SCT で右クリックしてソーススキーマのコンテキストメニューを開き、[Create Local & DMS Task] を選択します。
  2. エージェント、レプリケーションインスタンス、IAM ロール、AWS インポートジョブ名などの詳細は、AWS SCT プロファイル設定と AWS リージョンの AWS DMS リソースから事前に入力されます。
  3. 適切なエージェント、レプリケーションインスタンス、移行タイプ、IAM ロールを選択します。ジョブ名を選択し、Snowball Edge IP アドレスを入力します。また、前のセクションのステップ 2 を実行したときに取得したローカル Amazon S3 アクセスキーとローカル S3 シークレットキーの詳細を入力します。

ローカルおよび DMS タスクを作成する

その結果、2 つのタスクが作成され、DMS コンソール (および次のセクションに示すように AWS SCT UI) でそれらを確認できます。

  1. ローカルタスク – このタスクは、既存のデータをソースデータベースから Snowball Edge に移行し、進行中のトランザクションもステージング S3 に移行します。
  2. DMS タスク – このタスクは、AWS DMS コンソールに普段表示されているタスクです。このタスクは、既存のデータをステージング S3 からターゲットデータベースに移行します。次に、進行中のトランザクションをターゲットデータベースに適用します。2 つのタスクの説明については、アーキテクチャ図を参照してください (図 1)。

AWS DMS コンソール:

その結果、2 つのタスクが作成され、AWS SCT UI と DMS コンソールで確認できます (2)

ステップ 3: 接続のテスト、タスクの開始、進行状況のモニタリング

これで、AWS DMS Replication Agent インスタンスからソースデータベース、Snowball Edge デバイス、S3 バケットへの接続をテストする準備ができました。これを行うには、AWS SCT UI [Tasks] タブで [Test] を選択します。

これにより、AWS DMS リモートレプリケーションインスタンスからステージング S3 バケットとターゲットデータベースへの接続もテストされます。

AWS SCT タスクタブでテストを選択することで、ステージング S3 バケットとターゲットデータベースへの接続をテストします

これらすべてのタスクのテストが成功しない限り、タスクを開始できません。

Snowball Edge デバイスが AWS に返送され、データがステージング S3 エリアにロードされるまで、AWS DMS タスクはコンソールで実行中の状態のままです。

次のスクリーンショットは、ロードされたデータストリームを示しています。

ロードされたデータストリーム

前述のように、Snowball Edge を AWS に返送すると、データはステージング S3 バケットにインポートされます。そこで、AWS DMS タスクは既存のデータのターゲットデータベースへのロードを自動的に開始します (フルロード)。次に、タスクは、進行中のレプリケーションの変更データキャプチャ (CDC) ログを適用します。次のスクリーンショットでレプリケーションタスクの進行状況を確認できます。

アプリケーションは、AWS の新しいデータベースをポイントできるようになりました。

すべての既存データが移行され、進行中のレプリケーションプロセスによってソースデータベースとターゲットデータベースが同じトランザクションレベルになったら、ターゲットデータベースにカットオーバーできます。これで、アプリケーションは、AWS の新しいデータベースをポイントできるようになりました。

お疲れさまでした。 AWS DMS と Snowball Edge の統合を使用して、マルチテラバイトの 1 つまたは複数のデータベースを AWS に移行しました。

Snowball Edge デバイスも使用せずに、この「プッシュ」モデルでデータベースを移行できるという事実を強調したいと思います。 その場合、ローカルタスクは、進行中のデータベーストランザクションを含む既存のデータをソースデータベースからステージング S3 バケットにコピーします。

さらに、抽出ロジックをソースの近くに配置することにより、変更データキャプチャ (CDC) の効率を高めることができます。たとえば、ユースケースが非常にアクティブなソースデータベース中のデータベーステーブルのサブセットのみを移行する必要がある場合、DMS は AWS に送信する前に外部の変更を除外できます。この手順により、データの移行に必要なネットワーク帯域幅が大幅に低下する可能性があります。

AWS DMS リモートレプリケーションインスタンス上の DMS タスクは、次に既存のデータをターゲットデータベースに直接ロードします。既存のデータが移行されたら、タスクは進行中のトランザクションのロードを開始します。このステージング S3 フローを使用して、Snowball Edge を注文する前に 1 つか 2 つの小さなテーブルでテストすることで、プロセス全体が正常に機能することを確認することもできます。

クリーンアップ

この移行プロジェクトの一環として、オンプレミスデータセンターにリソースをデプロイして、ローカルレプリケーションインスタンスと DMS Schema Conversion Tool を実行しました。また、追加のインスタンスとステージング S3 バケットをクラウドにデプロイしました。これらのリソースを使用しているときはコストがかかります。移行が完了したら、不要なリソースをすべて削除し、作業をクリーンアップしてください。

まとめ

多くの AWS の機能とサービスは、AWS チームが実際のカスタマーエクスペリエンスとニーズに注意深く耳を傾けることで生まれています。AWS DMS と Snowball Edge のこの統合は、このプロセスから生まれたアイデアを実装した格好の例です。

説明した手順を実行した後、オンプレミスでホストされているデータベースを AWS マネージドデータベースサービス (Amazon RDS) に移行しながら、そのような移行で通常消費されるネットワークフットプリントを最小限に抑えることができました。この手順により、お客様は、インターネットへの接続が制限されているオンプレミス環境からデータベースを迅速かつ安全に移行できます。AWS Database Migration Service と Snowball Edge デバイスにより、移行前にデータベースファイルをステージングするためのオンプレミスの共有ストレージが不要になります。また、このソリューションでは、ネットワークとアクセスポリシーを大幅に変更する必要はありません。データベースを AWS クラウドに移行することにより、セキュリティの向上、無制限のスケーリング、コスト削減の恩恵を受けられます。これらすべての利点を考え合わせると、お客様のチームは、典型的なデータベース移行の運用上の問題に対処するのではなく、組織に利益をもたらす新しい製品と機能の開発に集中できます。

この機能の詳細については、AWS ドキュメントをお読みください。ご質問やフィードバックがある場合は、以下にコメントを残してください。よろしくお願いします!

このブログは2017 年の Ejaz Sayyed と Mitchell Gurspan による記事を更新したものです。両名には元の記事を執筆してくれたことに感謝申し上げます。