Connectez-vous à un cluster Alibaba Cloud Elasticsearch avec Java, Python ou Go.
Avant de commencer
Obtenir le point de terminaison du cluster
Vous pouvez vous connecter à votre cluster Elasticsearch via un point de terminaison interne sur un réseau privé VPC ou via un point de terminaison public.
Point de terminaison interne : offre une connexion à faible latence et haute stabilité vers votre cluster Elasticsearch. Ce point de terminaison est activé par défaut lors de la création du cluster.
Point de terminaison public : permet de se connecter à votre cluster Elasticsearch via Internet. Vous devez l'activer manuellement.
Activer l'accès public
Connectez-vous à la console Elasticsearch et accédez à la page Basic Information de votre instance.
-
Dans le volet de navigation, choisissez Configuration and Management > Security Settings et activez l'accès public. L'accès public est effectif une fois que l'état du cluster passe de Initializing à Valid.
Une fois l'accès public activé, le point de terminaison public suit le format
es-cn-<instance_ID>.public.elasticsearch.aliyuncs.com. La liste d'autorisation IP publique est vide par défaut et doit être configurée.ImportantL'utilisation d'un point de terminaison public peut compromettre la sécurité de votre cluster Elasticsearch. Si vous utilisez un point de terminaison public, configurez une liste d'autorisation IP et désactivez l'accès public une fois vos opérations terminées.
Configurer une liste d'autorisation IP
Pour sécuriser votre cluster, ajoutez l'adresse IP de l'appareil utilisé pour l'accès à la liste d'autorisation IP du réseau privé VPC ou à la liste d'autorisation IP publique du cluster Elasticsearch. Seuls les appareils dont les adresses IP figurent dans la liste d'autorisation peuvent accéder au cluster.
-
Obtenez l'adresse IP de l'appareil que vous souhaitez utiliser pour l'accès.
Le tableau suivant explique comment obtenir l'adresse IP selon différents scénarios.
Scénario
Adresse IP
Méthode
Se connecter à un cluster Elasticsearch depuis un appareil local
L'adresse IP publique de votre appareil local.
Si votre appareil local se trouve sur un réseau local (LAN), tel qu'un réseau domestique ou d'entreprise, ajoutez l'adresse IP publique de la passerelle du LAN à la liste d'autorisation IP publique du cluster.
Exécutez la commande
curl ipinfo.io/ippour trouver l'IP publique de votre appareil local.Se connecter à un cluster Elasticsearch depuis une instance ECS dans un VPC différent
L'IP publique de l'instance ECS.
Connectez-vous à la console ECS pour la consulter dans la liste des instances.
Se connecter à un cluster Elasticsearch depuis une instance ECS dans le même VPC
L'IP privée de l'instance ECS.
Connectez-vous à la console ECS pour la consulter dans la liste des instances.
-
Ajoutez cette adresse IP à un groupe de listes d'autorisation.
Connectez-vous à la console Elasticsearch. Sur la page Basic Information de votre instance, choisissez Configuration and Management > Security Settings dans le volet de navigation. Cliquez sur Modify pour configurer la liste d'autorisation IP du réseau privé VPC ou la liste d'autorisation IP publique.
-
Cliquez sur Configure à droite du groupe par défaut. Dans la boîte de dialogue qui s'affiche, ajoutez des adresses IP à la liste d'autorisation IP du réseau privé VPC ou à la liste d'autorisation IP publique. Vous pouvez ajouter jusqu'à 300 adresses IP ou blocs CIDR à un cluster. Séparez plusieurs entrées par une virgule (,) sans espace.
Vous pouvez également cliquer sur Add IP address whitelist Group pour créer un groupe personnalisé.
Les groupes de listes d'autorisation servent uniquement à la gestion des adresses IP et n'affectent pas les autorisations d'accès. Toutes les adresses IP de tous les groupes disposent des mêmes autorisations.
Type de configuration
Format et exemple
Remarques importantes
Format d'adresse IPv4
-
IP unique :
192.168.0.1 -
Bloc CIDR :
192.168.0.0/24
-
Refuser tout accès :
127.0.0.1 -
Autoriser tout accès :
0.0.0.0/0ImportantCela pose un risque de sécurité élevé. Nous vous recommandons vivement de ne pas configurer
0.0.0.0/0.Certaines versions de cluster (telles que 7,16 et 8,5) et certaines régions ne prennent pas en charge
0.0.0.0/0. Reportez-vous à l'interface utilisateur de la console ou aux messages d'erreur pour plus de détails.
Format d'adresse IPv6
(Pris en charge uniquement pour les clusters d'architecture de déploiement v2 dans la région Chine (Hangzhou))
-
IP unique :
2401:XXXX:1000:24::5 -
Bloc CIDR :
2401:XXXX:1000::/48
-
Refuser tout accès :
::1 -
Autoriser tout accès :
::/0ImportantCela pose un risque de sécurité élevé. Nous vous recommandons vivement de ne pas configurer
::/0.Certaines versions de cluster ne prennent pas en charge
::/0. Reportez-vous à l'interface utilisateur de la console ou aux invites de configuration pour plus de détails.
Cliquez sur OK.
Protocoles et certificats
Assurez-vous que la version du langage de votre client (Java, Python ou Go) correspond au runtime sous-jacent du cluster ES.
HTTPS public : utilise un certificat émis par une autorité de certification. Aucune configuration spéciale du client n'est nécessaire — connectez-vous directement via
https://.HTTPS privé : utilise un certificat auto-signé. Ignorez la vérification du certificat dans votre client comme indiqué ci-dessous.
Se connecter au cluster
Java
Installez Java Development Kit (JDK) 1.8 ou une version ultérieure.
-
Configurez les dépendances Maven.
ImportantDéfinissez
versionpour qu'elle corresponde à la version de votre cluster (8.17.0 dans cet exemple). Des valeurs deversionnon concordantes entraînent des échecs de résolution des dépendances.<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> Configurer les paramètres YML pour activer la création automatique d'index :
action.auto_create_index: true. L'exemple suivant crée un index nommé hr_test.
Exemple de connexion de base
S'applique aux connexions HTTPS publiques ou HTTP privées :
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}"));
// Use "https" for public HTTPS access or "http" for private HTTP access.
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) {
// Handle exceptions.
}
}
}
Exemple de connexion HTTPS privée
Pour HTTPS privé, ignorez la vérification du certificat :
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}"));
// Create an SSLContext that trusts all certificates.
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(null, (chain, authType) -> true) // Trust all certificates.
.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) // Set the SSLContext.
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE); // Skip hostname verification.
}
}).build();
ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
ElasticsearchClient elasticsearchClient = new ElasticsearchClient(transport);
// Perform operations.
System.out.println(elasticsearchClient.info());
transport.close();
restClient.close();
}
}
Python
Ces exemples utilisent ES 8.17.0. Remplacez par la version de votre cluster.
Exemple de connexion de base
S'applique aux connexions HTTPS publiques ou HTTP privées :
pip install elasticsearch==8.17.0from elasticsearch import Elasticsearch
es = Elasticsearch(
hosts=['https://<YourEsHost>:9200'], # Use 'https://' for public HTTPS access or 'http://' for private HTTP access.
basic_auth=('<UserName>', '<YourPassword>'),
)
print(es.info())
Exemple de connexion HTTPS privée
from elasticsearch import Elasticsearch
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Disable SSL warnings (optional).
es = Elasticsearch(
hosts=['https://<YourEsHost>:9200'],
basic_auth=('<UserName>', '<YourPassword>'),
verify_certs=False, # Skip certificate verification.
ssl_show_warn=False, # Disable SSL warnings.
)
print(es.info())
Go
Ces exemples utilisent le client Elasticsearch Go pour les clusters ES 8.x.
Exemple de connexion de base
S'applique aux connexions HTTPS publiques ou HTTP privées :
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"}, // Use "https://" for public HTTPS access or "http://" for private HTTP access.
Username: "<UserName>",
Password: "<YourPassword>",
}
es, _ := elasticsearch.NewClient(cfg)
res, _ := es.Info()
defer res.Body.Close()
log.Println(res)
}
Exemple de connexion HTTPS privée
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}, // Skip certificate verification.
},
}
es, _ := elasticsearch.NewClient(cfg)
res, _ := es.Info()
defer res.Body.Close()
log.Println(res)
}
Paramètres
|
Paramètre |
Description |
|
UserName |
Le nom d'utilisateur par défaut est Évitez d'utiliser ce compte en production. Créez des rôles personnalisés avec des autorisations fines en utilisant Gérer les autorisations des utilisateurs à l'aide des rôles Elasticsearch X-Pack. |
|
YourPassword |
Le mot de passe pour le |
|
https |
Le protocole d'accès. HTTP est activé par défaut. Par mesure de sécurité, activez HTTPS manuellement. Dans la console Elasticsearch, accédez à la page Basic Information de votre instance, puis choisissez Configuration and Management > Security Settings pour activer HTTPS. Important
|
|
YourEsHost |
Le point de terminaison du cluster (VPC ou public) indiqué dans la section Prérequis :
|
|
9200 |
Le port d'accès au cluster. Par défaut : 9200 pour l'accès VPC et public. |
FAQ
Si l'état du cluster est sain mais que le client ne peut pas se connecter, dépannez en utilisant les méthodes suivantes.
Diagnostic de la table de routage
Si une connexion ES échoue au sein du même VPC, vérifiez la table de routage. L'installation de Docker modifie les informations de routage, ce qui peut entraîner l'absence de routes vers le segment de réseau ES ou leur orientation vers une passerelle incorrecte. Exécutez la commande suivante sur l'instance ECS pour afficher la table de routage :
route -n
Vérifiez si une route vers le segment de réseau ES existe dans la sortie. Si la route est manquante ou si la passerelle est incorrecte, corrigez la configuration de routage et réessayez la connexion. Vérifiez également si un pare-feu d'entreprise bloque le trafic vers le segment de réseau ES.
Vérification du domaine et du port
Utilisez la commande curl pour vérifier que le domaine et le port sont correctement spécifiés :
curl -u {UserName}:{YourPassword} https://{YourEsHost}:9200
Une réponse « Could not resolve host » indique une erreur de frappe dans le nom de domaine. Les erreurs courantes incluent des caractères manquants dans le nom de domaine ou l'omission du numéro de port.
Configuration du paramètre de délai d'expiration du client
Le client Java ne définit pas de délai d'expiration de connexion ou de socket par défaut. Sur des réseaux instables, les connexions peuvent se bloquer indéfiniment. Utilisez setRequestConfigCallback pour configurer les paramètres de délai d'expiration :
RestClient restClient = RestClient.builder(new HttpHost("{YourEsHost}", 9200, "https"))
.setRequestConfigCallback(builder -> builder
.setConnectTimeout(10000)
.setSocketTimeout(30000))
.setHttpClientConfigCallback(httpClientBuilder ->
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider))
.build();
ConnectTimeout contrôle le temps d'attente pour l'établissement d'une connexion — défini à 10 000 millisecondes (10 secondes). SocketTimeout contrôle le temps d'attente pour la lecture des données — défini à 30 000 millisecondes (30 secondes). Ajustez ces valeurs en fonction de votre environnement réseau.