すべてのプロダクト
Search
ドキュメントセンター

Elasticsearch:アプリケーションからのクラスターへの接続

最終更新日:Apr 01, 2026

このトピックでは、Java、Python、Go を使用して Alibaba Cloud Elasticsearch (ES) クラスターに接続する方法について説明します。

事前準備

クラスターエンドポイントの取得

Elasticsearch クラスターには、内部エンドポイントまたはパブリックエンドポイントを使用して接続できます。

  • 内部エンドポイント (VPC):VPC 経由でクラスターにアクセスすることで、低レイテンシと高い安定性を実現します。このエンドポイントは、クラスター作成後にデフォルトで有効になります。

  • パブリックエンドポイント:インターネット経由でクラスターにアクセスします。このエンドポイントは手動で有効にする必要があります。

パブリックアクセスを有効にする方法:

  1. Alibaba Cloud Elasticsearch コンソールにログインし、インスタンスの 基本情報 ページに移動します。

  2. 左側のナビゲーションウィンドウで、設定と管理 > セキュリティ設定 を選択し、パブリックアクセスを有効にします。クラスターのステータスが 初期化中 から 有効 に変更されると、パブリックアクセスが有効になります。

    image

    重要

    パブリックエンドポイントを使用すると、Elasticsearch クラスターのセキュリティが低下します。パブリックエンドポイントを使用する場合は、IP ホワイトリストを設定し、不要になったらパブリックアクセスを無効にする必要があります。

IP ホワイトリストの設定

クラスターを保護するためには、クライアントデバイスの IP アドレスをクラスターの VPC またはパブリック IP ホワイトリストに追加する必要があります。ホワイトリストに登録された IP アドレスのみがクラスターにアクセスできます。

  1. クライアントデバイスの IP アドレスを取得します。

    接続シナリオに基づいて IP アドレスを取得できます。

    シナリオ

    IP アドレス

    方法

    ローカルデバイスからの接続

    ローカルデバイスのパブリック IP アドレス。

    デバイスが自宅やオフィスのネットワークなどの LAN (ローカルエリアネットワーク) 上にある場合は、LAN のパブリック出口 IP アドレスをクラスターのパブリック IP ホワイトリストに追加します。

    curl ipinfo.io/ip コマンドを実行して、ローカルデバイスのパブリック IP アドレスを取得します。

    異なる VPC 内の ECS インスタンスからの接続

    Elastic Compute Service (ECS) インスタンスのパブリック IP アドレス

    ECS コンソールにログインし、インスタンスリストで IP アドレスを確認します。

    同じ VPC 内の ECS インスタンスからの接続

    ECS インスタンスのプライベート IP アドレス

    ECS コンソールにログインし、インスタンスリストで IP アドレスを確認します。

  2. IP アドレスをホワイトリストグループに追加します。

    1. Alibaba Cloud Elasticsearch コンソールにログインします。Alibaba Cloud Elasticsearch コンソールで、インスタンスの基本情報ページを開きます。左側のナビゲーションウィンドウで、設定と管理セキュリティ設定を選択します。[変更]をクリックして、VPC またはパブリック IP ホワイトリストを設定します。

    2. デフォルト グループの右側にある [設定] をクリックします。 ダイアログボックスで、VPC またはパブリック IP ホワイトリストに IP アドレスを追加します。 クラスターは、最大 300 個の IP アドレスまたは CIDR ブロックをサポートしています。 複数のエントリはカンマで区切り、カンマの前後にはスペースを入れないでください。

      • また、[IP ホワイトリストグループの追加] をクリックしてカスタムグループを作成することもできます。

      • ホワイトリストグループは管理目的のみであり、アクセスには影響しません。すべてのグループのすべての IP アドレスは同じ権限を持ちます。

      タイプ

      フォーマットと例

      IPv4 アドレス

      • 単一 IP:192.168.0.1

      • CIDR ブロック:192.168.0.0/24

      • アクセスを拒否:127.0.0.1

      • すべてのアクセスを許可:0.0.0.0/0

        重要

        高いリスクが存在するため、0.0.0.0/0 を設定しないことを強く推奨します。

        一部のクラスターバージョン (7.16/8.5 など) およびリージョンでは 0.0.0.0/0 はサポートされていません。コンソールのインターフェースまたはエラープロンプトをご参照ください。

      IPv6 アドレス形式

      (v2 デプロイメントアーキテクチャで、所属リージョンが杭州のクラスターのみサポート)

      • 単一 IP:2401:XXXX:1000:24::5

      • CIDR ブロック:2401:XXXX:1000::/48

      • すべてのアクセスを拒否:::1

      • すべてのアクセスを許可::/0

        重要

        高いリスクが存在するため、::/0 を設定しないことを強く推奨します。

        一部のクラスターバージョンでは ::/0 はサポートされていません。コンソールのインターフェースまたは設定プロンプトをご参照ください。

    3. 構成を完了した後、[確認] をクリックします。

