ElasticsearchクライアントをOpenSearch®に移行する

<font color="Grey">*[Migrate your Elasticsearch client to OpenSearch®](https://aiven.io/blog/migrate-elasticsearch-client-to-opensearch)の翻訳です。*</font>

2022年3月1日

# ElasticsearchクライアントをOpenSearch®に移行する

オープンソースを維持するためにESを離れるのか？データ移行は計画済みですか？Python、Java、Node.jsでElasticsearchクライアントをOpenSearch®に移行する方法をご紹介します。


> ![](/build/_assets/shape-quote-WGSAHX4E.svg)
> 2022-08-23にAivenはElasticsearchからの移行を完了し、Aivenサービス間の移行は必要なくなります。詳しくは[Aiven finishes the transition from Elasticsearch: technical details](https://aiven.io/blog/finish-move-away-from-elasticsearch)をご参照ください。
>
>
>


## Elasticsearch クライアントを OpenSearch® に移行する方法


私たちは Elasticsearch をオープンソースフォークプロジェクトである OpenSearch に置き換えています。この記事では、アプリケーションのクライアントコードをアップグレードする方法を紹介します。


データベースの移行について考えるとき、通常はデータそのものの移行を考えます。しかし、クライアントの移行、特にどのバージョンを使用しているかについても考慮しなければなりません。


ElasticsearchからOpenSearchへの移行については関連記事をご覧ください：


* Aiven 内で移行する場合、[Elasticsearch クライアントを OpenSearch にアップグレードする](https://developer.aiven.io/docs/products/opensearch/howto/upgrade-clients-to-opensearch.html)
* [OpenSearch クラスタでの一般的な作業方法](https://developer.aiven.io/docs/products/opensearch/howto.html)
* 外部データベースをAivenに移行する場合、[ElasticsearchのデータをAiven for OpenSearchに移行する](https://developer.aiven.io/docs/products/opensearch/howto/migrating_elasticsearch_data_to_aiven.html)


この記事では、データベースの移行プロセスとクライアントの移行方法について簡単に説明します。


### Elasticsearch から OpenSearch へのデータベース移行


データベースの移行に関しては、Aivenのクライアントがダウンタイムなしでアップグレードを実行できます。移行に必要な手順は全て[Aiven's devportal](https://developer.aiven.io/docs/products/opensearch/howto/migrating_elasticsearch_data_to_aiven)に記載されています。Elasticsearch から OpenSearch にアップグレードすると、Kibana も OpenSearch ダッシュボードにアップグレードされることに注意してください。すでに Aiven を使用している場合は、3月23日にアップグレードの終了が予定されているため、早急にアップグレードを行うことをお勧めします。この日以降、AivenのElasticsearch関連のサービスは自動的にOpenSearchにアップグレードされます。


### Elasticsearch から OpenSearch へのクライアント移行について


Elasticsearch のネイティブクライアントを OpenSearch に移行するには、クラスタとのやり取りを継続できるようにクライアントコードを変更する必要があります。どのように行うのか気になりませんか？ここでは3つの言語でクライアントの移行について説明します：Python, Java, JavaScript (Node.js) です。


コードに飛び込む前に、1つ覚えておいてほしいことがある。[OpenSearch docs](https://opensearch.org/docs/latest/clients/index/#legacy-clients) によると、v7.10.2 用の Elasticsearch クライアントは OpenSearch クライアント v1 との互換性という点では動作するはずです。しかし、Elasticsearch クライアントの最新バージョンには互換性を壊すチェックが含まれている可能性があります。以下は、OpenSearch v1.0.0 に移行する際に推奨される Elasticsearch クライアントのバージョンです。




| クライアント｜推奨バージョン
| --- | --- |
[| Java 低レベル REST クライアント](https://search.maven.org/artifact/org.elasticsearch.client/elasticsearch-rest-client/7.13.4/jar) | 7.13.4 |
| [Java 高レベル REST クライアント](https://search.maven.org/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client/7.13.4/jar) | 7.13.4 | | [Python
| [Python](https://pypi.org/project/elasticsearch/7.13.4/)[ | 7.13.4 | | NodeJS](https://pypi.org/project/elasticsearch/7.13.4/)
| [NodeJS](https://www.npmjs.com/package/@elastic/elasticsearch/v/7.13.0) | 7.13.0 | [NodeJS](https://www.npmjs.com/package/@elastic/elasticsearch/v/7.13.0) | 7.13.0


[OpenSearchのページ](https://opensearch.org/docs/latest/clients/index/#legacy-clients)で全表を確認してください。


ご覧のように、まず、Elasticsearchをv7.13.4またはv7.13.0にアップグレードまたはダウングレードし、正常に動作していることを確認してから、互換性のあるOpenSearchのバージョンv1.0.0に移行することをお勧めします。最後に、追加機能とバグフィックスを含む最新の OpenSearch バージョンにアップグレードすることができます。こうすることで、クライアントの移行プロセス中に現れるかもしれない API の非互換性を修正することができます。


それでは、これらの変更がコード的にどのように行われるのか確認してみましょう。


### パイソン


Pythonist にとって、Python クライアントに必要な変更は、使用するライブラリと、Python クライアントオブジェクトの呼び出し方です。ここでは[Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/index.html)と[OpenSearch](https://opensearch.org/docs/latest/clients/python/)の公式Pythonクライアントライブラリについて考えています。


いくつかのステップで、Elasticsearch クライアントを OpenSearch クライアントに置き換えることができます。


依存関係で、ライブラリとバージョンを変更してください：



```
elasticsearch==7.10.2
+ opensearch-py==1.0.0` クリップボードにコピーする
```

ソースコードの import を変更する：



```
from elasticsearch import Elasticsearch
+ from opensearchpy import OpenSearch`クリップボードにコピーする
```

とクライアントにコピーします：



```
client_againstst_opensearch = Elasticsearch(ES_SERVICE_URI, use_ssl=True)
+ client_againstst_opensearch = OpenSearch(OS_SERVICE_URI, use_ssl=True)`Copy to clipboard
```

良いニュースは、OpenSearchクライアントでElasticsearchと同じAPIを再利用できることだ。[OpenSearchマイグレーションリポジトリ](https://github.com/aiven/opensearch-migration-examples/tree/main/python-client-migration)にある完全な例を見てみてください。


Python OpenSearch クライアントとその互換性についてもっと知りたい場合は、これらのリソースを参照してください：


* [互換性](https://opensearch.org/docs/latest/clients/index/)
* [Python クライアント](https://opensearch.org/docs/latest/clients/python)
* [Python, OpenSearch 移行の例](https://github.com/aiven/opensearch-migration-examples/tree/main/python-client-migration)


### Java


Javaクライアント・ユーザーに朗報です。OpenSearchに移行する際に必要な変更は最小限です。新しい依存関係をインストールして、インポートを変更するだけです。ここでは、インポートに関連する変更点を見つけることができます：



```
org.elasticsearch.client:elasticsearch-rest-client:7.10.2' を実装した。
- 実装 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.10.2'.
+ implementation 'org.opensearch.client:opensearch-rest-client:1.1.0'.
+ implementation 'org.opensearch.client:opensearch-rest-high-level-client:1.1.0'`Copy to clipboard
```

Javaクライアントでは、変更は以下のようになります：



```
private static final String CLIENT_LIBRARY = "org.elasticsearch.client:elasticsearch-rest-client:7.10.2"；
+ private static final String CLIENT_LIBRARY = "org.opensearch.client:opensearch-rest-client:1.1.0";`Copy to clipboard
```

インポートを変更することで、Elasticsearch と同じ API で OpenSearch クライアントを使えるようになります。


OpenSearch Java クライアントの詳細については、OpenSearch クライアントの完全なマイグレーション例を含め、以下のリンクを参照してください：


* [互換性](https://opensearch.org/docs/latest/clients/index/)
* [Java ハイレベルクライアント](https://opensearch.org/docs/latest/clients/java-rest-high-level/)
* [Java, OpenSearch 移行の例](https://github.com/aiven/opensearch-migration-examples/tree/main/java-client-migration)


### JavaScript (Node.js/NodeJS)


新しい依存関係をインストールして、`require`ステートメントを変更するだけです。


依存関係は以下のようにnpmでインストールできる：



```
$ npm install --save @opensearch-project/opensearch`クリップボードにコピーする
```

このサンプルでは、NodeJSクライアントのクライアントを変更しています：



```
const { クライアント｝= require('@elastic/elasticsearch')；
+ クライアント= require('@opensearch-project/opensearch');`Copy to clipboard
```

インポートが正しく設定されれば、APIを再利用できるはずです。


NodeJSクライアントによるOpenSearchのマイグレーションについては、他のリソースを参照してください：


* [互換性](https://opensearch.org/docs/latest/clients/index/)
* [NodeJS クライアント](https://opensearch.org/docs/latest/clients/javascript/)
* [NodeJS, OpenSearchのマイグレーション例](https://github.com/aiven/opensearch-migration-examples/tree/main/node-client-migration)


### 次のステップ


最近の Elasticsearch ポリシーの変更に伴い、多くのユーザが OpenSource のような代替に移行する方法を探しています。Elasticsearch v7 の直接フォークである OpenSearch は Elasticsearch と非常に互換性があります。Aivenは[Aivenコンソール](https://developer.aiven.io/docs/products/opensearch/howto/upgrade-to-opensearch.html#upgrade-from-elasticsearch-to-opensearch)からボタンをクリックするだけで簡単にアップグレードを実行する方法を提供しています。これは簡単なように見えるかもしれませんが、使用するライブラリとAPIに関するクライアントの変更を伴います。この記事では、データの移行を成功させるために必要なプロセスを説明します。


オープンソースであるため、OpenSearchプロジェクトは、新しい機能を追加したり、保守を手伝ったりすることで、誰もがそれに貢献することを歓迎している。私たちはオープンソースがすべての人のためのものであることを知っていますが、Aivenではそのようなプロジェクトに貢献する責任を負っています。Aivenは[Open Source Program Office](https://aiven.io/open-source)を通じてOpenSearchプロジェクトに積極的に貢献しています。


この記事の例は[OpenSearch migration examples](https://github.com/aiven/opensearch-migration-examples)のOSSプロジェクトの一部です。ご自由にフォークを作成し、お好きな言語でより多くの例を追加してください。OpenSearch と Elasticsearch のコミュニティと知識を共有する良い方法です。


*ElasticsearchはElasticsearch B.V.の商標です。