RDS Aurora MySQL Snapshot to OCI HeatWave Lakehouseを試してみた

はじめに

皆さん、Amazon RDSやAmazon Auroraのスナップショットデータを、HeatWave Lakehouseで扱えることをご存知でしょうか。
下記のとおり、Amazon RDSのDB スナップショットデータを Amazon S3 バケット(以降、Amazon S3)にエクスポートするとParquet 形式で保存されます。

DB スナップショットを Amazon S3 バケットにエクスポートすると、Amazon RDS はデータを Parquet 形式に変換してエクスポートし、保存します。

引用元:Amazon RDS の Amazon S3 バケットにエクスポートする際のデータ変換

HeatWave Lakehouseでは、インポートデータとしてParquet形式をサポートしているので、理論上Amazon S3にエクスポートされたデータをそのまま直接読み込むことができます。

本ブログでは、Amazon AuroraのスナップショットのエクスポートデータをHeatWave Lakehouseで本当に読み込めるのかどうか確認します。

また、HeatWave Lakehouseの基本的な使い方については、弊社ブログのHeatWave Lakehouse を試してみたでもご紹介していますのでご参照ください。

検証の流れ

今回は以下の手順で検証を行います。

  1. Amazon AuroraのスナップショットをAmazon S3にエクスポートする
  2. Amazon S3 からOCI Object Storageにデータをコピーする
  3. OCI Object StorageからMySQL HeatWave Lakehousにデータをインポートする

1.Amazon AuroraのスナップショットをAmazon S3にエクスポートする

まずは、Amazon AuroraのスナップショットをAmazon S3に取得していきます。
詳細な説明はAmazon公式ドキュメントをご確認ください。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_CreateSnapshotCluster.html

目次

1-1.Amazon Auroraのスナップショットを作成する

  • Amazonのスナップショット画面にて「スナップショットの取得」ボタンを押下します。

  • DBスナップショットの取得画面にて、以下の設定を行いAmazon Auroraのスナップショットを取得します。

    • スナップショットのタイプ:DBクラスター
    • DBクラスター:自身が作成したDBインスタンス(今回はAmazon Auroraのインスタンスを選択)
    • スナップショット名:任意(今回はaurora-snap-knd)
  • しばらくすると、スナップショットが作成されます。

1-2. スナップショットをAmazon S3にエクスポートする 

今回は AWS CLI を使用して Amazon Auroraのスナップショットを Amazon S3 にエクスポートします。
start-export-task コマンドを指定することで簡単にエクスポートできてしまいます。

オプションの詳細については公式ドキュメントをご確認ください。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.html#USER_ExportSnapshot.Exporting

以下の例では、スナップショットエクスポートタスクは knd-snapshot-export と名前が付けられ、スナップショットを ss-knd-test-bucket という名前の Amazon S3に、worldスキーマのみをエクスポートします。

また、今回は実証しませんが、--export-onlyオプションを省略することで全てのスキーマをエクスポートすることができます。

エクスポートタスクを実行し、しばらくするとAmazon S3バケット内にスナップショットがエクスポートされます。

Amazon S3に保存されたエクスポートデータの形式を確認すると、しっかりとParquet形式で保存されています。

これで、AWS側の準備は完了です!

2.Amazon S3のスナップショットデータをOCI Ocject Storageに移行する

続いて、Amazon S3からOCI Object Storageにデータ転送します。
データ転送については、Rcloneというクラウドバックエンド間でファイルやディレクトリを同期するコマンドラインユーティリティを使用します。
参考:https://rclone.org/

今回はOCIのコンピュートインスタンス上にRcloneをインストールし、Amazon S3からOCI Object Storageにデータを転送します。

2-1.Rcloneのインストール

OCIのコンピュートインスタンス上で以下のコマンドを実行し、インストールします。

2-2.Rcloneの設定(転送元と転送先の設定)

RcloneにAWSとOCIの接続設定を行うのですが、接続設定に必要な情報を事前に確認しておきたいと思います。

2-2-1.OCI(転送先)の情報取得

転送先であるOCIの接続設定に必要な以下の情報を取得していきます。