プロトコルと証明書

  • 最適な互換性を確保するために、クライアントの言語バージョン (Java、Python、または Go) が ES クラスターの基盤となるランタイムと一致していることを確認してください。

  • パブリック HTTPS:信頼された認証局 (CA) によって発行された証明書を使用します。特別なクライアント設定は不要です。https:// プロトコルを使用して直接接続します。

  • プライベート HTTPS:自己署名証明書を使用して暗号化されたデータを送信します。証明書検証をスキップするようにクライアントを設定する必要があります。詳細については、各言語のプライベート HTTPS 接続の例をご参照ください。

クラスターへの接続

Java

  1. Java 開発キット (JDK) 1.8 以降をインストールします。

  2. Maven の依存関係を設定します。

    重要

    version を正しい ES のバージョン番号に設定してください。version が正しく設定されている場合にのみ、関連する依存関係をプルできます。この例の ES バージョンは 8.17.0 です。

    <dependency>
        <groupId>co.elastic.clients</groupId>
        <artifactId>elasticsearch-java</artifactId>
        <version>8.17.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.3</version>
    </dependency>
  3. YML パラメーターを設定して、インデックスの自動作成を有効にします:action.auto_create_index: true。次の例では、ES クラスターに接続し、hr_test という名前のインデックスを作成します。

基本的な接続例

次の例は、パブリック HTTPS またはプライベート HTTP のシナリオに適用されます。

package org.example;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch.cat.IndicesResponse;
import co.elastic.clients.elasticsearch.indices.*;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.client.*;
import java.io.IOException;
public class RestClientTest {
    public static void main(String[] args) {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("{UserName}", "{YourPassword}"));
        // パブリック HTTPS アクセスには "https" を、プライベート HTTP アクセスには "http" を使用します。
        RestClient restClient = RestClient.builder(new HttpHost("{YourEsHost}", 9200, "https"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                }).build();

        ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
        ElasticsearchClient elasticsearchClient = new ElasticsearchClient(transport);
        try {
            CreateIndexResponse indexRequest = elasticsearchClient.indices().create(createIndexBuilder -> createIndexBuilder
                    .index("hr_test")
                    .aliases("foo", aliasBuilder -> aliasBuilder.isWriteIndex(true))
            );
            System.out.println("Index document successfully! " + indexRequest.acknowledged());
            transport.close();
            restClient.close();
        } catch (IOException ioException) {
            // 例外を処理します。
        }
    }
}

プライベート HTTPS 接続の例

プライベート HTTPS 接続の場合、証明書検証をスキップするための設定を追加する必要があります。

package org.example;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.ssl.SSLContexts;
import org.elasticsearch.client.*;
import javax.net.ssl.SSLContext;

public class RestClientTestPrivateHttps {
    public static void main(String[] args) throws Exception {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("{UserName}", "{YourPassword}"));
        // すべての証明書を信頼する SSLContext を作成します。
        SSLContext sslContext = SSLContexts.custom()
          .loadTrustMaterial(null, (chain, authType) -> true)  // すべての証明書を信頼します。
          .build();
        RestClient restClient = RestClient.builder(new HttpHost("{YourEsHost}", 9200, "https"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder
                            .setDefaultCredentialsProvider(credentialsProvider)
                            .setSSLContext(sslContext)                          // SSLContext を設定します。
                            .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE);  // ホスト名の検証をスキップします。
                    }
                }).build();

        ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
        ElasticsearchClient elasticsearchClient = new ElasticsearchClient(transport);
        
        // 操作を実行します。
        System.out.println(elasticsearchClient.info());
        
        transport.close();
        restClient.close();
    }
}

Python

