I have an Elasticsearch instance, hosted on AWS. I can connect from my terminal with Curl. I am now trying to use the python elasticsearch wrapper. I have:
from
host = 'ec2-xx-xx-xxx-xxx.us-west-2.compute.amazonaws.com' #without 'https'
YOUR_ACCESS_KEY = ''
YOUR_SECRET_KEY = ''
REGION = 'us-west-2' #change to your region
awsauth = AWS4Auth(YOUR_ACCESS_KEY, YOUR_SECRET_KEY, REGION, 'es')
es = Elasticsearch(
hosts=[{'host': host, 'port': 443}],
http_auth=awsauth,
use_ssl=True,
verify_certs=True,
connection_class=RequestsHttpConnection
)
print(es.info())
This is the correct way to connect to elasticsearch server using python:
es = Elasticsearch(['IP:PORT',])
Elasticsearch's constructor doesn't have the host
nor the port
parameters. The first parameter should be a list, where each item in the list can be either a string representing the host:
'schema://ip:port'
Or a dictionary with extended parameters regarding that host
{'host': 'ip/hostname', 'port': 443, 'url_prefix': 'es', 'use_ssl': True}
In your case you probably would like to use:
client = Elasticsearch(['https://ec2-xx-xx-xxx-xxx.us-west-2.compute.amazonaws.com:9200'])
The port is redundant since you are using the deafult one, so you can use remove it
client = Elasticsearch(['https://ec2-xx-xx-xxx-xxx.us-west-2.compute.amazonaws.com'])