6
3

【OCI クラウド移行ガイド】 NoSQL Database MigratorでAmazon DynamoDB を Oracle NoSQL Database Cloud Serviceへ移行してみた

Posted at

OCIクラウド移行ガイドとは

オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア(@araidon,@kazunishi,@yama6)による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。

移行したいサンプルワークロード

日々の業務でよく目にするサービスを中心に、サンプルワークロードとしてまとめてみました。このシリーズでは、主にAWSからの移行を取り上げます。
このワークロードは、ユーザがログインして、Web上で写真を共有するWebサービスをイメージしています。
image.png

移行するサービス:Amazon DynamoDB → Oracle NoSQL Database Cloud Service

今回、移行対象とするのはAmazon DynamoDBです。
OCIにもOracle NoSQL Database Cloud ServiceというNoSQL Databaseサービスがあり、Amazon DynamoDBやMongoDBからの移行をサポートするNoSQL Database Migratorというツールが用意されております。
こちらの記事では、NoSQL Database Migratorを利用して、Amazon DynamoDBからNoSQL Database Cloud Serviceへの移行手順をガイドします。

image.png

NoSQL Database Migratorとは

Oracle NoSQL Databaseマイグレータを使用して、NoSQL表をあるデータ・ソースから別のデータ・ソース(オンプレミスまたはクラウドのOracle NoSQL Databaseなど)または単純なJSONファイルに移動できます。MongoDB形式のJSON入力ファイル、DynamoDB形式のJSON入力ファイル(AWS S3ソースまたはファイルから格納)またはCSVファイルをオンプレミスまたはクラウドのNoSQLデータベースにコピーすることもできます。

下記は、現在サポートされている移行元(ソース)のデータ形式の一部です。

タイプ(移行元ファイルの場所) フォーマット(データ形式)
ファイル・システム JSON
ファイル・システム MongoDB JSON
ファイル・システム DynamoDB JSON
ファイル・システム CSV
OCIオブジェクト・ストレージ JSON
OCIオブジェクト・ストレージ MongoDB JSON
OCIオブジェクト・ストレージ CSV
Amazon S3 DynamoDB JSON

NoSQL Database Migratorでは、移行元を"ソース"、移行先を"シンク"と表現します。
今回は、下記を移行元、移行先とした場合のガイドをご案内します。

移行元(ソース) 移行先(シンク)
Amazon S3 DynamoDB JSON Oracle NoSQL Database Cloud Service

image.png

移行手順は下記のサイトを参考にしました。

移行手順

① DynamoDBの作成とエクスポート
② NoSQL Database Migratorのダウンロードとインストール
③ NoSQL Database Migratorの権限設定
④ 構成ファイル(JSON形式)の作成
⑤ runMigratorコマンドの実行
⑥ 移行データの確認

1. DynamoDBの作成とエクスポート

1-1. DynamoDBの作成

移行元のソースとするDynamoDBは、下記記事を参考に作成しました。

マネージドコンソールから、ステップ1、ステップ2を実施することで、今回の移行元のDynamoDBとして扱うMusicという名前のテーブルデータが作成されます。
image.png
※画像では、ステップ4まで実施しています。

1-2. DynamoDBのエクスポート

下記サイトを参考に、DynamoDBをS3にエクスポートします。

エクスポートされたファイル形式は、DynamoDB JSONを選択します。
DynamoDBからS3へのエクスポートが完了すると、下記ファイル群が出力されます。
image.png

このファイル群のうち重要なのは、dataフォルダの中に入っている<自動生成ランダム文字列>.jsonファイルです。ここに、DynamoDBからエクスポートした実データがjson形式で格納されます。