以下のコードは、ES バージョン 8.17.0 を例として使用しています。バージョン番号を実際の ES バージョンに置き換えてください。

基本的な接続例

次の例は、パブリック HTTPS またはプライベート HTTP のシナリオに適用されます。

pip install elasticsearch==8.17.0from elasticsearch import Elasticsearch
es = Elasticsearch(
    hosts=['https://<YourEsHost>:9200'],  # パブリック HTTPS アクセスには 'https://' を、プライベート HTTP アクセスには 'http://' を使用します。
    basic_auth=('<UserName>', '<YourPassword>'),
)
print(es.info())

プライベート HTTPS 接続の例

from elasticsearch import Elasticsearch
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)  # SSL 警告を無効にします (任意)。

es = Elasticsearch(
    hosts=['https://<YourEsHost>:9200'],
    basic_auth=('<UserName>', '<YourPassword>'),
    verify_certs=False,           # 証明書の検証をスキップします。
    ssl_show_warn=False,          # SSL 警告を無効にします。
)
print(es.info())

Go

次の例は、Go を使用して ES 8.x クラスターに接続する方法を示しています。Go クライアントの機能の詳細については、「Elasticsearch Go Client」をご参照ください。

基本的な接続例

次の例は、パブリック HTTPS またはプライベート HTTP のシナリオに適用されます。

go get github.com/elastic/go-elasticsearch/v8
package main

import (
    "github.com/elastic/go-elasticsearch/v8""log"
)

func main() {
    cfg := elasticsearch.Config{
        Addresses: []string{"https://<YourEsHost>:9200"},  // パブリック HTTPS アクセスには "https://" を、プライベート HTTP アクセスには "http://" を使用します。
        Username:  "<UserName>",
        Password:  "<YourPassword>",
    }
    es, _ := elasticsearch.NewClient(cfg)
    res, _ := es.Info()
    defer res.Body.Close()
    log.Println(res)
}

プライベート HTTPS 接続の例

package main

import (
    "crypto/tls""net/http""github.com/elastic/go-elasticsearch/v8""log"
)

func main() {
    cfg := elasticsearch.Config{
        Addresses: []string{"https://<YourEsHost>:9200"},
        Username:  "<UserName>",
        Password:  "<YourPassword>",
        Transport: &http.Transport{
            TLSClientConfig: &tls.Config{InsecureSkipVerify: true},  // 証明書の検証をスキップします。
        },
    }
    es, _ := elasticsearch.NewClient(cfg)
    res, _ := es.Info()
    defer res.Body.Close()
    log.Println(res)
}

パラメーター

パラメーター

説明

UserName

デフォルトのユーザー名は elastic です。このユーザーはクラスターに対する最高の権限を持ち、管理者アカウントです。

セキュリティ上の理由から、本番環境ではこのデフォルトの管理者アカウントを直接使用しないでください。Elasticsearch X-Pack のロールベースのアクセス制御 (RBAC) メカニズムを使用して、ロールをカスタマイズし、権限を割り当て、その後ユーザーにロールを割り当てることで、詳細な権限制御を実装できます。詳細については、「Elasticsearch X-Pack のロールを使用したユーザー権限の管理」をご参照ください。

YourPassword

指定された UserName のパスワードです。

https

アクセスプロトコルを指定します。デフォルトでは HTTP が有効になっています。

セキュリティのため、HTTPS プロトコルの使用を推奨します。これは手動で有効化する必要があります。この操作を行うには、[Elasticsearch コンソール] にログインし、インスタンスの 基本情報 ページに移動して、左側のナビゲーションウィンドウで 設定と管理 > セキュリティ設定 を選択して、HTTPS プロトコルを有効化します。

重要
  • HTTPS を有効にする前に、アプリケーションを更新して HTTPS をサポートするようにしてください。変更後、既存の HTTP ベースのコードは接続に失敗します。

  • プライベート HTTPS 接続では自己署名証明書が使用されます。クライアントが証明書検証をスキップするように設定する必要があります。詳細については、各言語の接続例をご参照ください。

YourEsHost

「事前準備」セクションで取得したクラスターエンドポイント:

  • VPC エンドポイント

  • パブリックエンドポイント

9200

クラスターのアクセスポートを指定します。VPC プライベートネットワークとパブリックアクセスの両方で、デフォルトは 9200 です。