如何获取Spring Boot 3连接AWS OpenSearch的指导文档?
Spring Boot 3 集成 AWS OpenSearch 实操指引
1. 依赖配置
AWS OpenSearch兼容Elasticsearch API,因此可以直接使用Spring Data Elasticsearch进行集成。以下是适配Spring Boot 3的依赖配置:
Maven(pom.xml)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>opensearch</artifactId> <version>2.20.0</version> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>auth</artifactId> <version>2.20.0</version> </dependency>
Gradle(build.gradle)
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' implementation 'software.amazon.awssdk:opensearch:2.20.0' implementation 'software.amazon.awssdk:auth:2.20.0'
2. 连接配置
在application.yml或application.properties中配置OpenSearch端点、AWS区域及认证信息:
spring: elasticsearch: uris: "https://your-opensearch-endpoint.us-east-1.es.amazonaws.com" ssl: verification-mode: none # 测试环境可关闭,生产建议开启证书验证 aws: region: us-east-1
认证说明:
- 如果部署在AWS EC2/ECS/EKS上,可直接使用IAM角色认证,无需配置access key(SDK会自动获取实例角色凭证)。
- 本地测试可通过环境变量
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY注入IAM用户凭证。
3. 自定义客户端Bean
创建配置类,生成带有AWS签名支持的OpenSearch客户端:
import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.json.jackson.JacksonJsonpMapper; import co.elastic.clients.transport.rest_client.RestClientTransport; import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.opensearch.OpenSearchClient; @Configuration public class OpenSearchConfig { @Value("${spring.elasticsearch.uris}") private String opensearchEndpoint; @Value("${aws.region}") private String awsRegion; // AWS原生OpenSearch客户端(用于管理集群等操作) @Bean public OpenSearchClient awsOpenSearchClient() { return OpenSearchClient.builder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.of(awsRegion)) .build(); } // Spring Data Elasticsearch兼容客户端(用于数据CRUD) @Bean public ElasticsearchClient elasticsearchClient() { RestClient restClient = RestClient.builder(HttpHost.create(opensearchEndpoint)).build(); RestClientTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper()); return new ElasticsearchClient(transport); } }
4. 实体类与Repository
实体类定义
用@Document注解指定索引名称,字段用@Field定义类型:
import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; @Document(indexName = "products") public class Product { @Id private String id; @Field(type = FieldType.Text) private String name; @Field(type = FieldType.Double) private Double price; // getter、setter、构造方法省略 }
Repository接口
继承ElasticsearchRepository实现基础CRUD,也可自定义查询方法:
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import java.util.List; public interface ProductRepository extends ElasticsearchRepository<Product, String> { // 根据名称模糊查询 List<Product> findByNameContaining(String keyword); }
5. 业务层调用示例
在Service中注入Repository或客户端进行数据操作:
import org.springframework.stereotype.Service; import java.util.List; @Service public class ProductService { private final ProductRepository productRepository; public ProductService(ProductRepository productRepository) { this.productRepository = productRepository; } public Product saveProduct(Product product) { return productRepository.save(product); } public List<Product> searchProducts(String keyword) { return productRepository.findByNameContaining(keyword); } }
关键注意事项
- IAM权限:确保操作OpenSearch的IAM实体(用户/角色)拥有
es:ESHttpPut、es:ESHttpGet等必要权限,可通过AmazonOpenSearchServiceFullAccess策略快速配置(生产建议细粒度授权)。 - 版本兼容:Spring Boot 3对应Spring Data Elasticsearch 5.x,需匹配AWS OpenSearch版本(OpenSearch 3.x对应Elasticsearch 8.x,2.x对应Elasticsearch 7.x)。
- VPC访问:若OpenSearch部署在VPC内,Spring Boot应用需部署在同一VPC,或配置VPC端点、NAT网关实现访问。
内容的提问来源于stack exchange,提问作者Chris Park
相关产品推荐
相关产品推荐

