概要
ローカルPC上のOpenSearchにREST APIでアクセスしてCSVファイルのデータを書き込んだ。
背景と目的
以前、ローカルPC上nにOpenSearchを立ち上げた。ちょっとした動作確認のため、使っていこうとしたがちょうどいいデータがないので、手元にあるCSVファイルのデータを挿入したくなった。そこで、REST APIを使って挿入する。
詳細
0. 実施環境
- Windows 10
- MacBookPro15
- WSL2でDockerコンテナとしてOpenSearchを稼働
- OpenSearch v2.6.0
- Pythonでコーディング
1. opensearch-pyをインストール
まず、以下に従い、
opensearch-pyをインストールした。
pip install
2. サンプルコードを探す
コードは、ドキュメントを参考にして自分で書いてもいいが、最近、Chat GPTがサンプルコード生成に使えると聞くので、試しにコードを教えてもらった。
質問文は、
opensearch-pyで、CSVファイルをOpenSearchに挿入するサンプルコード
生成されたコードは、以下。
from opensearchpy import OpenSearch, helpers import csv # OpenSearchクライアントを作成します client = OpenSearch( hosts=["https://your-opensearch-endpoint.com"], http_auth=("user", "password") ) # インデックスの定義を作成します index_definition = { "mappings": { "properties": { "name": {"type": "text"}, "age": {"type": "integer"}, "gender": {"type": "text"} } } } # インデックスを作成します client.indices.create(index="people", body=index_definition) # CSVファイルからデータを読み込みます with open('people.csv', 'r') as f: reader = csv.DictReader(f) # OpenSearchにデータを挿入するためのリストを作成します data = [ { "_index": "people", "name": row['name'], "age": row['age'], "gender": row['gender'] } for row in reader ] # OpenSearchにデータをバルク挿入します helpers.bulk(client, data)
3. root-ca.pemを手元にダウンロード
早速、上のコードを自分の環境に合わせて修正して実行したところ、動かず。どうやら、インデクス作成のところで接続できずという症状だったので、調べたところ、
にあるように、認証周りの設定が不足しているようで、DockerでインストールしたOpenSearchのセキュリティ周りの設定は一切いじっていない状態からREST APIを使うには、
OpenSearchのノードのファイルシステムから、/usr/share/opensearch/configにあるroot-ca.pemを手元にダウンロード
して、APIを叩く際に指定する必要があるとわかった。具体的には、
client = OpenSearch( hosts=[{'host': "localhost", 'port': 9200}], http_auth=("user", "password"), use_ssl = True, verify_certs = True, ssl_assert_hostname = False, ssl_show_warn = False, ca_certs = "root-ca.pem" )
という感じで、上記参考リンクの例(To connect to the default OpenSearch host, create a client object with SSL enabled if you are using the Security plugin. You can use the default credentials for testing purposes:)の通りである。
4. 動作確認
ダッシュボードで、インデクスが作成されたこと、データが挿入されたことが確認できた。成功。
5. 余談
というわけで、Chat GPTのサンプルコードそのままでは動かなかったわけではあるが、そこそこゴールに近いところまでは行けていた。本題からはズレる話だが、
Chat GPTはうまく使えばとても役に立ちそうだ
ということが、体感できたのはよかった。
まとめと今後の課題
OpenSearchでREST APIを使ってCSVファイルのデータを書き込むことがChatGPTの助けを借りながらできた。