IBM CloudantのバックアップをローカルのCouchDBにリストアする

# はじめに
IBM Cloudantのバックアップ・ファイルをCouchDBでリストアします。
CouchDBの環境は、Podmanを使ってローカル（Mac）で構築します。

### 事前準備

1. IBM Cloudantのバックアップ・ファイルを作成、保存
[参考：IBM Cloudant バックアップの作成](https://cloud.ibm.com/docs/Cloudant?topic=Cloudant-creating-a-backup)
2. Podmanのインストールとセットアップ、VMの起動
[参考：Podman Desktop のインストール(for Mac)](https://qiita.com/LgmQue/items/a01367a49b973ee31a2f)
[参考：Podmanを始めたい](https://qiita.com/ymd65536/items/b224f3b59b16984c469b)


### 作業手順
STEP 1. CouchDBの環境構築
STEP 2. データベースの作成とリストア

:::note info
**IBM CloudantとCouchDB**
IBM Cloudant for IBM Cloudは、Apache CouchDBを基盤とするフルマネージドのクラウドDBサービスです。CloudantとCouchDBでは、共通のツール（[CouchBackup](https://www.npmjs.com/package/@cloudant/couchbackup)）を使用してバックアップの作成とリストアができます。
[参考：Apache CouchDB と IBM Cloudant の比較](https://cloud.ibm.com/docs/Cloudant?topic=Cloudant-couchdb-and-cloudant)
:::


# STEP 1. CouchDBの環境構築

[参考：Podmanを始めたい>コマンドを試してみる](https://qiita.com/ymd65536/items/b224f3b59b16984c469b#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B)
PodmanのVMの初回起動と初期化、再起動まで完了しました。

[参考：CouchDB Docker Official Image](https://hub.docker.com/_/couchdb/)
STEP 1 はCouchDBをコンテナで起動します。
dockerhubを参照し、コマンド名 "docker" を "podman" に置き換えて実行していきます。

### CouchDBのイメージを取得
~~~shell:terminal
podman pull couchdb
~~~

### CouchDBのインスタンスを起動
~~~shell:terminal
podman run \
       --detach \　
       --name my-couchdb \
       -e COUCHDB_USER=admin \
       -e COUCHDB_PASSWORD=password \
       --publish 5984:5984 \
       apache/couchdb:latest
~~~

--detach　コンテナをデタッチモードで起動
--name my-couchdb　コンテナ名
-e COUCHDB_USER=admin　管理者ユーザー（*必須）
-e COUCHDB_PASSWORD=password　パスワード（*必須）
--publish 5984:5984　ポートを外部公開する


### ステータス確認
`podman ps`コマンドで作成中および実行中のコンテナを一覧表示します。
コンテナ"my-couchdb"が実行中になったことを確認できました。
>CONTAINER ID  IMAGE                            COMMAND               CREATED        STATUS        PORTS                                                 NAMES
b333a38f5783  docker.io/apache/couchdb:latest  /opt/couchdb/bin/...  6 seconds ago  Up 6 seconds  0.0.0.0:5984->5984/tcp, 4369/tcp, 5984/tcp, 9100/tcp  my-couchdb



（参考）ブラウザからCouchDBのダッシュボードにアクセスできます。
http://localhost:5984/_utils

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555718/bffec3ab-4736-f6f5-39b2-012ad71b4f44.png">



# STEP 2. データベースの作成とリストア
[参考：IBM Cloudant バックアップの作成](https://cloud.ibm.com/docs/Cloudant?topic=Cloudant-creating-a-backup)
リストアのターゲットとなるデータベースを作成し、CouchBackupツールのコマンドでバックアップ・ファイルのリストアを実行します。

### CouchDB動作確認
ローカルのCouchDBインスタンスへの接続を確認します。
`curl localhost:5984`
>{"couchdb":"Welcome","version":"3.3.3","git_sha":"40afbcfc7","uuid":"5034b96da22199b1003e85590a541843","features":["access-ready","partitioned","pluggable-storage-engines","reshard","scheduler"],"vendor":{"name":"The Apache Software Foundation"}}


### （未インストールの場合）ローカルにCouchBackupをインストール
```shell:terminal
npm install -g @cloudant/couchbackup
```
Node.jsの導入が前提です。[参考：Node.jsの導入方法](https://qiita.com/YuukiYoshida/items/726a509438081e47a34e)

:::note info
[CouchBackup](https://www.npmjs.com/package/@cloudant/couchbackup) は IBM CloudantおよびCouchDBのデータベースをテキストファイルにバックアップし、リストアするためのツールです。
:::


### 空のデータベースを新規作成

```shell:terminal
curl "http://admin:password@localhost:5984/cloudant_backup" -X PUT
```


>{"ok":true}

データベース"cloudant_backup"が作成できたことを確認します。
`curl "http://admin:password@localhost:5984/_all_dbs"`
>["cloudant_backup"]

:::note warn
リストアの実行には、ターゲットのDBが完全に空である必要があります。
一度書き込みを行ったDBは、ドキュメントを完全に削除してもリストアのターゲットとして使用することはできません。
:::


### リストアコマンドを実行

```shell:terminal
cat cloudant_backup.txt | couchrestore --db cloudant_backup --url http://admin:password@localhost:5984
```
> couchbackup:restore:batch Restored batch ID: 0 Total document revisions restored: 443 Time: 0.163 +0ms
  couchbackup:restore finished { total: 443 } +0ms

`No such file or directory`の場合はバックアップ・ファイルの絶対パスを記述します。
コマンドにユーザー名とパスワードを含めないと認証エラーになる場合があります。


### リストアの完了を確認
データベースの詳細を取得して、データが追加されたことを確認しました。
`curl -X GET http://admin:password@localhost:5984/cloudant_backup`

ブラウザでもドキュメントの追加を確認できました。　http://localhost:5984/_utils
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555718/5cf58755-82f5-f79c-c2e3-a7c759e5be42.png)


# まとめ
IBM Cloudantのバックアップ・ファイルをCouchDBでリストアすることができました。
使い終わった環境はコンテナを停止するか、VMごと削除しましょう。

[参考：Podmanを始めたい > 片付け・環境を削除する](https://qiita.com/ymd65536/items/b224f3b59b16984c469b#%E7%89%87%E4%BB%98%E3%81%91)

# Index

* [IBM Cloudant 公式ドキュメント](https://cloud.ibm.com/docs/Cloudant)
* [Podman Desktop](https://podman-desktop.io/) / [Podman CLI](https://podman.io/)
* [CouchDB Documentation](https://docs.couchdb.org/en/stable/index.html)
* [CouchDB Docker Official Image](https://hub.docker.com/_/couchdb/)