{"Item":{"Artist":{"S":"No One You Know"},"SongTitle":{"S":"Call Me Today"},"AlbumTitle":{"S":"Somewhat Famous"},"Awards":{"N":"1"}}}
{"Item":{"Artist":{"S":"No One You Know"},"SongTitle":{"S":"Howdy"},"AlbumTitle":{"S":"Somewhat Famous"},"Awards":{"N":"2"}}}
{"Item":{"Artist":{"S":"Acme Band"},"SongTitle":{"S":"Happy Day"},"Awards":{"N":"10"},"AlbumTitle":{"S":"Updated Album Title"}}}
{"Item":{"Artist":{"S":"Acme Band"},"SongTitle":{"S":"PartiQL Rocks"},"AlbumTitle":{"S":"Another Album Title"},"Awards":{"N":"8"}}}

のちの構成ファイル(JSON形式)の作成にて、ファイル群がエクスポートされたプレフィックスへのURLを使用しますので、「URLのコピー」ボタンを押下して、URLをメモしておきます。
image.png

2. NoSQL Database Migratorのダウンロードとインストール

2-1. NoSQL Database Migratorのダウンロード

では、本記事のメインコンテンツとなるNoSQL Database Migratorをダウンロードします。

image.png

AWS S3をソースとして移行する機能はver.1.4.0で対応したため、nosql-migrator-1.5.0 を選択します。

ラベルを押下すると、別タブでログイン画面に遷移します。
Oracleアカウントでログインすると、Oracle Software Delivery Cloudが表示されます。

image.png

Oracleアカウントをお持ちでない場合には、こちらでユーザ登録します。
https://www.oracle.com/jp/education/guide/newuser-172640-ja.html

"I reviewed and accept the Oracle License Agreement."にチェックを入れ、Downloadボタンを押下します。

Oracle_SSN_DLM_XXXXXXX.exe がダウンロードされるので、ローカルPCで実行します。

image.png

最初に表示される画面でダウンロードディレクトリを選択し、NEXTボタンを押下すると、ダウンロードが開始されます。このうち、"V1033765-01.zip"ファイルを使用してNoSQL Database MigratorをEC2上に展開します。

2-2. NoSQL Database Migratorのインストール

このzipファイルを、移行元であるAmazon EC2上で展開します。
Amazon CloudShellのアップロード機能を使用し、CloudShell上にzipファイルをアップロードします。
アップロード後、EC2へファイルを転送します。
※EC2上で、nosqlMigratorというディレクトリを予め作成しています。

scp -i test-pub-key.pem V1033765-01.zip ec2-user@XXX.XXX.XXX.XXX:/home/ec2-user/nosqlMigrator

zipを展開します。

unzip V1033765-01.zip -d /home/ec2-user/nosqlMigrator

展開すると、nosql-migrator-1.5.0ディレクトリに下記ファイル群が解凍されます。

CHANGELOG.md  LICENSE.txt  README.md  THIRD_PARTY_LICENSES.txt  lib  log4j2.xml  runMigrator  sdk_logging.properties

2-3. NoSQL Database Migratorの環境設定:Java11インストール

Oracle NoSQL Database Migratorを実行するには、Java 11以降のバージョンが必要です。
Java11をインストールします。
NoSQL Database MigratorをダウンロードしたEC2のOSに合わせてインストールコマンドを実行します。
本検証環境ではAmazon Linux 2023を使用しているので、java-11-amazon-correttoをインストールしました。

sudo yum install java-11-amazon-corretto-devel.x86_64

3. NoSQL Database Migratorの権限設定

3-1. OCIの権限設定

EC2上のNoSQL Database MigratorからOCI側のリソース(今回はNoSQL Database Cloud Service)を操作できるよう権限設定をします。
NoSQL Database Cloud Serviceを操作する権限が付与されているユーザを使用するものとします。

下記記事を参考に、OCIのconfigファイル作成、APIキーのアップロードを行います。

3-2. AWSの権限設定

EC2上のNoSQL Database MigratorからAWS側のリソースを操作できるよう権限設定をします。
S3を操作するAmazonS3FullAccessの権限が付与されているIAMユーザを使用するものとします。

