如何使用 python 連接到 AWS OpenSearch 或 Elasticsearch 集群
使用 Python 連接到在 AWS 中運行的 OpenSearch (ES) 服務非常痛苦。我在網路上找到的大多數範例要么不起作用,要么已經過時,讓我不斷修復相同的問題。為了節省時間和減少挫折感,這裡提供了截至 2024 年 12 月最新的工作程式碼片段集合。
- 使用 opensearch-py 函式庫 (OpenSearch ElasticSearch) 連線
-
使用elasticsearch庫連線(僅限ElasticSearch)
- elasticsearch >= 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,我們不支援此未知產品
彈性搜尋>= 8
大多數程式碼片段仍然引用 RequestsHttpConnection,該類別已在 elasticsearch 8.X 中刪除。如果您在Google上搜尋錯誤無法從“elasticsearch”匯入名稱“RequestsHttpConnection”,那麼您來對地方了!
安裝elasticsearch(這也應該安裝elastic-transport)和requests_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:
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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

Python3.6環境下加載pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

使用Scapy爬蟲時管道文件無法寫入的原因探討在學習和使用Scapy爬蟲進行數據持久化存儲時,可能會遇到管道文�...