①顧客秘密キー(アクセスキーと秘密キー)

ユーザプロファイル画面から使用する顧客秘密キーのアクセスキーを確認します。また、対応する秘密キーは顧客秘密キー生成時に控えてある値を確認してください。
(顧客秘密キーの秘密キーは、生成時以降に再表示されません。秘密キーを忘れた場合や顧客秘密キーがない場合は新規に生成してください。)

②リージョン識別子

リージョン管理のインフラストラクチャ・リージョン画面より、リージョン識別子を確認します。
(例:Tokyoリージョンならならap-tokyo-1)

③オブジェクトストレージネームスペース

オブジェクトストレージのバケット詳細画面にて、AWS S3からデータを受け取るバケットのネームスペースを確認します。

④APIエンドポイントについて

先ほど取得した「②リージョン識別子」と「③オブジェクトストレージネームスペース」の値に置き換えて、以下のAPIエンドポイントの文字列を作成します。

OCIの接続情報の確認は以上です。

2-2-2.AWS(転送元)の情報取得

次に転送元であるAWSの接続設定に必要な情報を取得していきます。

①アクセスキー(アクセスキーとシークレットアクセスキー)

IAMユーザ情報画面の概要欄にアクセスキーがあるので、使用するアクセスキー情報を確認します。また、対応するシークレットアクセスキーはアクセスキー生成時に控えてある値を確認してください。
(シークレットアクセスキーは、生成時以降に再表示されません。シークレットアクセスキーを忘れた場合やアクセスキーがない場合は新規に生成してください。)

AWSの接続情報の確認はこれだけでOKです。

2-3.RcloneのOCI(転送先)接続設定

先ほどの手順2-2-1.で取得したOCI接続情報を使って、rclone configコマンドで接続設定します。

  1. rclone configコマンドを実行します。新規に接続情報を作成するか聞かれるので 「n」 を入力します。
  2. 接続名を入力します。OCI側の接続設定を行うので、ここでは分かりやすく 「oci」 とします。
  3. ストレージ・プロバイダーとプロバイダーを選択します。ここでは、ストレージ・プロバイダーは S3準拠なので 「4(S3準拠のストレージ・プロバイダー) 」、プロバイダーは 「34(他のS3互換プロバイダー)」を選択します。
    (筆者はプロバイダー情報の選択を誤り、この後のOCI接続確認でエラーになりました。気をつけてください。)

  4. 次のステップで認証情報を入力するので 「1」 を選択します。

  5. OCIの顧客秘密キー情報(アクセスキーと秘密キー)を入力します。(手順2-2-1.で調べた値を入力)

  6. リージョン識別子を入力します。(手順2-2-1.で調べた値を入力)

  7. APIエンドポイントを入力します。(手順2-2-1.で調べた値を入力)

  8. リージョン制約情報は入力せず、そのままEnterキーを押下し、ACL情報はデフォルトのままでよいので「1」を入力します。

  9. より詳細な設定を行うか聞かれますが、「n」を選択し設定を完了します。設定情報が表示されるので問題ないか確認します。

OCIへの接続確認

設定が成功していれば、以下のコマンドを実行することでOCI Object Storageにアクセスし、すべてのバケットを一覧表示します。

ここでは< remote-name >には、先ほどの手順2-3-2.で入力した「oci」を入力し、無事にOCI Object Storage内にアクセスしバケットを取得することができました。

以上でOCIの接続設定が完了です。

2-4.RcloneのAWS の接続設定

