You would probably be better off implementing your own controller service with the same interface.
On Wed, Sep 9, 2020 at 10:13 PM sanjeet rath <rath.sanj...@gmail.com> wrote: > > Thank you MIke for the quick reply. > I was really struggling with this functionality. > i have gone through the code ,what i understood is i should use the > "nifi-elastic-search-restapi-processor" project. > > In it the JsonQueryelasticSearch processor, it uses the "Client Service" > Controller service. and i need to modify this controler. service to use AWS > shared code which i shared with you in the trailed mail chain. > > Is my understanding is correct ? > > Regards, > Sanjeet > > > > On Thu, Sep 10, 2020 at 3:18 AM Mike Thomsen <mikerthom...@gmail.com> wrote: >> >> Sanjeet, >> >> As provided, this won't integrate well with the existing NiFi >> processors. You would need to implement it as a controller service >> object and update the processors to use it. Also, if you want to use >> processors based on the official Elasticsearch client API, the ones >> under the "REST API bundle" are the best fit because they already use >> controller services that use the official Elastic clients. >> >> Thanks, >> >> Mike >> >> On Wed, Sep 9, 2020 at 12:14 PM sanjeet rath <rath.sanj...@gmail.com> wrote: >> > >> > Hi , >> > >> > We are using AWS managed ElasticSearch and our nifi is hosted in EC2. >> > I have a use case of building a custom processor on top of >> > putElasticSearchHTTP, where it will use aws IAM based role >> > awscredentialprovider service to connect AWS ElasticSearch. >> > This will be similar to PUTSQS where we are using IAM role based >> > awscredentialprovider service to connect SQS and its working fine. >> > >> > But there is no awscredentailprovider controller service is available in >> > putElasticSearchHTTP. >> > >> > So my plan is adding a awscredentailprovider controller service to >> > putElasticSearchHTTP , where i will use bellow code to connect to >> > elasticsearch. >> > >> > Is my approach correct ? Could you provide any better thought on this ? >> > >> > public class AmazonElasticsearchServiceSample { private static String >> > serviceName = "es"; private static String region = "us-west-1"; private >> > static String aesEndpoint = "https://domain.us-west-1.es.amazonaws.com"; >> > private static String payload = "{ \"type\": \"s3\", \"settings\": { >> > \"bucket\": \"your-bucket\", \"region\": \"us-west-1\", \"role_arn\": >> > \"arn:aws:iam::123456789012:role/TheServiceRole\" } }"; private static >> > String snapshotPath = "/_snapshot/my-snapshot-repo"; private static String >> > sampleDocument = "{" + "\"title\":\"Walk the Line\"," + >> > "\"director\":\"James Mangold\"," + "\"year\":\"2005\"}"; private static >> > String indexingPath = "/my-index/_doc"; static final >> > AWSCredentialsProvider credentialsProvider = new >> > DefaultAWSCredentialsProviderChain(); public static void main(String[] >> > args) throws IOException { RestClient esClient = esClient(serviceName, >> > region); // Register a snapshot repository HttpEntity entity = new >> > NStringEntity(payload, ContentType.APPLICATION_JSON); Request request = >> > new Request("PUT", snapshotPath); request.setEntity(entity); // >> > request.addParameter(name, value); // optional parameters Response >> > response = esClient.performRequest(request); >> > System.out.println(response.toString()); // Index a document entity = new >> > NStringEntity(sampleDocument, ContentType.APPLICATION_JSON); String id = >> > "1"; request = new Request("PUT", indexingPath + "/" + id); >> > request.setEntity(entity); // Using a String instead of an HttpEntity sets >> > Content-Type to application/json automatically. // >> > request.setJsonEntity(sampleDocument); response = >> > esClient.performRequest(request); System.out.println(response.toString()); >> > } >> > public static RestClient esClient(String serviceName, String region) { >> > AWS4Signer signer = new AWS4Signer(); signer.setServiceName(serviceName); >> > signer.setRegionName(region); HttpRequestInterceptor interceptor = new >> > AWSRequestSigningApacheInterceptor(serviceName, signer, >> > credentialsProvider); return >> > RestClient.builder(HttpHost.create(aesEndpoint)).setHttpClientConfigCallback(hacb >> > -> hacb.addInterceptorLast(interceptor)).build(); } >> > https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-request-signing.html >> > >> > >> > >> > Regards, >> > Sanjeet >> > >> > -- >> > Sanjeet Kumar Rath, >> > mob- +91 8777577470 >> > > > > > -- > Sanjeet Kumar Rath, > mob- +91 8777577470 >