Topik ini menjelaskan cara menghubungkan ke kluster Alibaba Cloud Elasticsearch (ES) menggunakan Java, Python, dan Go.
Sebelum memulai
Dapatkan titik akhir kluster
Anda dapat menghubungkan ke kluster Elasticsearch melalui titik akhir internal atau titik akhir publik.
Titik akhir internal (VPC): Akses kluster melalui VPC untuk latensi rendah dan stabilitas tinggi. Titik akhir ini diaktifkan secara default setelah Anda membuat kluster.
Titik akhir publik: Akses kluster melalui internet. Anda harus mengaktifkan titik akhir ini secara manual.
Cara mengaktifkan akses publik:
Masuk ke Konsol Alibaba Cloud Elasticsearch dan buka halaman Basic Information instans Anda.
Di panel navigasi kiri, pilih Configuration and Management > Security Settings, lalu aktifkan akses publik. Setelah status kluster berubah dari Initializing menjadi Valid, akses publik telah diaktifkan.
PentingPenggunaan titik akhir publik mengurangi keamanan kluster Elasticsearch Anda. Jika Anda menggunakan titik akhir publik, pastikan untuk mengonfigurasi daftar putih IP dan menonaktifkan akses publik ketika tidak lagi diperlukan.
Konfigurasi daftar putih IP
Untuk mengamankan kluster Anda, tambahkan alamat IP perangkat client ke daftar putih VPC atau daftar putih IP publik kluster. Hanya alamat IP yang terdaftar dalam daftar putih yang dapat mengakses kluster.
Dapatkan alamat IP perangkat client Anda.
Anda dapat memperoleh alamat IP sesuai dengan skenario koneksi Anda.
Skenario
Alamat IP
Metode
Menghubungkan dari perangkat lokal
Alamat IP publik perangkat lokal.
Jika perangkat Anda berada di jaringan area lokal (LAN), seperti jaringan rumah atau kantor, tambahkan alamat IP egress publik LAN tersebut ke daftar putih IP publik kluster.
Jalankan perintah
curl ipinfo.io/ipuntuk mendapatkan alamat IP publik perangkat lokal Anda.Menghubungkan dari Instance ECS di VPC berbeda
Alamat IP publik Instance ECS
Login ke Konsol ECS dan lihat alamat IP di daftar instans.
Menghubungkan dari Instance ECS di VPC yang sama
Alamat IP pribadi Instance ECS
Login ke Konsol ECS dan lihat alamat IP di daftar instans.
Tambahkan alamat IP ke grup daftar putih.
Masuk ke Alibaba Cloud Elasticsearch console. Pada halaman Basic Information instans, pilih Configuration and Management > Security Settings di panel navigasi kiri, lalu klik Modify untuk mengonfigurasi VPC atau daftar putih IP publik.
Klik Configure di sebelah kanan grup default. Di kotak dialog, tambahkan alamat IP ke daftar putih VPC atau daftar putih IP publik. Satu kluster mendukung hingga 300 alamat IP atau Blok CIDR. Pisahkan beberapa entri dengan koma tanpa spasi di sekitarnya.
Anda juga dapat mengklik Add IP Whitelist Group untuk membuat grup kustom.
Grup daftar putih hanya digunakan untuk keperluan manajemen dan tidak memengaruhi akses; semua alamat IP di seluruh grup memiliki izin yang sama.
Jenis
Format dan contoh
Catatan
Alamat IPv4
IP tunggal:
192.168.0.1Blok jaringan:
192.168.0.0/24
Larangan akses:
127.0.0.1Izinkan semua akses:
0.0.0.0/0PentingBerisiko tinggi, sangat disarankan untuk tidak mengonfigurasi
0.0.0.0/0.Versi kluster tertentu (misalnya 7.16/8.5) dan wilayah tertentu tidak mendukung
0.0.0.0/0, harap merujuk pada antarmuka konsol atau pesan error.
Format alamat IPv6
(Hanya didukung oleh kluster dengan arsitektur deployment v2 di wilayah Hangzhou)
IP tunggal:
2401:XXXX:1000:24::5Blok jaringan:
2401:XXXX:1000::/48
Larangan semua akses:
::1Izinkan semua akses
::/0PentingBerisiko tinggi, sangat disarankan untuk tidak mengonfigurasi
::/0.Versi kluster tertentu tidak mendukung
::/0, harap merujuk pada antarmuka konsol atau petunjuk konfigurasi.
Setelah menyelesaikan konfigurasi, klik Confirm.
Protokol dan sertifikat
Untuk kompatibilitas optimal, pastikan versi bahasa client Anda (Java, Python, atau Go) sesuai dengan waktu proses dasar kluster ES.
HTTPS Publik: Menggunakan sertifikat yang dikeluarkan oleh Certificate Authority (CA) tepercaya. Tidak diperlukan konfigurasi khusus pada client. Hubungkan langsung menggunakan protokol
https://.HTTPS Pribadi: Menggunakan Sertifikat tanda tangan sendiri untuk transmisi data terenkripsi. Anda harus mengonfigurasi client agar melewati verifikasi sertifikat. Untuk detailnya, lihat contoh koneksi HTTPS pribadi untuk masing-masing bahasa.
Menghubungkan ke kluster
Java
Instal Java Development Kit (JDK) 1.8 atau lebih baru.
Konfigurasi dependensi Maven.
PentingAtur
versionke nomor versi ES yang sesuai. Dependensi terkait hanya dapat ditarik jikaversiondiatur dengan benar. Versi ES dalam contoh ini adalah 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>Konfigurasikan parameter YML untuk mengaktifkan pembuatan indeks otomatis:
action.auto_create_index: true. Contoh berikut menghubungkan ke kluster ES dan membuat indeks bernama hr_test.
Contoh koneksi dasar
Contoh berikut berlaku untuk skenario HTTPS publik atau HTTP pribadi:
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}"));
// Gunakan "https" untuk akses HTTPS publik atau "http" untuk akses HTTP pribadi.
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("Dokumen indeks berhasil dibuat! " + indexRequest.acknowledged());
transport.close();
restClient.close();
} catch (IOException ioException) {
// Tangani exception.
}
}
}
Contoh koneksi HTTPS pribadi
Untuk koneksi HTTPS pribadi, tambahkan konfigurasi untuk melewati verifikasi sertifikat:
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}"));
// Buat SSLContext yang memercayai semua sertifikat.
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(null, (chain, authType) -> true) // Percaya semua sertifikat.
.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) // Atur SSLContext.
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE); // Lewati verifikasi hostname.
}
}).build();
ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
ElasticsearchClient elasticsearchClient = new ElasticsearchClient(transport);
// Lakukan operasi.
System.out.println(elasticsearchClient.info());
transport.close();
restClient.close();
}
}Python
Kode berikut menggunakan versi ES 8.17.0 sebagai contoh. Ganti nomor versi dengan versi ES aktual Anda.
Contoh koneksi dasar
Contoh berikut berlaku untuk skenario HTTPS publik atau HTTP pribadi:
pip install elasticsearch==8.17.0from elasticsearch import Elasticsearch
es = Elasticsearch(
hosts=['https://<YourEsHost>:9200'], # Gunakan 'https://' untuk akses HTTPS publik atau 'http://' untuk akses HTTP pribadi.
basic_auth=('<UserName>', '<YourPassword>'),
)
print(es.info())
Contoh koneksi HTTPS pribadi
from elasticsearch import Elasticsearch
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Nonaktifkan peringatan SSL (opsional).
es = Elasticsearch(
hosts=['https://<YourEsHost>:9200'],
basic_auth=('<UserName>', '<YourPassword>'),
verify_certs=False, # Lewati verifikasi sertifikat.
ssl_show_warn=False, # Nonaktifkan peringatan SSL.
)
print(es.info())
Go
Contoh berikut menunjukkan cara menghubungkan ke kluster ES 8.x menggunakan Go. Untuk informasi lebih lanjut tentang fitur client Go, lihat Elasticsearch Go Client.
Contoh koneksi dasar
Contoh berikut berlaku untuk skenario HTTPS publik atau HTTP pribadi:
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"}, // Gunakan "https://" untuk akses HTTPS publik atau "http://" untuk akses HTTP pribadi.
Username: "<UserName>",
Password: "<YourPassword>",
}
es, _ := elasticsearch.NewClient(cfg)
res, _ := es.Info()
defer res.Body.Close()
log.Println(res)
}
Contoh koneksi HTTPS pribadi
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}, // Lewati verifikasi sertifikat.
},
}
es, _ := elasticsearch.NewClient(cfg)
res, _ := es.Info()
defer res.Body.Close()
log.Println(res)
}Parameter
Parameter | Deskripsi |
UserName | Username default adalah Karena alasan keamanan, Anda sebaiknya tidak menggunakan akun administrator default ini secara langsung di lingkungan produksi. Anda dapat menggunakan mekanisme Role-based Access Control (RBAC) dari Elasticsearch X-Pack untuk menyesuaikan role, memberikan izin, lalu menetapkan role tersebut kepada pengguna guna menerapkan kontrol izin detail halus. Untuk informasi lebih lanjut, lihat Mengelola izin pengguna menggunakan role Elasticsearch X-Pack. |
YourPassword | Password untuk |
https | Menentukan protokol akses. HTTP diaktifkan secara default. Untuk keamanan, kami menyarankan penggunaan protokol HTTPS, yang harus diaktifkan secara manual. Untuk melakukannya, masuklah ke Konsol Elasticsearch, buka halaman Basic Information instans Anda, lalu di panel navigasi sebelah kiri, pilih Configuration and Management > Security Settings untuk mengaktifkan protokol HTTPS. Penting
|
YourEsHost | Titik akhir kluster yang Anda peroleh di bagian "Prasyarat":
|
9200 | Menentukan port akses kluster. Default-nya adalah 9200 baik untuk jaringan pribadi VPC maupun akses publik. |