You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Spring Boot配置ClientConfiguration连接AWS Elasticsearch(基础认证)

问题描述

已成功部署AWS Elasticsearch,可通过终端curl命令(携带基础认证信息)完成操作:

curl -XPUT -u 'admin:xxxx'
    'https://search-xxxxxxx-xxxxxxu.eu-west-1.es.amazonaws.com/xxxxx/_doc/1'
     -d '{"name": "product", "description": "crema..."}' -H 'Content-Type: application/json'

项目已引入依赖:

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

本地连接Elasticsearch的配置可正常运行:

@Configuration
public class ElasticClient extends ElasticsearchConfiguration {
    
    @Override
    public ClientConfiguration clientConfiguration() {
       
        return ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .build();
    }
}

尝试多种配置(包括已弃用的RestHighLevelClient)均无法连接AWS Elasticsearch,想确认能否像curl那样通过Spring Boot结合基础HTTP认证实现连接,需获取正确的clientConfiguration()配置代码。

解决方案

完全可以通过基础HTTP认证连接AWS Elasticsearch,只需在ClientConfiguration中添加认证信息并启用HTTPS协议即可,修改后的配置如下:

@Configuration
public class ElasticClient extends ElasticsearchConfiguration {
    
    @Override
    public ClientConfiguration clientConfiguration() {
        // 替换为你的AWS ES端点(无需带https://前缀)
        String awsEsEndpoint = "search-xxxxxxx-xxxxxxu.eu-west-1.es.amazonaws.com";
        // 替换为你的基础认证用户名和密码
        String username = "admin";
        String password = "xxxx";

        return ClientConfiguration.builder()
                .connectedTo(awsEsEndpoint)
                // AWS ES默认使用HTTPS,必须启用SSL配置
                .usingSsl()
                // 对应curl命令中的-u参数,添加基础HTTP认证
                .withBasicAuth(username, password)
                .build();
    }
}

关键配置说明

  • usingSsl():AWS Elasticsearch默认采用HTTPS协议,必须启用SSL,否则会连接失败
  • withBasicAuth(username, password):直接对应curl命令中的基础认证参数,完成身份校验
  • connectedTo():传入AWS ES的端点地址时,不要带https://前缀,ClientConfiguration会结合SSL配置自动处理协议

如果希望从配置文件读取参数(更符合Spring Boot最佳实践),可修改为如下形式:

@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticClient extends ElasticsearchConfiguration {

    private String endpoint;
    private String username;
    private String password;

    @Override
    public ClientConfiguration clientConfiguration() {
        return ClientConfiguration.builder()
                .connectedTo(endpoint)
                .usingSsl()
                .withBasicAuth(username, password)
                .build();
    }

    // 生成getter和setter方法
    public String getEndpoint() {
        return endpoint;
    }

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

随后在application.yml中添加配置:

elasticsearch:
  endpoint: search-xxxxxxx-xxxxxxu.eu-west-1.es.amazonaws.com
  username: admin
  password: xxxx

内容的提问来源于stack exchange,提问作者chiarotto.alessandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:11:46