Conectando um aplicativo externo

Os seus aplicativos e drivers usam sequências de conexões para fazer uma conexão com os IBM Cloud® Databases for Elasticsearch. Cada implementação tem sequências de conexões especificamente para drivers e aplicativos. As cadeias de conexão são exibidas no painel Endpoints da página Overview (Visão geral) da sua implantação e também podem ser recuperadas do plug-in CLI dos bancos de dados na nuvem e da API.

As cadeias de conexão podem ser usadas por qualquer uma das credenciais que você criar em sua implantação. Embora seja possível usar o usuário admin para todas as conexões e os aplicativos, pode ser melhor criar usuários especificamente para as conexões dos aplicativos com eles. Para obter mais informações, consulte Obtenção de cadeias de conexão.

Conectando-se ao driver de uma linguagem

Todas as informações de que um driver precisa para fazer uma conexão com a sua implantação estão na seção "https" de uma credencial criada na página Credenciais de serviço. A tabela contém um detalhamento para referência.

informações de conexão https/URI
Nome do campo Index Descrição
Type Tipo de conexão - para Elasticsearch, é "uri".
Scheme Esquema para um URI - para Elasticsearch, é "https".
Path Caminho para um uri.
Authentication Username O nome do usuário usado para se conectar.
Authentication Password Uma senha para o usuário - pode ser mostrada como $PASSWORD.
Authentication Method Como a autenticação ocorre; a autenticação "direta" é manipulada pelo driver.
Hosts 0... Um nome do host e uma porta aos quais se conectar.
Composed 0... Um URI que combina Scheme (esquema), Authentication (autenticação), Host (host) e Path (caminho).
Certificate Name O nome alocado para o certificado proprietário do serviço para a implementação do banco de dados.
Certificate Base 64 Uma versão do certificado codificada em Base64.
  • 0... indica que pode haver uma ou mais dessas entradas em uma matriz.

Muitos drivers da Elasticsearch podem fazer uma conexão com a sua implementação quando recebem a sequência de conexões formatada por URI localizada no campo "composto" das informações de conexão. Consulte o seguinte exemplo:

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

O exemplo a seguir usa Java para conectar.

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

    }

}

O exemplo a seguir usa a biblioteca Python elasticsearch-py para conectar-se.

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)

Suporte ao TLS do driver e ao certificado proprietário do serviço

Todas as conexões com o Databases for Elasticsearch são ativadas pelo TLS 1.2. Portanto, o driver que você usa para a conexão precisa ser capaz de suportar criptografia. Sua implementação também vem com um certificado de propriedade do serviço para que o driver possa verificar o servidor na conexão.

Para obter mais informações, consulte Cloud Databases FAQ de Certificados.

Usando o certificado de propriedade do serviço

  1. Copie as informações do certificado do painel Endpoints ou do campo Base64 das informações de conexão da credencial de serviço.
  2. Se necessário, decodifique a sequência Base64 em texto.
  3. Salve o certificado em um arquivo. (É possível usar o nome fornecido ou o seu próprio nome do arquivo).
  4. Forneça o caminho do certificado para o driver ou o cliente.

Suporte ao plug-in da CLI para o certificado proprietário do serviço

É possível exibir o certificado decodificado para a sua implementação com o plug-in da CLI com o comando ibmcloud cdb deployment-cacert "your-service-name". Ele decodifica o Base64 em texto. Copie e salve a saída do comando em um arquivo e forneça o caminho do arquivo para o driver.

Outros drivers

A Elasticsearch tem uma vasta matriz de drivers de linguagem. A tabela cobre alguns dos mais comuns.

Drivers comuns Elasticsearch
Idioma Driver Documentação
Node elasticsearch-js Link
Ruby elasticsearch-ruby Link
Ruby no Rails elasticsearch-rails Link
Python elasticsearch-py Link
Java Jest Link
Acessar elastic Link