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.
| 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
- 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.
- Si es necesario, decodifique la serie Base64 en texto.
- Guarde el certificado en un archivo. (Puede utilizar el Nombre que se proporciona o un nombre de archivo de su elección).
- 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.
| 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 |