ワークショップを試してみた:RDS(Oracle)からAurora PostgreSQLへの移行 #reinvent

ワークショップ:DAT307 - Running Oracle Databases on Amazon RDS and Migrating to PostgreSQLを実行してみたレポートです。Oracle から Amazon Aurora(PostgreSQL Compatible)へ、AWS DMS/SCTを利用したマイグレーションを体験できました。
2019.02.17

こんにちは。コンサルティング部の崔です。

ようやくre:Inventブログ10本目です。

ワークショップのDAT307:Running Oracle Databases on Amazon RDS and Migrating to PostgreSQL を実施してみたのでレポートをお届けします。
DMS/SCTを利用して、RDS(Oracle)からAurora PostgreSQLへの移行を試してみました。

セッション概要

If you'd like to move your Oracle databases to the cloud, this workshop is for you.

We review the basics of Amazon Relational Database Service (Amazon RDS) and how Oracle databases run in Amazon RDS.
We then leverage the combination of AWS Schema Conversion Tool (AWS SCT) and AWS Database Migration Service (AWS DMS), and we show you how to migrate your databases to Amazon Aurora PostgreSQL.
We provide an AWS CloudFormation template to set up the entire environment for the lab. You need a laptop with a Firefox or Chrome browser and a working AWS account.

スピーカー

  • Sameer Malik - Sr. Databases Specialist SA
  • Michael Russo - Database Engineer

資料

スライド

Workshopの実施

Amazon RDS for Oracle Workshop Guide

  • スライドP.7に RDS(Oracle)を構築していくワークショップのテキストリンクがありますが、今回はスキップします。
  • https://bit.ly/2PCYbM1
  • 内容は次のとおりです。気になる方は実施してみて下さい。
    • Lab 1: Creating RDS Oracle Database Instance ( ~10-15 minutes)
    •   Optional: - Using AWSCLI to launch RDS Oracle Database Instance
    • Lab 2: - Connecting to the RDS Oracle DB ( ~2-5 minutes)
    • Lab 3: High Availability on RDS Oracle (Multi-AZ) ( ~10-15 minutes)
    • Lab 4: Scaling the RDS Oracle DB Instance ( ~10-15 minutes)
    • Lab 5: Enabling Performance Insights and logs to Cloudwatch ( ~10-15 minutes)
    • Lab 6: Minor Version upgrade of RDS Oracle DB ( ~12-18 minutes)
    • Lab 7: Backup and restore for RDS Oracle DB Instance ( ~10-15 minutes)
    • Lab 8: Parameter Groups and Option Groups on RDS Oracle ( ~10-15 minutes)
    • Lab 9: Common DBA tasks on RDS Oracle ( ~10-15 minutes)
    • Lab 10: Cleaning up the RDS Oracle resources created for the labs ( ~5 minutes)

Amazon DMS Workshop Guide

  • スライドP.17に今回のメインとなるAWS DMS/SCTを利用したワークショップのテキストリンクがあります。
  • https://bit.ly/2Ti5DKG からWorkshopガイドをダウンロードして進めてみます。
  • OracleからAurora PostgreSQLや、SQL ServerからAurora MySQLへのマイグレーションを体験できます。

CloudFormationテンプレートの実行

まずは移行元となるソースDB、移行先となるターゲットDB、移行のためのDMSインスタンスやSCTのセットアップを行います。

テキスト内にCloudFormationのテンプレートURLが記載されているので、それを指定します。
Cfnテンプレート:https://s3-us-west-2.amazonaws.com/mtt-reinvent-2018/reInvent-2018-DMS-Workshop-v1.4.template

ある程度、デフォルトで値が入力されていますが、以下の項目を入力・選択していきます。

  • スタックの名前:今回は、create-db-migration と入力
  • SourceDBEngineType:oracle-se2 か sqlserver-se から選択。今回はOracleで。
    • Oracleの場合は、Aurora PostgreSQLへ
    • SQL Serverの場合は、Aurora MySQLへのワークショップとなります。
  • SCTHostKeyName:環境に合わせて既存の KeyPair を選択。

