Open abdonpijpelink opened 2 years ago
I really need this for java, is there already a working solution for connecting via Cloud ID (Username + Password)?
@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
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: