IBMCloudのCloudantをレプリケーションする方法


TL;DR

仕事で使ったIBMCloudで、Cloudantを定期的にデータ移行する処理を書いたときに、ハマった話。
バックアップ用テーブルやデータ保存タイミングなど、一定のタイミングでデータ移行をしたい場合に行う。

実施環境

Windows 10
node 12

前提

IBMCloudのアカウントを持っていること。

手順

1. Cloudantに「_replicator」テーブルを作成する。
 私はここで移行元、移行元DBがあるのに、ずっと「database not exists」とエラーが出力されて、ハマっていました。

2. 移行先のdbを作成する。
 以降先のテーブルを作成する。

 この手順なら、同一cloudantサービス内でも、違うCludantサービスへもデータを移行できます。
(別のアカウントへのDBレプリケートはやったことないので、誰かお試しを。。。)

3. 以下のrequestを投げる。

const request = require('request');
...

const body = {
url:`https://XXXXXX.bluemix.cloudantnosqldb.appdomain.cloud/_replicator`,
  json:{
    source:`https://XXXXXX.bluemix.cloudantnosqldb.appdomain.cloud/from_db`,
    target:`https://XXXXXX.bluemix.cloudantnosqldb.appdomain.cloud/to_db`,
    create_target:true
  }
}

request.post(body,() => {
  resolve("success");
})

4. 「_replicator」テーブルにデータが入っていることを確認する。
こんなデータが入っていれば、レプリケーション処理は実施されています。

一覧のStateが「Complated」になっていれば、DBの複製は完了しています。

補足

このプログラムが書ければ、IBMCloud のfunctionsとtriggerを組み合わせれば、
定期実行も可能です。
(定期実行させる方法に関しては、いつか書きたい。。。)

終わりに

この手順は、userとpasswordの古い認証形式で、移行を行いました。
新しいIAM認証形式でのデータ移行について、後日調べてみたいと思っております。