OCIクラウド移行ガイドとは
オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア(@araidon,@kazunishi,@yama6,@tktk2712,@ritokuna)による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。
移行するサービス:Amazon Redshift
今回、移行対象とするのはAmazon Redshiftです。
SQL DeveloperのAmazon Redshift移行アシスタントを用いて、Amazon RedshiftをAutonomous Data Warehouseに移行する手順を解説します。
SQL Developerでは、Amazon Redshift以外にも、MySQL Database、Microsoft SQL Server、Sybase Adaptive Server、IBM DB2、TeradataなどのOracle Databaseエンジン以外のソースDBから、Autonomous Databaseにスキーマ・オブジェクトおよびデータをコピーする機能が用意されています。
RedshiftのDBエンジンはPostgreSQLベース、Autonomous Data WarehouseはOracle Databaseですが、Amazon Redshift移行アシスタントによって自動的にDDL文を生成し、いい感じにデータ変換を行ってくれます。
移行方式
OCI Compute VM上のSQL DeveloperからAmazon Redshift,Autonomous Data Warehouseの双方に接続し、SQL DeveloperのAmazon Redshift移行アシスタント機能を使用して移行します。
前提条件
今回はデータの移行検証を目的としているため、リソースは全てパブリックアクセスすることを前提としています。本番環境の移行時には、リソースのプライベート接続考慮、両クラウド間の閉域接続を推奨いたします。AWS-OCI間のVPN接続については下記記事をご参照ください。
【OCI クラウド移行ガイド】 AWSとOCIをVPNで接続してみた
https://qiita.com/yama6/items/c188de191269cb604341
-
Redshift,Autonomous Data Warehouseに接続するための、Windows Server 2019のComputeVMがパブリックサブネット上に構築されていること
Windows Server 2019の構築については、下記記事を参考にさせていただきました。
-
Redshiftへのパブリックアクセスを許容するVPCリソースが設定されていること
Redshiftのパブリックアクセス設定については、下記記事を参考にさせていただきました。
移行手順
- ComputeにSQL Developerインストール
- Amazon Redshift JDBC ドライバー設定
- Redshift 作成
- 接続確認 SQL Developer→Redshift
- ADW 作成
- 接続確認 SQL Developer→ADW
- データインポート用のS3作成
- RedshiftからS3へのデータアンロードユーザ作成
- 移行アシスタント機能実行
- 移行結果確認
1. ComputeにSQL Developerインストール
Compute VMにRDP接続後、ブラウザから下記ページにアクセスします。
Windows 64-bit with JDK 11 included をダウンロードします。
※ダウンロード時に、「現在のセキュリティ設定では、このファイルをダウンロードできません。 」と表示されるので、下記手順でファイルのダウンロードを有効化してください。
[インターネット オプション] > [セキュリティ] タブ > [レベルのカスタマイズ] ボタン > [セキュリティ設定] ダイアログの「ファイルのダウンロード」 > 「有効にする」
ダウンロード後、zipファイルを解凍し、"sqldeveloper"をクリックします。
SQL Developerのインストール作業は以上になります。
2. Amazon Redshift JDBC ドライバー設定
SQL DeveloperからJDBC ドライバーでRedshiftへ接続するため、設定を進めていきます。
Amazon Redshift JDBC ドライバーのダウンロード
下記ページより、「JDBC 4.2 互換ドライバーバージョン 2.1」をWindwos Serverにダウンロードし、zipファイルを解凍します。
Amazon Redshift JDBC ドライバーのプリファレンス設定
ツール→プリファレンスを選択します。
画面左のナビゲーションペインから、「データベース」→「サード・パーティJDBCドライバ」を選択します。
エントリの追加ボタンを押下し、ダウンロード&解凍したフォルダから、"redshift-jdbc42-2.1.0.29.jar" を選択します。
エントリ登録されたことを確認したら、OKボタンを押下します。
設定確認
Amazon Redshift JDBC ドライバーを設定したことで、「データベースのタイプ」タブを選択した際に、"Amazon Redshift"が表示されるようになります。
ドライバーの設定作業は以上になります。
移行対象のRedshiftを作成し、ここから繋げられるか確認していきましょう。
3. Redshift 作成
下記手順を参考に、Redshiftを作成します。
以下、手順との変更点のみ記載します。
ノードの種類はdc2.large、ノード数は1に設定しました。
作成時にデータを入れるため、「サンプルデータをロード」にチェックを入れます。
自動的にTICKETというサンプルデータベースが作成されます。
SQL Developerからの簡易的な接続を考慮し、管理者パスワードは手動追加を選択しています。
追加設定「デフォルトを使用」のタブをオフにし、VPCの設定をします。
今回は、Redshift へのパブリック接続を許可するために「[パブリックにアクセス可能] をオンにする」にチェックを付けます。
クラスターサブネットグループは、AZが異なる3つのパブリックサブネットを登録しています。
あとは作成ボタンを押下し、Redshiftが作成されたことを確認します。
コンソール画面から、タブ「データベース」を選択し、「データベース接続」からデータベース名、ユーザ名を入力し、「接続」ボタンを押下するとスキーマ情報が確認できます。
TICKETデータベースを構成するテーブルを確認することができました。
次に、SQL Developerからも接続を確認していきましょう。
4. 接続確認 SQL Developer→Redshift
「データベースのタイプ」タブを開き、"Amazon Redshift"を選択します。
Nameにredshift(任意文字列入力)、Redshiftを作成した際に設定したユーザー名、パスワードを入力します。
Amazon Redshift JDBC URLは、Redshiftのコンソール画面から文字列を取得し、入力します。
接続ボタンを押下します。
接続に成功すると、画面左の接続ナビゲーションに、redshiftが追加されます。
接続に失敗する場合は、「[パブリックにアクセス可能] をオンにする」チェックが付いているか、Redshiftで設定したサブネットグループを構成するサブネットがインターネットゲートウェイにルートがあるか、セキュリティグループがRedshiftの接続ポート5439でインバウンドが許可されているかを確認してください。
Redshift作成時に自動ロードしたデータが格納されていることも確認できます。
移行元であるRedshiftの準備作業は完了です。
次に、移行先であるAutonomous Data Warehouseを作成していきます。
5. Autonomous Data Warehouse の作成
下記手順に従ってAutonomous Data Warehouseを作成します。
ワークロード・タイプには、分析系システムを対象とするAutonmous Data Warehouse (ADW)を選択します。
データベース・バージョンは19cを選択しました。
ネットワーク・アクセスは、「許可されたIPおよびVCN限定のセキュア・アクセス」を選択し、IPアドレスには、事前に立てたWindows ServerのComputeVMが持つパブリックIPを指定しました。
Autonomous Databaseの作成 ボタンを押下し、プロビジョニングの完了を確認します。
Autonomous Data Warehouseの作成作業は以上です。
6. 接続確認 SQL Developer→ADW
SQL DeveloperからAutonomous Data Warehouseへの接続を確認します。
事前準備:クラウド・ウォレットのダウンロード
SQL Developerから接続する際に、クラウド・ウォレットが必要となります。
OCIコンソール ADWの詳細画面から、「データベース接続」を押下し、Windows Server上にウォレットをダウンロードします。
SQL Developerからの接続
「データベースのタイプ」タブが "Oracle"に設定されていることを確認します。
接続タイプのタブを押下し、「クラウド・ウォレット」を選択します。
「構成ファイル」フィールドの「参照」ボタンをクリックし、事前準備でダウンロードしたクラウド・ウォレットのzipファイルを選択します。
ユーザ名、パスワードに、ADWを作成した際のユーザ名、パスワードを入力します。
接続ボタンを押下し、画面左の「接続」にADWが追加されたことを確認します。
接続に失敗する場合は、「許可されたIPおよびVCN限定のセキュア・アクセス」にて設定したIPアドレスに、SQL Developerを操作しているWindows ServerのパブリックIPが設定されているかを確認してください。
以上でADWの接続確認は完了です。いよいよ本題の、RedshiftからADWへデータベースを移行作業に移ります。
7. データインポート用のS3作成
ADWからRedshiftに直接アクセスすることはできないため、移行データを格納するためのステージング環境として、S3が必要となります。
下記の手順に従ってS3を作成します。
今回は、パブリックアクセスをONにしています。
移行アシスタント利用時にこのS3のバケット情報が必要となります。(後述)
8. RedshiftからS3へのデータアンロードユーザ作成
目的
移行アシスタントを実行すると、RedshiftがS3へデータをアンロードします。
このとき、移行アシスタントが本処理の実行権限を持つ必要があります。
移行アシスタントからS3へのデータアンロード操作実行権限はIAMユーザの資格情報を用います。
というわけで、S3アクセス権限を持つIAMユーザを作成していきます。
IAMグループの作成
下記を参考に、"adw"という名前のIAMグループを作成します。
IAMユーザの作成
下記を参考に、"adwuser"という名前のIAMユーザを作成します。
IAMグループへのユーザ追加
作成したadwグループにユーザを追加します。
最期に、「ユーザを作成」ボタンを押下します。
資格情報(アクセスキー、シークレットアクセスキー)の設定
ユーザ作成後、ユーザー一覧から"adwuser"を選択し、「セキュリティ認証情報」のタブを押下します。
「アクセスキー」フィールドの「アクセスキーを作成」ボタンを押下します。
説明タグ値には適当な文字列を入力し、「アクセスキーを作成」ボタンを押下します。
作成後表示される「アクセスキー」と「シークレットアクセスキー」をメモします。
インラインポリシーの作成
「許可」タブを押下し、「許可の追加」ボタンを押下して「インラインポリシーの追加」を選択します。
サービスの選択で"S3"を選択します。
「すべての S3 アクション (s3:*)」にチェックを入れ、「リソース」で「すべて」を選択します。
「次へ」ボタンを押下し、ポリシー名に適当な文字列を入力します。
「ポリシーの作成」ボタンを押下します。
以上でユーザ作成作業は完了です。
9. 移行アシスタント機能実行
SQL Developerに戻り、先ほど作成したユーザ権限で移行アシスタント機能を実行していきます。
移行画面の表示
ツール→移行→クラウド移行を選択します。
すると、RedshiftからAutonomous Data Warehouseへの移行画面が表示されます。
プロパティの入力と選択
項目 | 入力設定値 |
---|---|
接続 | redshiftを選択 |
選択したスキーマ | 「使用可能なスキーマ」から"public"を >ボタンで選択 |
データを含める | チェックを入れる |
AWSアクセスキー | 「資格情報(アクセスキー、シークレットアクセスキー)の設定」で取得したアクセスキー |
AWS秘密アクセス | 「資格情報(アクセスキー、シークレットアクセスキー)の設定」で取得したシークレットアクセスキー |
S3バケットURI | 「データインポート用のS3作成」で作成したS3のバケットURI * |
今回一番のトラップはS3バケットのURI形式でした。
S3バケットURIは下記形式に従います。
https://s3.リージョン名.amazonaws.com/バケット名
S3バケットURI形式について
下記ドキュメントでは、「https://s3-リージョン名.amazonaws.com/バケット名」 となっていますが、この形式で実行するとスキーマ・オブジェクトは移行できてもデータだけ移行できない結果となりました。
Autonomous DatabaseへのAmazon Redshiftの移行
https://docs.oracle.com/ja-jp/iaas/autonomous-database-serverless/doc/migrating-amazon-redshift.html#GUID-37FF7BD6-E52C-4ECB-912D-5614B62B4CCE
s3のあとの -(ハイフォン)を .(ドット)に読み替える必要があります。
「次へ」ボタンを押下します。
ターゲット情報確認
移行アシスタントを実行すると、移行のためにSQLDEV_MIGREPOSという内部ユーザが作成されます。
移行オプションで「今すぐ移行」にチェックを入れます。
「次へ」ボタンを押下します。
「終了ボタン」を押下すると、移行アシスタントが実行されます。
ポップアップにてRedshiftMigrationTaskは9段階で実行されます。
9/9が完了したら実行自体は終了です。
実行ログ確認
実行ログは、ステップ2/3で画面表示されたディレクトリにフォルダが生成され、格納されます。
"redshift_migration_reportYYYY-MM-DDTHH-MM-XX.XXXXXXXXZ" ファイルを確認します。
This is a generated Redshift Migration Report file 'redshift_migration_report'.
______________________________________________________________
______________________________________________________________
OPERATION ID : 8
LOGFILE TABLE : COPY$8_LOG
BADFILE TABLE : COPY$8_BAD
SOURCE SCHEMA : public
TARGET SCHEMA : PUBLIC_
SOURCE TABLE : category
TARGET TABLE : CATEGORY
SOURCE TABLE ROWS : 11
TABLE ROWS LOADED : 11
ERROR MESSAGE : null
STATUS : COMPLETED
START TIME : 2024-08-31 13:27:50.816938
END TIME : 2024-08-31 13:27:54.874944
______________________________________________________________
…
上記のようにテーブルごとにログが出力されます。
スキーマ名を比べてみると、ソーススキーマが"public"であったことに対し、ターゲットスキーマは"PUBLIC_"に変換されていることがわかります。
SOURCE TABLE ROWSとTABLE ROWS LOADEDの行数が一致し、STATUSがCOMPLETEDになっていればツール実行は成功です。
10. 移行結果確認
Redshift,ADWそれぞれで対応するテーブルに対して、下記の同じSQLを実行します。
select * from public.users;
select * from public_.users;
RedshiftからADWへ同じ内容のデータが移行されていることが確認できました。
おわりに
SQL DeveloperからRedshiftとADWの双方に繋いでさえしまえば、ソースとターゲットの設定だけで簡単に移行できることが実感できました。プラットフォームが異なるサービスでも、共通のViewerでデータを確認できるので便利です。
この移行アシスタントでは、他のDBエンジンからAutonomous Databaseへの移行機能も提供しています。次回以降、SQL Serverなどの移行を試してみたいと思います。
参考