elasticsearch-java icon indicating copy to clipboard operation
elasticsearch-java copied to clipboard

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

Open abdonpijpelink opened this issue 2 years ago • 2 comments

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:

abdonpijpelink avatar Sep 20 '22 11:09 abdonpijpelink

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

navopw avatar Oct 02 '22 20:10 navopw

@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

Enomine88 avatar Oct 23 '22 03:10 Enomine88