ホームページ >バックエンド開発 >Python チュートリアル >Python を使用して AWS OpenSearch または Elasticsearch クラスターに接続する方法

Python を使用して AWS OpenSearch または Elasticsearch クラスターに接続する方法

DDD
DDDオリジナル
2024-12-20 20:49:13486ブラウズ

How to connect to AWS OpenSearch or Elasticsearch clusters using python

Python を使用して AWS で実行されている OpenSearch (ES) サービスに接続するのは面倒です。オンラインで見つけたサンプルのほとんどは機能しないか古いため、常に同じ問題を修正することになります。時間とストレスを軽減するために、2024 年 12 月時点で最新の実用的なコード スニペットのコレクションをここに示します。

  • opensearch-py ライブラリ (OpenSearch ElasticSearch) を使用して接続します
  • elasticsearch ライブラリを使用して接続する (ElasticSearch のみ)
    • エラスティックサーチ >= 8
    • エラスティックサーチ< 8

opensearch-py ライブラリ (OpenSearch ElasticSearch) を使用して接続する

これは、AWS によって管理される ES インスタンスに接続するための私の推奨の方法です。 ElasticSearch クラスターと OpenSearch クラスターの両方で機能し、認証には AWS プロファイルを利用できます。

opensearch-py と boto3 をインストールします (認証用):

pip install opensearch-py boto3

この記事の執筆時点では、これにより opensearch-py==2.8.0 と boto3==1.35.81 がインストールされます。

これで、次を使用してクライアントを作成できます:

import boto3

from opensearchpy import (
    AWSV4SignerAuth,
    OpenSearch,
    RequestsHttpConnection,
)

es_host = "search-my-aws-esdomain-5k2baneoyj4vywjseocultv2au.eu-central-1.es.amazonaws.com"
aws_access_key = "AKIAXCUEGTAF3CV7GYKA"
aws_secret_key = "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"
region = "eu-central-1"

# Note: you can also use boto3.Session(profile_name="my-profile") or other ways
session = boto3.Session(
    aws_access_key_id=aws_access_key,
    aws_secret_access_key=aws_secret_key,
    region_name=region,
)

client = OpenSearch(
    hosts=[{"host": es_host, "port": 443}],
    http_auth=AWSV4SignerAuth(session.get_credentials(), region, "es"),
    connection_class=RequestsHttpConnection,
    use_ssl=True,
)

boto3.Session は、プロファイルや環境変数の使用など、セッションを作成するさまざまな方法をサポートしていることに注意してください。チェックさせていただきます!

入手したら、以下を使用して接続を確認します。

client.ping() # should return True
client.info() # use this to get a proper error message if ping fails

インデックスを確認するには:

# List all indices
client.cat.indices()
client.indices.get("*")

# Check the existence of an indice
client.indices.exists("my-index")

elasticsearch ライブラリを使用して接続する (ElasticSearch のみ)

?これはElasticSearch クラスターでのみ機能します! OpenSearch クラスターに接続すると、

が発生します

UnsupportedProductError: クライアントは、サーバーが Elasticsearch ではないことに気づきました。この不明な製品はサポートされていません

elasticsearch >= 8

ほとんどのスニペットは、elasticsearch 8.X で削除されたクラスである RequestsHttpConnection を依然として参照しています。 「elasticsearch」から「RequestsHttpConnection」という名前をインポートできないというエラーを検索していた場合は、正しい場所にいます。

elasticsearch (これにより elastic-transport もインストールされるはずです) と request_aws4auth をインストールします。後者は、リクエストに基づいて、AWS への認証を処理するために必要です:

pip install elasticsearch requests-aws4auth

この記事の執筆時点では、これにより elastic-transport==8.15.1、elasticsearch==8.17.0、およびrequests-aws4auth==1.3.1がインストールされます。

これで、次を使用してクライアントを作成できます:

from elastic_transport import RequestsHttpNode
from elasticsearch import Elasticsearch
from requests_aws4auth import AWS4Auth

es_endpoint = "search-my-aws-esdomain-5k2baneoyj4vywjseocultv2au.eu-central-1.es.amazonaws.com"
aws_access_key = "AKIAXCUEGTAF3CV7GYKA"
aws_secret_key = "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"
region = "eu-central-1"

es = Elasticsearch(
    f"https://{es_host}",
    http_auth=AWS4Auth(
        aws_access_key, 
        aws_secret_key, 
        region,
        "es",
    ),
    verify_certs=True,
    node_class=RequestsHttpNode,
)

入手したら、以下を使用して接続を確認します。

es.ping() # should return True
es.info() # use this to get a proper error message if ping fails

elasticsearch

まだ古いバージョンの elasticsearch を使用している場合:

pip install "elasticsearch<8" requests-aws4auth

現在 elasticsearch==7.17.12、requests-aws4auth==1.3.1.

これで、次を使用してクライアントを作成できます:

pip install opensearch-py boto3

接続を確認してください:

import boto3

from opensearchpy import (
    AWSV4SignerAuth,
    OpenSearch,
    RequestsHttpConnection,
)

es_host = "search-my-aws-esdomain-5k2baneoyj4vywjseocultv2au.eu-central-1.es.amazonaws.com"
aws_access_key = "AKIAXCUEGTAF3CV7GYKA"
aws_secret_key = "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"
region = "eu-central-1"

# Note: you can also use boto3.Session(profile_name="my-profile") or other ways
session = boto3.Session(
    aws_access_key_id=aws_access_key,
    aws_secret_access_key=aws_secret_key,
    region_name=region,
)

client = OpenSearch(
    hosts=[{"host": es_host, "port": 443}],
    http_auth=AWSV4SignerAuth(session.get_credentials(), region, "es"),
    connection_class=RequestsHttpConnection,
    use_ssl=True,
)

以上がPython を使用して AWS OpenSearch または Elasticsearch クラスターに接続する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。