Connexion d'une application externe

Vos applications et pilotes utilisent des chaînes de connexion pour établir une connexion à IBM Cloud® Databases for Elasticsearch. Chaque déploiement contient des chaînes de connexion spécifiques pour des pilotes et des applications. Les chaînes de connexion sont affichées dans le panneau Endpoints de la page Overview de votre déploiement et peuvent également être récupérées à partir du plug-in CLI des bases de données en nuage et de l'API.

Les chaînes de connexion peuvent être utilisées par n'importe laquelle des informations d'identification que vous créez dans votre déploiement. Bien que vous puissiez utiliser le nom d'administrateur pour toutes vos connexions et applications, il peut être préférable de créer des utilisateurs à utiliser spécifiquement pour vos applications. Pour plus d'informations, voir L'obtention des chaînes de connexion.

Connexion avec un pilote de langage

Toutes les informations dont un pilote a besoin pour se connecter à votre déploiement se trouvent dans la section "https" d'un justificatif d'identité créé sur la page Certificats d'identité du service. Le tableau ci-après est fourni à titre de référence.

informations sur la connexion https/URI
Nom de zone Index Description
Type Type de connexion - pour Elasticsearch, il s'agit de "uri".
Scheme Schéma d'un URI - pour Elasticsearch, il s'agit de "https".
Path Chemin d'accès pour un uri.
Authentication Username Nom d'utilisateur que vous utilisez pour vous connecter.
Authentication Password Le mot de passe de l'utilisateur - peut être affiché sous la forme $PASSWORD.
Authentication Method Méthode d'authentification. L'authentification "directe" est gérée par le pilote.
Hosts 0... Nom d'hôte et port auxquels se connecter.
Composed 0... Un URI combinant Scheme, Authentication, Host et Path.
Certificate Name Nom attribué au certificat propriétaire du service pour le déploiement de la base de données.
Certificate Base 64 Version codée en base64 du certificat.
  • 0... indique qu'il peut y avoir une ou plusieurs de ces entrées dans un tableau.

De nombreux pilotes Elasticsearch peuvent établir une connexion avec votre déploiement lorsqu'ils disposent de la chaîne de connexion au format URI qui se trouve dans la zone "composed" des informations de connexion. Voir l'exemple suivant :

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

L'exemple suivant utilise Java pour se connecter.

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();
        }

    }

}

L'exemple suivant utilise la bibliothèque Python elasticsearch-py pour se connecter.

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)

Prise en charge du certificat TLS du pilote et du certificat propriétaire du service

TLS 1.2 est activé pour toutes les connexions à Databases for Elasticsearch, par conséquent, le pilote que vous utilisez pour la connexion doit pouvoir prendre en charge le chiffrement. Votre déploiement est également accompagné d'un certificat propriétaire de service afin que le pilote puisse vérifier le serveur lors de la connexion.

Pour plus d'informations, voir la foire aux questions sur les certificatsCloud Databases.

Utilisation du certificat de propriété du service

  1. Copiez les informations relatives au certificat à partir du panneau Endpoints ou du champ Base64 des informations de connexion de la lettre de créance de service.
  2. Si besoin, décodez la chaîne Base64 en texte.
  3. Sauvegardez le certificat dans un fichier. (Vous pouvez utiliser le nom qui est fourni ou votre propre nom de fichier.)
  4. Indiquez le chemin d'accès au certificat au pilote ou au client.

Prise en charge du plug-in CLI pour le certificat propriétaire du service

Vous pouvez afficher le certificat décodé pour votre déploiement avec le plug-in d'interface de ligne de commande à l'aide de la commande ibmcloud cdb deployment-cacert "your-service-name". Elle décode la chaîne base64 en texte. Copiez et sauvegardez le résultat de la commande dans un fichier et indiquez le chemin du fichier au pilote.

Autres pilotes

Elasticsearch possède un large éventail de pilotes de langage. Le tableau en répertorie quelques-uns des plus courants.

Pilotes Elasticsearch courants
Langue Pilote Documentation
Node elasticsearch-js Lien
Ruby elasticsearch-ruby Lien
Ruby on Rails elasticsearch-rails Lien
Python elasticsearch-py Lien
Java Jest Lien
Go elastic Lien