上記を確定後、スタックを作成します。15〜20分くらいでスタック作成が完了します。

AWS SCTへのRDP接続

EC2インスタンスが作成されているので、WIndowsのAdministratorのパスワードを取得してRDP接続します。手順は割愛します。

JDBC Driverの準備

デスクトップにあるJDBC Driver Install Instructions.rtfを開き、リンク先からOracleのJDBC Driverであるojdbc8.jarと、PostgreSQLのpostgresql-42.2.5.jarをダウンロードします。

ダウンロードしたJDBC Driverはそれぞれ C:\JDBC Drives\Oracle と C:\JDBC Drivers\PostgreSQL へ配置します。

AWS SCTの実行

デスクトップ上の AWS Schema Conversion Tool のショートカットからSCTを実行します。

新しいバージョンが存在する場合、ダウンロードしてアップデートするかどうか聞いてきますので、アップデートします。

まず、SCTのプロジェクトを作成していきます。

プロジェクト名、パス、ソースDBのエンジンを指定します。

次に、ソースDBのOracleの情報を、CloudFormationのOutputs から入力し、先程インストールした jdbc8.jarのパスを指定します。

  • Server Name:CloudFormation の Output の SourceDBHostname の値を入力
  • Server Port:1521 を入力
  • Oracle SID:RDS の DB名 SRCDB を入力
  • User Name:CloudFormation の Output の SourceDBUser の値を入力
  • Password:CloudFormation の Output の SourceDBUserPassword の値を入力
  • Store Password:チェック
  • Oracle driver path:C:\JDBC Drivers\Oracle\ojdbc8.jar を入力

左下のTest Connectionボタンを押して接続できることを確認します。

Connection successfulとなったら、Nextをクリックします。

次にOracleからAurora PostgreSQLへ変換したいスキーマを選択します。

今回はDMS_SAMPLEを選択します。

Nextをクリックすると、解析が進みます。

解析が完了すると、Database migration assessment report が作成されます。

下の方にスクロールしていくと、オブジェクト種別ごとのターゲットDBへ変換率を確認することができます。

今回の例ですと、テーブルや制約、インデックス、シーケンスが変換率100%です。
対象のオブジェクト数も確認できます。

次に、ターゲットDBの情報を入力します。

  • Target database engine:Amazon Aurora(PostgreSQL compatible)を選択
  • Server Name:CloudFormation の Output の TargetDBHostname の値を入力
  • Server Port:5432 を入力
  • Database:postgres を入力
  • User Name:CloudFormation の Output の TargetDBUser の値を入力
  • Password:CloudFormation の Output の TargetDBUserPassword の値を入力
  • Store Password:チェック
  • Amazon Aurora driver path:C:\JDBC Drivers\PostgreSQL\postgresql-42.2.5.jar を入力

左下のTest Connectionボタンを押して接続できることを確認します。

Connection successfulとなったら、Finishをクリックします。

スキーマの変換

プロジェクトの作成が完了後、AWS SCTが起動します。

画面左側にソースDBのスキーマ一覧が表示されているので、DMS_SAMPLEのみ選択します。
DMS_SAMPLEを右クリックし、Convert schema を選択します。

AWS SCTがソーススキーマからターゲットスキーマに変換します。

この時点で左側でソーススキーマのオブジェクトを選択すると、それに対応するターゲット側のオブジェクトと一緒に、DDL文が画面中央、上下に表示されます。

画面右側でターゲットスキーマを選択し、右クリックで Apply to database を選択します。これでターゲットスキーマにオブジェクトが作成されます。

DMSの設定:ソースDBのエンドポイント