下記リファレンスを参照し、IAMユーザのアクセスキー、シークレットアクセスキーを作成します。

configファイル作成のため、下記コマンドを実行します。ユーザ名は任意です。

aws configure --profile 【ユーザ名】

作成したIAMユーザのアクセスキー、シークレットアクセスキーを使用し、順番に入力していきます。

AWS Access Key ID [None]: XXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

/.awsディレクトリに config credentials ファイルが生成されます。

[ec2-user@ip-XXX-XXX-XXX-XXX .aws]$ ls
config  credentials

これでNoSQL Database Migratorから必要なサービスを扱う上での権限設定は完了です。

4. 構成ファイル(JSON形式)の作成

ここからは構成ファイルを作成していきます。
migrator-config.jsonという名前でnosqlMigratorディレクトリに空ファイルを作成します。

$ touch migrator-config.json

このファイルに記載する内容は下記のとおりです。
→以降は、それぞれのパラメータで設定しているものを解説しています。

{
  "source" : {
    "type" : "aws_s3",→ エクスポートファイルの出力先タイプの指定
    "format" : "dynamodb_json",→ 1-2. DynamoDBのエクスポートでエクスポートされたファイル形式のDynamoDB JSONのこと
    "s3URL" : "https://dynamojson.s3.ap-northeast-1.amazonaws.com/AWSDynamoDB/01697945981151-8c5a4858/", → 1-2. DynamoDBのエクスポートでメモしたDynamoDBのエクスポートファイルが出力されたS3のURL
    "credentials" : "/home/ec2-user/.aws/credentials",→credentialファイルの保存先
    "credentialsProfile" : "XXXXX" → 3-2. AWSの権限設定で設定したユーザ名
  },
  "sink" : {
    "type" : "nosqldb_cloud",→ シンクの種類を選択
    "endpoint" : "ap-tokyo-1",
    "table" : "test",→ table名(任意)
    "compartment" : "test",→コンパートメント名(任意)
    "schemaInfo" : {
      "defaultSchema" : true,→Trueの場合、ツールがデフォルトでスキーマを作成してくれる
      "readUnits" : 100,
      "writeUnits" : 60,
      "DDBPartitionKey" : "Artist:String",→DynamoDBのパーティションキーを指定
      "DDBSortKey" : "SongTitle:String",→DynamoDBのソートキーを指定
      "storageSize" : 1
    },
    "credentials" : "/home/ec2-user/.oci/config",→configファイルの保存先
    "credentialsProfile" : "DEFAULT",→3-1. OCIの権限設定で設定したユーザ名
    "writeUnitsPercent" : 90,
    "requestTimeoutMs" : 5000
  },
  "abortOnError" : true,
  "migratorVersion" : "1.5.0"→3-1. NoSQL Database Migratorのバージョン指定
}

ポイントとしては、1-1. DynamoDBの作成で構築したDynamoDBの下記の項目を明示的に指定している点です。

DynamoDB項目名 DyanmoDBキー種類 Migratorパラメータ
Artist パーティションキー DDBPartitionKey
SongTitle ソートキー DDBSortKey

この設定を誤ると、ツールが正常実行されても予期せぬ結果になる可能性があるため、ソースのDynamoDBのテーブル構造を把握して本ファイルを作成することが重要です。
ちなみにDynamoDB側で存在していたSongTitleというソートキーをDDBSortKeyに設定せずツールを実行したら、Oracle NoSQL Database Cloud Service側の行数は2行になりました。

5. runMigratorコマンドの実行

ではここまで準備が整ったら、ツールを実行してみましょう。

