How to manually invoke snapshot endpoint for ElasticSearch using JestClient

148 Views Asked by At

I'm already using JestClinet for all my CRUD operations on my ES on AWS. Now I'm trying to snapshot my ES as described in https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-request-signing.html

Instead of using another RestClient, I'm wondering if I can use my existing JestClient.

1

There are 1 best solutions below

0
On

I couldn't find a way to use JestClient, using RestClient as below:

String snapshotPath = "/_snapshot/my_repot/snapshot1?wait_for_completion=true";
HttpEntity entity = new NStringEntity("{}", ContentType.APPLICATION_JSON);
Header header = new BasicHeader("Content-Type", "application/json");

try{
  final AWSSigner awsSigner = new AWSSigner(awsAuthProvider, region, "es",
    () -> LocalDateTime.now(ZoneOffset.UTC));
  final AWSSigningRequestInterceptor requestInterceptor = new AWSSigningRequestInterceptor(awsSigner);

  RestClient restClient = RestClient.builder(HttpHost.create(elasticUrl))
        .setRequestConfigCallback(rcc -> rcc.setSocketTimeout(15 * 60 * 1000))
        .setHttpClientConfigCallback(hacb -> hacb.addInterceptorLast(requestInterceptor))
        .setMaxRetryTimeoutMillis(15 * 60 * 1000)
        .build();
  response = restClient.performRequest("PUT", snapshotPath, Collections.emptyMap(), entity, header);

  if(200 == response.getStatusLine().getStatusCode()) {     
    return true;
  }else {       
    return false;
  }
}catch(IOException e) {
  return false;
}