elastic / elasticsearch-java

Official Elasticsearch Java Client
Apache License 2.0
11 stars 243 forks source link

[DOCS] Provide guidance on connecting to an Elastic Cloud deployment with a Cloud ID #401

Open abdonpijpelink opened 2 years ago

abdonpijpelink commented 2 years ago

Description

The documentation for the Java client is missing guidance on connecting to an Elastic Cloud deployment. We should add this guidance, recommending to connect with a Cloud ID. Maybe also include some wording that connecting with a Cloud ID will automatically disable sniffing and enable compression.

Examples from other clients for inspiration:

navopw commented 2 years ago

I really need this for java, is there already a working solution for connecting via Cloud ID (Username + Password)?

Enomine88 commented 2 years ago

@abdonpijpelink yes we really need this. Actually i needed several weeks in summer 2022 to figure out how to connect to Elastic Cloud Trial. @navopw Here is wat works for me:

String username = "elastic";
        String password = "password";
        String host = "your-deployment-name.es.us-central1.gcp.cloud.es.io";
        int port = 9243;
        RestClient restClient;
        ElasticsearchClient client;
        /*
         * Zum Verbindungsaufbau zum Server von Elasticsearch stehen und die Logindaten als auch die Internetadresse und Port zur Verfügung. Das Ziel ist es zunächst ein Objekt vom Typ "RestClient"
         * und darauf aufbauend einen "ElasticsearchClient" zu erstellen. Letzterer stellt die zentrale Stelle zur Verwendung des EJAC dar. Wichtig bei der Angabe des Host ist es das Protokoll, etwa
         * "https://", wegzulassen. Dieses wird zu einem späteren Zeitpunkt festgelegt.
         */
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
        HttpClientConfigCallback httpClientConfigCallback = new HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                httpClientBuilder.disableAuthCaching();
                return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
            }
        };
        /*
         * Zunächst muss eine Möglichkeit geschaffen werden, sich am Server zu authentifizieren. Dies geschieht über den "CredentialsProvider", welcher den Benutzernamen und das Passwort verwaltet.
         * Diese Informationen werden dann im "HttpClientConfigCallback" abgelegt, welche bereits die erste, von Elastic bereitgestellte, Klasse ist, welche hier verwendet wird. Sie wird im weiteren
         * Verlauf vom RestClient verwendet.
         */
        RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(host, port, "https"));
        restClientBuilder.setHttpClientConfigCallback(httpClientConfigCallback);
        restClient = restClientBuilder.build();
        /*
         * EJAC verwendet an vielen Stellen das Builder-Pattern. Bei diesem wird ein Builder (eng. "builder" = "der Erbauer") zunächst mit den gewünschten Informationen gefüllt und erst danach das
         * Zielobjekt erstellt. Dies dient unter anderem der verbesserten Lesbarkeit des Codes beim Erstellen von Objekten. In diesem Fall entsteht ein RestClient, der die Informationen zum Host,
         * Port, Benutzername und Passwort und das zu nutzende Protokoll erhält. Wichtig ist es hier darauf zu achten "https" als Protokoll anzugeben und nicht etwa nur "http". Letzteres würde zu
         * einem Fehler beim Verbindungsaufbau führen. Der RestClient gehört zu Umfang von EJAC und bietet die Möglichkeit Query DSL Anfragen, wie in Kapitel xyz erklärt, an den Server zu senden. Der
         * RestClient wurde bis zur Elasticsearch Version 7 auch "Java Low level REST Client" genannt.
         */
        ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
        client = new ElasticsearchClient(transport);
        /*
         * Der ElasticsearchClient ist der komfortable Weg zur Kommunikation zwischen einem Java Programm und dem Elasticsearch Server. Er setzt auf dem RestClient auf und vereinfacht das Versenden
         * der Anfragen und das Weiterverarbeiten der Antworten. Bis zur Elasticsearch Version 7 wurde dieser auch "Java High Level REST Client" genannt.
         */
        // Hier Programmlogik einfügen PUT PROGRAM LOGIC HERE
        restClient.close();
        /*

Thanks - Enomine