$ ./runMigrator --config /home/ec2-user/nosqlMigrator/migrator-config.json
2023-10-26 11:14:56.191 [INFO] Configuration for migration:
{
  "source" : {
    "type" : "aws_s3",
    "format" : "dynamodb_json",
    "s3URL" : "https://dynamojson.s3.ap-northeast-1.amazonaws.com/AWSDynamoDB/01697945981151-8c5a4858/",
    "credentials" : "/home/ec2-user/.aws/credentials",
    "credentialsProfile" : "XXX"
  },
  "sink" : {
  },
  "sink" : {
    "type" : "nosqldb_cloud",
    "endpoint" : "ap-tokyo-1",
    "table" : "test2",
    "compartment" : "XXX",
    "schemaInfo" : {
      "defaultSchema" : true,
      "readUnits" : 100,
      "writeUnits" : 60,
      "DDBPartitionKey" : "Artist:String",
      "DDBSortKey" : "SongTitle:String",
      "storageSize" : 1
    },
    "credentials" : "/home/ec2-user/.oci/config",
    "credentialsProfile" : "DEFAULT",
    "writeUnitsPercent" : 90,
    "requestTimeoutMs" : 5000
  },
  "abortOnError" : true,
  "migratorVersion" : "1.5.0"
}
2023-10-26 11:14:56.198 [INFO] creating source from given configuration:
2023-10-26 11:14:58.701 [INFO] source creation completed
2023-10-26 11:14:58.710 [INFO] creating sink from given configuration:
2023-10-26 11:15:00.612 [INFO] sink creation completed
2023-10-26 11:15:00.613 [INFO] creating migrator pipeline
2023-10-26 11:15:00.614 [INFO] migration started
2023-10-26 11:15:00.614 [INFO] [cloud sink] : start loading DDLs
2023-10-26 11:15:00.638 [INFO] [cloud sink] : executing DDL: CREATE TABLE IF NOT EXISTS test2 (Artist String,SongTitle String,document JSON, PRIMARY KEY(SHARD(Artist),SongTitle)),limits: [100, 60, 1]
2023-10-26 11:15:05.748 [INFO] [cloud sink] : completed loading DDLs
2023-10-26 11:15:05.868 [INFO] [cloud sink] : start loading records
2023-10-26 11:15:05.877 [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01697945981151-8c5a4858/data/7py2vdvmqm5khbgqumgvc7phry.json.gz
2023-10-26 11:15:06.288 [INFO] migration completed.
Records provided by source=4, Records written to sink=4, Records failed=0, Records skipped=0.
Elapsed time: 0min 5sec 653ms
Migration completed.

正常に処理が実行できました!

  1. 構成ファイル(JSON形式)の作成 にて記載した "defaultSchema" : true で生成されたDDL文が下記となります。
CREATE TABLE IF NOT EXISTS test2 (Artist String,SongTitle String,document JSON, PRIMARY KEY(SHARD(Artist),SongTitle))

これがCREATE TABLE文となり、Oracle NoSQL Database Cloud Serviceが生成されます。

ここまでの手順も加味した、NoSQL Database Migratorの実行イメージは下記のとおりです。

image.png

6. 移行データの確認

では実際にOCIにログインし、Oracle NoSQL Database Cloud Serviceが作成されているか確認してみましょう。
画面左上のハンバーガーメニューから、データベース>Oracle NoSQL Databaseに遷移します。
image.png

  1. 構成ファイル(JSON形式)の作成でパラメータに指定した"table" : "test2"の通り、テーブルが作成されていることが分かります。

image.png

テーブル名のラベルをクリックすると表の詳細が確認できます。
image.png
データの探索フィールドで、「実行ボタン」を押下します。
image.png
すると、パーティションキーに設定したArtistカラム、ソートキーに設定したSontgTitleカラム、documetカラムにそれぞれソースの値が入っていることが確認できます。

image.png

以上で、NoSQL Database Migratorを使用した、Amazon DynamoDB から Oracle NoSQL Database Cloud Serviceへの移行は完了です。

まとめ

移行ツールが用意されているため、容易にDynamoDBからOracle NoSQL Database Cloud Serviceへの移行ができました。構成ファイルに記載するソースとシンクのパラメータについての詳細は下記をご確認ください。

参考

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3