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.
| 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
- Copie as informações do certificado do painel Endpoints ou do campo Base64 das informações de conexão da credencial de serviço.
- Se necessário, decodifique a sequência Base64 em texto.
- Salve o certificado em um arquivo. (É possível usar o nome fornecido ou o seu próprio nome do arquivo).
- 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.
| 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 |