Connessione a un'applicazione esterna

Le applicazioni e i driver utilizzano le stringhe di connessione per stabilire una connessione a IBM Cloud® Databases for Elasticsearch. Ogni distribuzione ha stringhe di connessione specificamente per driver e applicazioni. Le stringhe di connessione sono visualizzate nel pannello Endpoints della pagina Overview dell'installazione client e possono essere recuperate anche dal cloud databases CLI plug-in e dalla API.

Le stringhe di connessione possono essere utilizzate da qualsiasi credenziale creata nella propria distribuzione. Mentre è possibile utilizzare l'utente admin per tutte le connessioni e le applicazioni, potrebbe essere meglio creare utenti specificatamente per le applicazioni a cui connettersi. Per ulteriori informazioni, vedere Attribuzione delle stringhe di connessione.

Connessione con un driver di linguaggio

Tutte le informazioni di cui un driver ha bisogno per connettersi all'installazione client sono contenute nella sezione "https" di una credenziale creata nella pagina Credenziali di servizio. La tabella contiene una ripartizione per riferimento.

informazioni sulla connessione https/URI
Nome campo Indice Descrizione
Type Tipo di connessione - per Elasticsearch, è "uri".
Scheme Schema per un URI - per Elasticsearch, è "https".
Path Percorso per un uri.
Authentication Username Il nome utente utilizzato per la connessione.
Authentication Password Una password per l'utente - potrebbe essere visualizzata come $PASSWORD.
Authentication Method Come avviene l'autenticazione; l'autenticazione "diretta" è gestita dal driver.
Hosts 0... Un nome di host e una porta a cui connettersi.
Composed 0... Un URI che combina Schema, Autenticazione, Host e Percorso.
Certificate Name Il nome assegnato per il certificato proprietario del servizio per la distribuzione del database.
Certificate Base 64 Una versione codificata base64 del certificato.
  • 0... indica che in un array potrebbero essere presenti una o più di queste voci.

Molti driver Elasticsearch sono in grado di effettuare una connessione alla propria distribuzione quando viene fornita la stringa di connessione formattata URI trovata nel campo "composto" delle informazioni di connessione. Vedi il seguente esempio:

https://admin:$PASSWORD@d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187.databases.appdomain.cloud:31821

Il seguente esempio utilizza Java per connettersi.

import io.searchbox.client.JestClientFactory;
import io.searchbox.client.JestResult;
import io.searchbox.client.config.HttpClientConfig;
import io.searchbox.client.JestClient;
import io.searchbox.cluster.Health;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.ssl.SSLContextBuilder;

import javax.net.ssl.SSLContext;
import java.io.File;
import java.security.*;
import java.security.cert.CertificateException;


import java.io.IOException;


public class ESConnect {

    public static void main(String[] args) {

        // Add CA cert to truststore using something like:
        //  keytool -import -alias mycert -file /path/to/cert -keystore ./mycert -storetype pkcs12 -storepass mysecret
        // and use the path of the keystore below
        File truststore = new File("/Users/code/java-example/icdcerts");

        try {
            // use your secret and add the variable containing the truststore that you created above with the secret as a CharArray
            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(truststore, "mysecret".toCharArray()).build();

            SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext);

            // set up a Jest factory
            JestClientFactory factory = new JestClientFactory();

            //configure and build Jest HTTP client with IBM Cloud Databases for Elasticsearch connection strings
            factory.setHttpClientConfig(
                    // add the Elasticsearch host and port
                    new HttpClientConfig.Builder("https://60d1b41b-2478-4767-9fc0-d99b1d00b6d1.bkvfu0nd0m8k95k94ujg.databases.appdomain.cloud:31347")
                            .multiThreaded(true)
                            // Add the credentials username and password
                            .defaultCredentials("admin", "mypassword")
                            .sslSocketFactory(sslSocketFactory)
                            .build());

            // create a JestClient
            JestClient client = factory.getObject();
            // create the call for the cluster health
            Health health = new Health.Builder().build();
            // get the cluster health as a JestResult
            JestResult result = client.execute(health);
            // print out the cluster's health
            System.out.printf("\n\n<------ CLUSTER HEALTH ------>\n%s\n\n", result.getJsonObject());
            // shutdown the connection
            client.close();

        } catch (IOException | KeyStoreException | NoSuchAlgorithmException | KeyManagementException | CertificateException e) {
            e.printStackTrace();
        }

    }

}

Il seguente esempio utilizza la libreria Python elasticsearch-py per connettersi.

from elasticsearch import Elasticsearch
from ssl import create_default_context


context = create_default_context(cafile="path/to/cert.pem")

es = Elasticsearch(
    ['60d1b41b-2478-4767-9fc0-d99b1d00b6d1.bkvfu0nd0m8k95k94ujg.databases.appdomain.cloud'],
    http_auth=('admin', 'password'),
    port='31347',
    ssl_context=context
)

health = es.cluster.health()
print(health)

Driver TLS e supporto per i certificati proprietari del servizio

Tutte le connessioni a Databases for Elasticsearch sono abilitate a TLS 1.2, quindi il driver che utilizzi per la connessione deve essere in grado di supportare la crittografia. L'installazione viene fornita anche con un certificato proprietario del servizio, in modo che il driver possa verificare il server al momento della connessione.

Per ulteriori informazioni, vedi Cloud Databases Certificates FAQ.

Utilizzo del certificato proprietario del servizio

  1. Copiare le informazioni del certificato dal pannello Endpoints o dal campo Base64 delle informazioni di connessione della credenziale di servizio.
  2. Se necessario, decodificare la stringa Base64 in testo.
  3. Salvare il certificato in un file. (è possibile utilizzare il Nome fornito o il proprio nome file).
  4. Fornire il percorso al certificato al conducente o al cliente.

Supporto del plug-in CLI per il certificato proprietario del servizio

È possibile visualizzare il certificato decodificato per la propria distribuzione con il plugin CLI con il comando ibmcloud cdb deployment-cacert "your-service-name". Decodifica il base64 in testo. Copiare e salvare l'output del comando in un file e fornire il percorso del file al guidatore.

Altri conducenti

Elasticsearch ha una vasta gamma di driver linguistici. La tabella comprende alcuni dei più comuni.

Driver Elasticsearch comuni
Lingua Unità Documentazione
Node elasticsearch-js Link
Ruby elasticsearch-ruby Link
Ruby on Rails elasticsearch - binari Link
Python elasticsearch-py Link
Java Jest Link
Vai elastic Link