Hello,
I want to connect using the python client but I can't figure out what's wrong.
from elasticsearch import Elasticsearch
endpoint = 'https://foo.gcp.cloud.es.io:443/search-addresses/_doc?pipeline=ent-search-generic-ingestion'
api_key = "bar"
api_id = "1568085128"
es_client = Elasticsearch(
endpoint,
api_key=(api_id, api_key),
)
print(es_client.info())
es_client.info()
What's the issue? I literally don't understand it. I use the endpoint given to me, I use the api key given to me, I use the python client given to me - why would I get an HTTP request error?
stephenb
(Stephen Brown)
December 9, 2022, 9:27pm
2
Because that is not the base endpoint.
That's an endpoint to actually ingest document and call an ingest pipeline not to just initiate a client connection.
The endpoint is just
https://foo.gcp.cloud.es.io:443
Perhaps try that... and make sure you get the correct endpoint as there is an es. and kb. for elasticsearch and kibana respectively
https://mydeployment.es.us-west1.gcp.cloud.es.io
.....................^^
Note: I do think it is important to put the port :443 on the end because some of the clients if a port is not specified it will add :9200 which is the default elasticsearch port ... but not for Elastic Cloud because of HTTPs
And you can always get the endpoint from the cloud console
Thanks, I don't think I've ever seen what you show in the screenshot though. I'll give it another try.
stephenb
(Stephen Brown)
December 10, 2022, 8:29pm
4
That's from the elastic cloud console where you set up your elastic cloud account and the elastic cloud deployments.
Long story short, it's just a base URL plus 443 that reste of That stuff is actually part of a different API call
Ok so I tried it and I simply can't get it working. I'm so buffled that there isn't simply a straight forward explanation.
Are my parameters for the Elastrichsearch() correct?
I use the gcp.cloud.es.io:443 endpoint, correct?
I Create a new API key. The value is the actualy key but what is the id? I tried both, the name and the user.
I still get 401. I really really don't understand the issue. Why can't I simply connect by API key like you'd do it when using curl?
stephenb
(Stephen Brown)
December 11, 2022, 4:07pm
6
Take a look at this ...
I just did this
from elasticsearch import Elasticsearch
# you can use RFC-1738 to specify the url
# ... or specify common parameters as kwargs
es = Elasticsearch(
cloud_id="mycluster:sdfgsdfgdsfgdsfglvdsfgsdfgdsfgmNiM2JkNzRjNDY3JGIxZTUyOWEwNTBkNjRkODZhMzIxZTBhMjU3YjRlODhh",
http_auth=("elastic", "dsfgsdfgsdfgg"),
)
output = es.info(),
print(output, end=" ")
and it worked fine...
This also worked fine...
es = Elasticsearch(
cloud_id="mycluster:sdfgsdfgdsfgdsfgsdfgsdfgsdfgsdfg…
OK I just tested this and all works as expected.
POST /_security/api_key
{
"name": "my-discuss-api-key",
"expiration": "1d",
"role_descriptors": {
"role-a": {
"cluster": ["all"]
}
}
}
# Result
{
"id": "sadfasdfGGJCaJCcrUTy",
"name": "my-discuss-api-key",
"expiration": 1670861752818,
"api_key": "asfdasdf9YOve4r3g",
"encoded": "cXlINEFZVUJHR0pDYUpDY3JVVHk6Q3JEeTNfbC1SdHVEMzlZT3ZlNHIzZw=="
}
Both Options Work
from elasticsearch import Elasticsearch
es = Elasticsearch(
"https://my-demo-cluster.es.us-west1.gcp.cloud.es.io:443",
api_key=("sadfasdfGGJCaJCcrUTy", "asfdasdf9YOve4r3g"),
)
# es = Elasticsearch(
# cloud_id="my-demo-cluster:asdfsadfasdfkLmVzLmlvJDA1M2Y1MWYwMDViOTRjNDA4NGMzNmNiM2JkNzRjNDY3JGIxZTUyOWEwNTBkNjRkODZhMzIxZTBhMjU3YjRlODhh",
# api_key=("sadfasdfGGJCaJCcrUTy", "asfdasdf9YOve4r3g"),
# )
output = es.info(),
print(output, end=" ")
(ObjectApiResponse({'name': 'instance-0000000095', 'cluster_name': 'sadfsadf4c4084c36cb3bd74c467', 'cluster_uuid': 'sadfsadfa-k2eXlBQ', 'version': {'number': '8.5.3', 'build_flavor': 'default', 'build_type': 'docker', 'build_hash': '4ed5ee9afac63de92ec98f404ccbed7d3ba9584e', 'build_date': '2022-12-05T18:22:22.226119656Z', 'build_snapshot': False, 'lucene_version': '9.4.2', 'minimum_wire_compatibility_version': '7.17.0', 'minimum_index_compatibility_version': '7.0.0'}, 'tagline': 'You Know, for Search'}),)
Exactly what error are you getting. when you state it is not working you have to show the exact code and the error messages otherwise we are just guessing.