외부 애플리케이션 연결

애플리케이션 및 드라이버는 연결 문자열을 사용하여 IBM Cloud® Databases for Elasticsearch에 연결합니다. 각 배치에는 드라이버 및 애플리케이션용의 연결 문자열이 있습니다. 연결 문자열은 배포 개요 페이지의 엔드포인트 패널에 표시되며, 클라우드 데이터베이스 CLI 플러그인API에서도 검색할 수 있습니다.

연결 문자열은 배포에서 생성한 모든 자격 증명에서 사용할 수 있습니다. 모든 연결 및 애플리케이션에 admin 사용자를 사용할 수 있지만 애플리케이션을 연결하기 위해 특별히 사용자를 작성하는 것이 좋습니다. 자세한 내용은 연결 문자열 가져오기 를 참조하세요.

언어의 드라이버를 사용하여 연결

드라이버가 배포에 연결하는 데 필요한 모든 정보는 서비스 자격 증명 페이지에서 만든 자격 증명의 "https" 섹션에 있습니다. 이 표에는 참조에 대한 분석이 포함되어 있습니다.

https/URI 연결 정보
필드 이름 색인 설명
Type 연결 유형 - Elasticsearch 의 경우 "uri"입니다.
Scheme URI의 스키마 - Elasticsearch 의 경우 "https"입니다.
Path URL의 경로입니다.
Authentication Username 연결하는 데 사용하는 사용자 이름입니다.
Authentication Password 사용자의 비밀번호 - $PASSWORD 로 표시될 수 있습니다.
Authentication Method 인증이 수행되는 방법이며 "직접" 인증은 드라이버에 의해 처리됩니다.
Hosts 0... 연결할 호스트 이름 및 포트입니다.
Composed 0... 스키마, 인증, 호스트 및 경로를 결합한 URI입니다.
Certificate Name 데이터베이스 배포를 위한 서비스 전용 인증서에 할당된 이름입니다.
Certificate Base 64 base64 인코딩된 인증서 버전입니다.
  • 0... 배열에 이러한 항목이 하나 이상 있을 수 있음을 표시합니다.

다수의 Elasticsearch 드라이버는 연결 정보의 "구성" 필드에 표시되는 URI 형식의 연결 문자열이 주어지면 배치에 연결할 수 있습니다. 다음 예를 참조하십시오.

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

다음 예에서는 연결하는 데 Java를 사용합니다.

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

    }

}

다음 예에서는 연결하는 데 Python 라이브러리 elasticsearch-py를 사용합니다.

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)

드라이버 TLS 및 서비스 전용 인증서 지원

Databases for Elasticsearch에 대한 모든 연결은 TLS 1.2이 가능하므로, 연결하기 위해 사용하는 드라이버는 암호화를 지원할 수 있어야 합니다. 또한 배포에는 서비스 전용 인증서가 함께 제공되므로 드라이버가 연결 시 서버를 확인할 수 있습니다.

자세한 정보는 Cloud Databases 인증서 FAQ를 참조하십시오.

서비스 전용 인증서 사용

  1. 엔드포인트 패널 또는 서비스 자격증명 연결 정보의 Base64 필드에서 인증서 정보를 복사합니다.
  2. 필요하면, Base64 문자열을 텍스트로 디코딩하십시오.
  3. 파일에 인증서를 저장하십시오. (제공되는 이름 또는 자체 파일 이름을 사용할 수 있습니다.)
  4. 드라이버 또는 클라이언트에 인증서의 경로를 제공하십시오.

서비스 전용 인증서를 위한 CLI 플러그인 지원

ibmcloud cdb deployment-cacert "your-service-name" 명령으로 CLI 플러그인을 사용하여 배치에 대해 디코딩된 인증서를 표시할 수 있습니다. base64를 텍스트로 디코딩합니다. 명령의 출력을 복사하여 파일에 저장하고 드라이버에 대한 파일 경로를 제공하십시오.

기타 드라이버

Elasticsearch에는 방대한 배열의 언어 드라이버가 있습니다. 다음 표에서는 몇 가지 가장 일반적인 언어 드라이버를 다룹니다.

일반적인 Elasticsearch 드라이버
언어 드라이버 문서
Node elasticsearch-js 링크
Ruby elasticsearch-ruby 링크
Ruby on Rail elasticsearch-rails 링크
Python elasticsearch-py 링크
Java Jest 링크
Go elastic 링크