Amazon Web Services ブログ
Microsoft Azure SQL Database から Amazon Aurora への移行
Oracle や Microsoft SQL Serverなどのライセンスが必要なエンジンから、AWS上で稼働するオープンソースエンジンへ移行する気運がますます高まっています。対象データの移行先として Amazon Aurora が選ばれています。この投稿では AWS Database Migration Service (AWS DMS) を用いた Microsoft Azure SQL database から Amazon Aurora MySQL クラスタへの移行方法を紹介します。
前提条件
この記事では、Azure SQLデータベースが既にインストールされていることを前提としています。移行には、このデータベースの接続情報(DNSエンドポイント、ユーザー名、パスワードなど)が必要です。また、移行作業に使用するユーザには、Azure SQLデータベースのデータにアクセスするための適切な権限が必要です。
記事の目的に合わせ、ターゲット(移行先データベース)として Amazon Aurora クラスタを作成します。 AWS DMSはソース(移行元データベース)およびターゲットとして、様々なデータベースエンジンをサポートしていますが、多くのお客様は独自のストレージエンジンを使用したAmazon Auroraを選択します。このエンジンは、3つのアベイラビリティゾーンに跨る耐久性、自動ポイントインタイムバックアップ、最大15台の低レイテンシ読み取りレプリカを実現します。
ターゲット用の Aurora クラスタを既に作成している場合は、新規に作成する必要はありません。新しい Aurora クラスタを作成する場合は、Amazon Aurora DB クラスタ作成の手順を参照してください。
AWS DMS インフラのセットアップ
ここまででソースとターゲットの情報が確認できたので、AWS DMS インフラを設定していきましょう。 AWS DMSは非常に高い柔軟性をもつ為、多くのコンポーネントから構成されています。AWS CloudFormationを使用することで、これらのコンポーネントをまとめて単一の「スタック」にグループ化し、原子性を保った1つのユニットとして何度も再作成することができます。
AWS CloudFormation のコンソールを開いて設定を始めます。
注:この記事では 全てのリソースを us-east-1 リージョンで作成していますが、お客様が実施する際はターゲットデータベースと同じAWSリージョンでリソースを起動してください。
この投稿で使用されているAWS CloudFormationテンプレートは、GitHubで利用できます。このテンプレートファイルをダウンロードしてから、コンソールの[ファイルの選択]ボタンを選択します。ダウンロードしたテンプレートファイルを選択し、[次へ]をクリックします。
[詳細の指定]ページで、次の項目を指定します。
スタックの名前 | スタックを一意に識別する名前。 |
VPC | AWS DMS リソースが稼働するVPC。VPCの詳細はこちら。 |
Subnet List | AWS DMS リソースを稼働させるサブネット。上で選択したVPCに存在するサブネットから選択する。VPCおよびサブネットの詳細はこちら。 |
Source Hostname | Azure SQL のホスト名。 |
Source Username | Azure SQL のユーザ名。 |
Source Password | Azure SQL のパスワード。 |
Source Database | ソースデータベースのデータベース名。 |
Target Hostname | Amazon Aurora クラスタのエンドポイント。 |
Target Username | Amazon Aurora クラスタのユーザ名。 |
Target Password | Amazon Aurora クラスタのパスワード。 |
入力が完了したら[次へ]を選択します。
[オプション]ページの値は必要に応じてご入力ください。この記事では変更せず[次へ]を選択します。
[レビュー]ページで、スタックに指定されている設定を確認します。問題がなければ、[作成]を選択します。
[作成]を選択すると、ステータスが[CREATE_IN_PROGRESS]と表示されます。このステップは完了するのに約5-10分かかります。スタックが作成されると、ステータスは[CREATE_COMPLETE]に変わります。
スタックが作成されたら、[リソース]タブを選択して構築したスタックを確認できます。
以下のリソースが作成されます。
AzureReplicationInstance | ソースのデータを読み取ってターゲットに書き込むために設定されたAmazon EC2 インスタンス。 |
DefaultVpcSubnetGroup | このスタックの作成時に指定したサブネットから成るサブネットグループ。レプリケーションインスタンスを展開できるサブネット。 |
DmsReplicationSecurityGroup | レプリケーションインスタンスに適用したセキュリティグループ。 |
SourceEndpoint | Azure SQLデータベースに接続するAWS DMS “エンドポイント”オブジェクト。 |
SslCertificate | レプリケーションインスタンスとターゲット間のトラフィックを暗号化するために使用されるSSL(Secure Sockets Layer)証明書。 |
TargetEndpoint | Amazon Aurora インスタンスに接続するAWS DMS “エンドポイント”オブジェクト。 |
AWS CloudFormationテンプレートの以下のキー設定は、Azure SQLデータベースの移行に関連しています。
Object | Setting | Value |
Source Endpoint | ExtraConnectionAttributes | isAzureDB=true |
この設定はAWS CloudFormationテンプレートで最初から設定されていますが、他のエンジンからの移行時には不要なので気にする必要はありません。
ネットワークアクセスを許可する
ここまででターゲットデータベース用のインスタンスが用意され、AWS DMSインフラストラクチャが稼動しているので、ここからレプリケーションインスタンスからソースエンドポイント及びターゲットエンドポイントとの間の接続を確立する必要があります。
Amazon Auroraセキュリティグループを開く
この手順では、レプリケーションインスタンスからAmazon Auroraクラスタへのアクセスを許可します。まず、AWS CloudFormationコンソールで[出力]タブを選択し、[ReplicationInstanceSecurityGroupId]に指定された値を確認します。これは、レプリケーションインスタンスに適用されたセキュリティグループの識別子です。トラフィックがレプリケーションインスタンスからAmazon Auroraクラスタに流れるように設定するには、この値が必要です。
次に、左のナビゲーションでインスタンスを選択して、インスタンスのリストを表示します。リストからあなたのターゲットAmazon Auroraインスタンスを選択します。インスタンスを選択したら、次の図に示すようにセキュリティグループを選択します。
この画面で、[インバウンド]タブを選択します。[編集]を選択し、次の図に示すようにレプリケーションインスタンスのセキュリティグループ識別子を追加し、[保存]を選択します。
Azure SQLデータベースファイアウォールを開く
AWS DMSレプリケーションインスタンスがAzure SQLデータベースと通信するには、Azure SQLデータベースファイアウォールで例外を許可する必要があります。この設定には、レプリケーションインスタンスのパブリックIPアドレスが必要です。この値はレプリケーションインスタンスを選択することで確認できます。確認したIPアドレスをコピーします。
この例外をAzure SQLデータベースのファイアウォール設定に入力します。
スキーマを更新する
レプリケーションインスタンスからソースとターゲットの間の接続を有効にしたので、ここからレプリケーションインスタンスでスキーマを更新する必要があります。更新の為に2つの手順を実施します。まず、レプリケーションインスタンスがソースとターゲットの両方と通信できることを検証します。次に、ソースのスキーマリストを表示します。これにより、移行するスキーマを選択できます。
スキーマを更新するには、ナビゲーションウィンドウから[エンドポイント]を選択し、1つ目のエンドポイントをチェックして[スキーマの更新]を選択します。
図にに示すようにレプリケーションインスタンスを選択し、[スキーマの更新]を選択します。
テストが成功したか確認するため、次の図に示すように[接続]タブを選択します。
2番目のエンドポイントでも同じプロセスを繰り返します。
タスクを作成する
これで、ソース、レプリケーションインスタンス、ターゲット間で接続の確立を確認できました。ここから、実際のレプリケーションタスクを設定します。これを行うには、左側のナビゲーションで[タスク]を選択します。
次に[タスクの作成]を選択します。
このページでは多くのデフォルト設定を使用します。使用する値は以下の通りです。
タスク名 | タスクの名前 |
レプリケーションインスタンス | レプリケーションインスタンス |
ソースエンドポイント | ソース エンドポイント |
ターゲットエンドポイント | ターゲット エンドポイント |
移行タイプ | [既存のデータを移行する] |
作成時にタスクを開始 | チェック |
ターゲットテーブル作成モード | [ターゲット上のテーブルの DROP] |
レプリケーションに LOB 列を含める | [制限付き LOB モード] |
最大 LOB サイズ(KB) | 32 |
ロギングの有効化 | チェック |
ページ下部の[テーブル マッピング]でスキーマ名を選択します。この例では、[SalesLT]スキーマが選択されています。
選択したスキーマの全てのテーブルを選択するには、[テーブル名]の項目にワイルドカードを示す[%(パーセント記号)]を入力します。
次に、[選択ルールを追加]を選択します。
次に[タスクの作成]を選択します。
タスクの作成が開始され、続けてタスクが実行されます。
この時点で、指定されたスキーマに属する全テーブルとそのデータは、Azure SQLデータベースからAmazon Auroraに転送されています。お好きなMySQLクライアント(MySQL Workbench等)を使用して全てのデータが転送されたことを確認できます。
クリーンアップ
テーブルがMicrosoft Azure SQLデータベースからAmazon Auroraに正常に移行されたので、ここからクリーンアップについて説明します。
まず、作成したタスクを削除します。これは、画面上部の[削除]を選択するだけです。
次に、Auroraクラスタへのレプリケーションインスタンスからのアクセス権を削除します。これを行うには、[インスタンス]ページに移動し、以下に示すようにAuroraクラスタのセキュリティグループを選択します。
次の図で示すセキュリティグループのエントリを削除します。
セキュリティグループのアクセスが取り消されたので、あとはAWS CloudFormationスタックを破棄するだけです。この為には、スタックに移動し、該当スタックを選択した状態で、[アクション]>[スタックの削除]の順に選択します。
[はい、削除します]を選択します。
削除が完了するまで待ちます。削除には5〜10分かかります。
さいごに
これで、Amazon Auroraクラスタが正常に作成され、AWS CloudFormationテンプレートを使用してAWSデータベース移行サービスが開始され、Microsoft Azure SQLデータベースがAmazon Auroraに移行されました。
この記事で使用されているサービスの詳細については、Amazon Aurora、AWS Database Migration Service、およびAWS CloudFormationのドキュメントを参照してください。
About the Authors
Steve AbrahamはAmazon Web Servicesのprincipal solutions architect です。彼はお客様と協力して、データベースプロジェクトに関するガイダンスと技術支援や、AWSを使用してソリューションの価値を向上させる支援を行っています。
翻訳は上原が担当しました(原文はこちら)