Amazon Elasticsearch Service から別の OpenSearch クラスタへデータを移行する方法を解説します。本記事では、Scroll API と Bulk API を使用したシンプルかつ確実な移行手法を紹介します。
クラウドサービスの移行やコスト最適化のため、Elasticsearch/OpenSearch クラスタ間でデータを移行する必要が生じることがあります。今回は以下の環境間での移行を行いました。
- 移行元 : Amazon Elasticsearch Service (AWS)
- 移行先 : セルフホスト OpenSearch
移行の流れ#
- 移行元・移行先のインデックス確認
- マッピング情報の取得と調整
- 移行先にインデックスを作成
- Scroll API + Bulk API でデータ移行
- 移行結果の確認
事前準備:インデックスの確認#
まず、移行元と移行先のインデックス一覧を確認します。
Step 1: マッピング情報の取得#
移行元からマッピング情報を取得します。
Step 2: マッピングの調整#
移行先の環境によっては、カスタムアナライザーが利用できない場合があります。例えば、日本語形態素解析用の kuromoji プラグインがインストールされていない場合、アナライザー設定を除去する必要があります。
Step 3: 移行先にインデックスを作成#
調整したマッピングを使用してインデックスを作成します。
Step 4: データ移行スクリプト#
Scroll API を使用して移行元からデータを取得し、Bulk API で移行先に投入します。
Step 5: 移行の実行と確認#
注意点とベストプラクティス#
1. カスタムアナライザーの対応#
移行先に kuromoji などのプラグインがない場合、以下の選択肢があります。
- アナライザーなしで移行 : 日本語検索の精度は下がるが、データは保持される
- プラグインをインストール : 移行先に必要なプラグインを事前にインストール
- 代替アナライザーを使用 : standard アナライザーなどで代用
2. バッチサイズの調整#
3. 並列実行#
複数のインデックスを並列で移行することで、全体の移行時間を短縮できます。
4. エラーハンドリング#
Bulk API のレスポンスを確認し、エラーが発生したドキュメントを記録・リトライする仕組みを実装することを推奨します。
5. ドキュメント数の検証#
移行後、ソースと移行先のドキュメント数を比較して、データの整合性を確認します。
パフォーマンスの目安#
移行速度は環境やドキュメントサイズによって異なりますが、一般的に以下の程度が期待できます。
- 小〜中規模ドキュメント : 500〜1,000 docs/sec
- 大規模ドキュメント : 100〜500 docs/sec
- ネットワーク帯域 : クラスタ間の距離や帯域幅が速度に大きく影響
まとめ#
Scroll API と Bulk API を組み合わせることで、大規模なデータでも安定して移行できます。カスタムアナライザーの有無など、環境の差異に注意しながら移行を進めることが重要です。
参考リンク#