java.net.ConnectException: Connection Refused


(anna) #1

I am using the Java HighLevelRestClient to connect to my elastic instance hosted on AWS. I can make requests against the URL on postman and from my browser just fine, but when I use the client library I get a java.net.ConnectException: Connection Refused. (I don't currently need any authentication as this is a small public test instance).

Edit: I have set up the ElasticSearch [6.2] instance on the AWS console and am making requests against the domain that is created. I don't see any ports that are configured for my domain.

This is my code:

RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);

        GetRequest getRequest = new GetRequest("some_index", "some_type","some_id");
        final String[] elasticGetResponse = new String[1];

        restHighLevelClient.getAsync(getRequest, new ActionListener<GetResponse>() {

            @Override
            public void onResponse(GetResponse documentFields) {
                try {
                    elasticGetResponse[0] = restHighLevelClient.get(getRequest).toString();
                }

                catch (IOException e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onFailure(Exception e) {
                e.printStackTrace();
            }
        });

I'm not sure what I'm doing incorrectly. All help is appreciated!

Update: I built the restClientBuilder with the following


        MySSLHelper sslHelper = new MySSLHelper(SSLConfig.builder()
                .withKeyStoreProvider(myKeyStoreProvider)
                .withTrustStoreProvider(InternalTrustStoreProvider.INSTANCE)
                .build());

        RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost("MY_ELASTICSEARCH_ENDPOINT")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
                return httpAsyncClientBuilder.setSSLContext(sslHelper.getContext());
            }
        });

(David Pilato) #2

How did you create the restClientBuilder object?


(anna) #3

updated the original post with the code.


(David Pilato) #4

You said there is no auth.

Are you using https here?


(anna) #5

I'm not sure about this, I don't think so. My access policy is the public template.


(anna) #6

Hey David, on the latest version [6.2] do I need to host the elasticsearch instance locally and use the AWS CLI to access and deploy it? Currently I have only set up the instance via the AWS Console and am trying to hit endpoints at the endpoint provided.


(David Pilato) #7

Are you running Elasticsearch as as service by AWS by any chance?

Can you just curl the instance and if so on which address?


(anna) #8

Yes I am. I can curl the instance but I want to programmatically access and populate the instance using the Java Client.

I will send you a direct message with the URL.


(David Pilato) #9

Few comments:

1st: never ever expose elasticsearch on internet without any security like X-Pack.
2nd: I can't help because I don't know their service so you should ask your AWS support
3rd: Did you look at https://www.elastic.co/cloud and https://aws.amazon.com/marketplace/pp/B01N6YCISK ?

Cloud by elastic is the only way to have access to X-Pack. Think about what is there yet like Security, Monitoring, Reporting and what is coming like Canvas, SQL...

It also runs on AWS or GCP. And 6.3.0 is already available there!

I can totally help on cloud.elastic.co service although you have a support team for you as well.