Conexión de una aplicación externa

Sus aplicaciones y controladores utilizan series de conexión para realizar una conexión con IBM Cloud® Databases for Elasticsearch. Cada despliegue tiene series de conexión específicamente para controladores y aplicaciones. Las cadenas de conexión se muestran en el panel Endpoints de la página Overview de la implantación y también se pueden recuperar desde el complemento CLI de las bases de datos en la nube y la API.

Las cadenas de conexión pueden ser utilizadas por cualquiera de las credenciales que cree en su despliegue. Aunque puede utilizar el usuario administrador para todas las conexiones y aplicaciones, quizás sea mejor crear usuarios específicamente para conectarse a las aplicaciones. Para obtener más información, consulte Obtención de cadenas de conexión.

Conexión con un controlador de un lenguaje

Toda la información que necesita un controlador para establecer una conexión con su despliegue se encuentra en la sección "https" de una credencial creada en la página Credenciales de servicio. La tabla contiene un desglose para referencia.

información de conexión https/URI
Nombre de campo Índice Descripción
Type Tipo de conexión - para Elasticsearch, es "uri".
Scheme Esquema para un URI - para Elasticsearch, es "https".
Path Ruta para una uri.
Authentication Username El nombre de usuario que utiliza para conectarse.
Authentication Password Una contraseña para el usuario - podría mostrarse como $PASSWORD.
Authentication Method Cómo se realiza la autenticación; la autenticación "directa" la maneja el controlador.
Hosts 0... Un nombre de host y un puerto al que conectar.
Composed 0... Un URI que combina esquema, autenticación, host y ruta.
Certificate Name El nombre asignado para el certificado propietario del servicio para el despliegue de la base de datos.
Certificate Base 64 Una versión codificada en base64 del certificado.
  • 0... indica que puede haber una o varias de estas entradas en una matriz.

Muchos controladores de Elasticsearch pueden realizar una conexión con el despliegue si se les proporciona la serie de conexión con formato URI en el campo "Compuesto" de la información de conexión. Consulte el ejemplo siguiente:

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

El ejemplo siguiente utiliza Java para conectarse.

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

    }

}

El ejemplo siguiente utiliza la biblioteca Python elasticsearch-py para conectarse.

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)

Soporte de TLS para controladores y certificados propietarios de servicios

Todas las conexiones a Databases for Elasticsearch tienen habilitado TLS 1.2, por lo que el controlador que se utiliza para conectar tiene que admitir el cifrado. Su implantación también incluye un certificado propietario del servicio para que el controlador pueda verificar el servidor en el momento de la conexión.

Para obtener más información, consulte Cloud Databases FAQ de certificados.

Utilización del certificado propietario del servicio

  1. Copie la información del certificado del panel Endpoints o del campo Base64 de la información de conexión de la credencial de servicio.
  2. Si es necesario, decodifique la serie Base64 en texto.
  3. Guarde el certificado en un archivo. (Puede utilizar el Nombre que se proporciona o un nombre de archivo de su elección).
  4. Proporcione al controlador o al cliente la vía de acceso al certificado.

Compatibilidad del complemento CLI con el certificado propietario del servicio

Puede mostrar el certificado decodificado para el despliegue con el plugin de CLI con el mandato ibmcloud cdb deployment-cacert "your-service-name". Decodifica la serie base64 a texto. Copie y guarde la salida del mandato en un archivo y proporcione la vía de acceso del archivo al controlador.

Otros controladores

Elasticsearch tiene una amplia gama de controladores de lenguaje. En la tabla se incluyen algunos de los más comunes.

Controladores comunes de Elasticsearch
Idioma Controlador Documentación
Node elasticsearch-js Enlace
Ruby elasticsearch-ruby Enlace
Ruby on Rails elasticsearch-rails Enlace
Python elasticsearch-py Enlace
Java Jest Enlace
Go elastic Enlace