AMCのAWS DMSのメニューを開き、左側のメニューからエンドポイントを選択し、エンドポイントを作成します。

  • エンドポイントタイプ:ソースを選択
  • RDS DB インスタンスの選択:チェックします
  • RDSインスタンス:ソースDBを選択
  • ソースエンジン:oracleを選択
  • パスワード:CloudFormation の Output の SourceDBUserPassword の値を入力
  • SID/サービス名:RDS の DB名 SRCDB を入力

VPCを選択し、接続テストを実行します。

保存するとソースDBのエンドポイントの作成が完了します。

DMSの設定:ターゲットDBのエンドポイント

続いてターゲットDBのエンドポイントを作成します。

  • エンドポイントタイプ:ターゲットを選択
  • RDS DB インスタンスの選択:チェックします
  • RDSインスタンス:ターゲットDBを選択
  • SSLモード:none を選択
  • パスワード:CloudFormation の Output の TargetDBUserPassword の値を入力
  • データベース名:postgres を入力

VPCを選択し、接続テストを実行します。

保存するとターゲットDBのエンドポイントの作成が完了します。

外部キーの解除

ターゲットDB側の外部キーを解除します。

DMSはテーブルを一つずつロードするため、ターゲットDB側のテーブルに外部キーが設定されていると、ロードする順番によってはエラーとなります。
SCTを使ってソースオブジェクトからターゲットオブジェクトを作成した場合、外部キーも作成されます。
Aurora PostgreSQLの場合、パラメータsession_replication_roleを利用して外部キーを解除します。

今回は、RDSのパラメータグループの設定で解除します。

新規にパラメータグループを作成し、パラメータ session_replication_role を編集し、値に replica を設定します。

次にターゲットDBインスタンスに設定されているパラメータグループを変更します。DBインスタンスを選択し、作成したパラメータグループを選択します。

変更のスケジュールで、すぐに変更 を選択します。

DMSの設定:タスクの作成

AMCのAWS DMSのメニューを開き、左側のメニューからタスクを選択し、タスクを作成します。

  • タスク名:dms-test-task と入力
  • 移行タイプ:既存のデータを移行する を選択
  • ターゲットテーブル作成モード:何もしない を選択
  • レプリケーションにLOB列を含める:制限付きLOBモード を選択
  • ロギングの有効化:チェック

次に、テーブルマッピングを追加します。

スキーマ名:DMS_SAMPLEを選択し、選択ルールの追加 をクリックします。
続いて、変換ルールの追加 をクリックします。

ターゲットにスキーマを、スキーマ名にDMS_SAMPLEを、アクションに 小文字にする を選択します。

変換ルールの追加をクリックします。

もう一度、変換ルールの追加をクリックし、ターゲットにテーブルを、スキーマ名にDMS_SAMPLEを、アクションに 小文字にする を選択します。変換ルールの追加をクリックします。

もう一度、変換ルールの追加をクリックし、ターゲットに列を、スキーマ名にDMS_SAMPLEを、アクションに 小文字にする を選択します。変換ルールの追加をクリックします。

以上を設定して、タスクの作成を実行します。タスクの作成と同時にタスクが実行されます。

データ移行

25分ほど待つと、データ移行が完了しました。その後、データ件数が多いため、データの検証にさらに時間がかかりましたが、問題なくデータ移行できていました。

感想

OracleデータベースからAmazon Aurora(PostgreSQL compatible)へのマイグレーションの一連の流れを、今回のワークショップを通じて簡単に体験することができました。

AWS SCTを利用することでスキーマ移行を、また、AWS DMSを利用することでデータ移行が簡単に実行できます。

実際の移行現場では、AWS SCTですべてのスキーマをエラーなく移行することは難しいかもしれません。

特に、ファンクションやプロシージャなどのコードオブジェクトは難しいでしょう。
しかしながら、AWS SCTでアセスメントレポートを出力することで、エラー内容を検証することが可能です。
データベースの移行を考えている方は、今回のワークショップを参考に、まずはAWS SCTでアセスメントを実行してみて、自動変換率をチェックしてみてはいかがでしょうか?

以上です。