Opensearchデータのエクスポートとインポート

Posted on 2024/02/02

ToC

Opensearchのエクスポートとインポート

OpenSearchは、リアルタイムのアプリケーションモニタリングやログ分析に利用できる検索および分析のソフトウエアです。 ベクトル検索を行うためのデータベースとして利用しています。
ベクトル化したデータのバックアップのためエクスポートとインポートが簡単にできる方法が処理がないかと探していたところ、 elaseticdumpというツールが非常に便利だったので備忘も兼ねて記事にしました。

環境構築

Opensearchのサーバー環境

今回利用するOpensearchは、ローカル環境のDocker上に構築しています。 なお、OpensearchOpensearch Dashboardのバージョン2.6.0のイメージを取得しました。 docker-compose等で簡単に起動可能です。
ローカルで検証する場合でもコンテナイメージは、httpsでの通信がデフォルトでした。 セキュリティ強度を下げる必要もないので、そのまま使っています。
なお、サーバーの構築は、記事を参考にしました。

クライアントにelasticdumpをセットアップ

elasiticdumpの利用環境には、nodeの導入が必要なため、事前にインストールしておきます。 その後、npm install elasticdump -gでグローバルにインストールできます。非常に簡単です。

$ npm install elasticdump -g
$ elasticdump --version
6.110.0

データエクスポートとインポート

準備が整ったところで、構築済みのインデックスのデータとマッピングのエクスポートとインポートを試してみます。 コードを記載しておくことが最も早いと思いますので、コードを記載します。

# データエクスポート
NODE_TLS_REJECT_UNAUTHORIZED=0 \
elasticdump \
  --input=https://[username]:[password]@localhost:9200/my-index \
  --output=/workspace/my-index-data.json \
  --type=data

# マッピングエクスポート
NODE_TLS_REJECT_UNAUTHORIZED=0 \
elasticdump \
  --input=https://[username]:[password]@localhost:9200/my-index \
  --output=/workspace/my-index-mapping.json \
  --type=mapping

# マッピングインポート
NODE_TLS_REJECT_UNAUTHORIZED=0 \
elasticdump \
  --input=/workspace/my-index-mapping.json \
  --output=https://[username]:[password]@localhost:9200/my-index2 \
  --type=mapping

# データインポート
NODE_TLS_REJECT_UNAUTHORIZED=0 \
elasticdump \
  --input=/workspace/my-index-data.json \
  --output=https://[username]:[password]@localhost:9200/my-index2 \
  --type=data

ポイントは、NODE_TLS_REJECT_UNAUTHORIZEDを指定するところです。
今回はローカル環境でしたので緩やかな対応になっていますが、ユーザー名パスワード がURLに直書きになっている点は注意が必要ですね。

より詳しい情報は、elasticdumpのGithubを参照してください。


参照