引き続き、rclone configコマンドでAWS接続情報を設定します。入力手順がOCIの時と少し異なるので注意が必要です。
(2-2-2.で取得したAWS情報を使用します)

  1. AWS接続情報を作成するので「n」を選択します。

  2. 接続名は「aws」と入力、ストレージ・プロバイダーは 「4(S3)」、プロバイダーは「1(AWS)」を選択します。

  3. 次のステップでAWSの認証情報を入力するので「1」を選択します。

  4. アクセスキー情報(アクセスキーとシークレットアクセスキー)を入力します。(手順2-2-2.で調べた値を入力)

  5. リージョンを選択します。(例:Asia Pacific (Tokyo)なら13を選択)

  6. エンドポイント、リージョン制約、ACLについては特に設定不要なので、何も入力せずそのままEnterキーを入力します。

  7. S3にオブジェクトを保存する際の暗号化アルゴリズムについて聞かれます。今回、S3にオブジェクトを保存する場合はKMS暗号化を使用しているので「aws:kms」と入力します。

    Rcloneはデータ転送時にはMD5SUMテストを実施します。上記のオプションを選択しないと、OCIへデータコピーする際にチェックサム・エラーとなるので注意してください。
    Rcloneのドキュメントに記載がありますので、ご確認ください。
    https://rclone.org/s3/#key-management-system-kms

  8. KMSキーやストレージクラスについては特に設定は不要なので、何も入力せずにそのままEnterキーを入力します。

  9. より詳細な設定を行うか聞かれますが、「n」を選択し設定を完了します。設定情報が表示されるので問題ないか確認します。

AWSへの接続確認

以下のコマンドを使って、Amazon S3の指定したバケットにアクセスしオブジェクトを一覧表示します。
取得に失敗する場合、rclone configコマンドの設定情報が間違っているので再度設定しなおしてください。

ここでは< remote-name >には先ほど入力した「aws」を入力し、< aws-S3-bucket-name >には転送元となるバケット名を入力し、無事にAmazon S3内にアクセスすることができました。

以上でAWSの接続設定が完了です。

2-5.データをコピーの実施

以下のコマンドで、Amazon S3バケットのデータをOCI Object Storageへコピーします。

今回はAWS S3のss-knd-test-bucketというバケットから、OCI Object Storageのknd-bucketというバケットにデータをコピーしました。

以上でAmazon S3からOCI Object Storageへのデータ転送が完了しました。

3.OCI Object Storageから HeatWave Lakehouseにデータをインポートする

最後に、OCI Object Storageに転送したAWS AuroraのスナップショットのエクスポートデータをHeatWave Lakehouseにインポートしてみます。

3-1.OCI Object Storageのバケット内データへのアクセス許可を取得する

まず、HeatWave Lakehouseからデータをインポートする前に、OCI CLIコマンドでバケット内のデータに対してPAR(事前認証済みリクエスト)を取得します。

OCI CLIコマンドによるPARの取得については、Pre-Authenticated Request Examplesとしてドキュメントに公開されていますのでご確認ください。
https://dev.mysql.com/doc/heatwave/en/mys-hw-lakehouse-par-examples.html

以下のコマンドではknd-bucketというオブジェクトストレージのバケット内のデータにアクセスするPAR(事前認証済みリクエスト)を取得します。

コマンドが成功するとPARが取得できます。full-pathの値をデータインポート時に使用するので、控えておきましょう。

3-2.OCI Object Storage内のデータをHeatWave Lakehouseにインポートする

HeatWave Lakehouseでは、外部テーブルを使用してObject Storage内のデータをインポートすることができます。
コマンドの詳細はドキュメントをご確認ください。
https://dev.mysql.com/doc/heatwave/en/mys-hw-lakehouse-table-syntax.html

以下のコマンドでは、先ほどのknd-bucketバケットに対するPARを使用し、worldスキーマのcountryテーブルとcountrylanguageテーブルをインポートします。
ここで大切なことは、インポートするファイル形式がParquet形式であることです。Amazon S3のエクスポートデータと同じであるため、そのままファイルをインポートすることができてしまいます。

インポートが成功するとLOAD SUMMARYが出力され、HeatWave Lakehouse上でアクセスできるようになります。

まとめ

今回、Amazon S3のエクスポートデータをそのままHeatWave Lakehouseへインポートできることを確認できました。

AWS上のAmazon RDSやAmazon AuroraなどのDBインスタンスのスナップショットを使うことで、わざわざDBツールなどでバックアップを取らなくてもよい点だったり、AWS上に存在するDBの特定の静止点でのデータ分析をHeatWave Lakehouseでできちゃうという点が魅力的ですね!

皆さんもぜひ、HeatWave Lakehouseをお試しください!

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃OCIのサポート業務に従事している有資格者で構成された技術サポートチームがOCIに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次