工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

OpenSearchでREST APIを使ってCSVファイルのデータを書き込むまでのメモ

概要

ローカルPC上のOpenSearchREST APIでアクセスしてCSVファイルのデータを書き込んだ。



背景と目的

以前、ローカルPC上nにOpenSearchを立ち上げた。ちょっとした動作確認のため、使っていこうとしたがちょうどいいデータがないので、手元にあるCSVファイルのデータを挿入したくなった。そこで、REST APIを使って挿入する。



詳細

0. 実施環境


1. opensearch-pyをインストール

まず、以下に従い、

opensearch.org

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を手元にダウンロード

早速、上のコードを自分の環境に合わせて修正して実行したところ、動かず。どうやら、インデクス作成のところで接続できずという症状だったので、調べたところ、

opensearch.org

にあるように、認証周りの設定が不足しているようで、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はうまく使えばとても役に立ちそうだ

ということが、体感できたのはよかった。



まとめと今後の課題

OpenSearchREST APIを使ってCSVファイルのデータを書き込むことがChatGPTの助けを借りながらできた。