Notification d’événement AWS S3 à l’aide de la fonction Lambda en Java

J’essaie d’utiliser la fonction Lambda pour la notification d’événement S3 Put. Ma fonction Lambda doit être appelée une fois que j’ai ajouté / ajouté un nouveau fichier JSON dans mon compartiment S3. Le problème que je me pose est qu’il n’ya pas assez de documents pour implémenter une telle fonction Lambda en Java. La plupart des documents que j’ai trouvés sont pour Node.js

Je veux, ma fonction Lambda doit être appelée, puis à l’intérieur de cette fonction Lambda, je veux utiliser ce json ajouté, puis envoyer ce JSON au service AWS ES.

Mais quelles sont toutes les classes que je devrais utiliser pour cela? Quelqu’un a une idée à ce sujet? S3 et ES sont tous configurés et en cours d’exécution. Le code généré automatiquement pour lambda est `

@Override public Object handleRequest(S3Event input, Context context) { context.getLogger().log("Input: " + input); // TODO: implement your handler return null; } 

Quelle est la prochaine ??

Il est possible de gérer les événements S3 dans Lambda, mais il ne faut pas oublier que l’object S3Event transporte uniquement la référence à l’object et non à l’object lui-même. Pour accéder à l’object réel, vous devez appeler le kit SDK AWS vous-même. Demander un object S3 dans une fonction lambda ressemblerait à ceci:

 public Object handleRequest(S3Event input, Context context) { AmazonS3Client s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain()); for (S3EventNotificationRecord record : input.getRecords()) { Ssortingng s3Key = record.getS3().getObject().getKey(); Ssortingng s3Bucket = record.getS3().getBucket().getName(); context.getLogger().log("found id: " + s3Bucket+" "+s3Key); // resortingeve s3 object S3Object object = s3Client.getObject(new GetObjectRequest(s3Bucket, s3Key)); InputStream objectData = object.getObjectContent(); //insert object into elasticsearch } return null; } 

Maintenant, la partie plutôt difficile d’insérer cet object dans ElasticSearch. Malheureusement, le SDK AWS ne fournit aucune fonction pour cela. L’approche par défaut consiste à effectuer un appel REST sur le sharepoint terminaison AWS ES. Il existe divers exemples sur la procédure à suivre pour appeler une instance ElasticSearch.

Certaines personnes semblent aller avec le projet suivant:

Jest – Elasticsearch Java Rest Client

Enfin, voici les étapes pour l’intégration S3 -> Lambda -> ES avec Java.

  1. Faites créer vos S3, Lamba et ES sur AWS. Les étapes sont ici .
  2. Utilisez le code Java ci-dessous dans votre fonction lambda pour extraire un object nouvellement ajouté dans S3 et l’envoyer au service ES.

     public Object handleRequest(S3Event input, Context context) { AmazonS3Client s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain()); for (S3EventNotificationRecord record : input.getRecords()) { Ssortingng s3Key = record.getS3().getObject().getKey(); Ssortingng s3Bucket = record.getS3().getBucket().getName(); context.getLogger().log("found id: " + s3Bucket+" "+s3Key); // resortingeve s3 object S3Object object = s3Client.getObject(new GetObjectRequest(s3Bucket, s3Key)); InputStream objectData = object.getObjectContent(); //Start putting your objects in AWS ES Service Ssortingng esInput = "Build your JSON ssortingng here using S3 objectData"; HttpClient httpClient = new DefaultHttpClient(); HttpPut putRequest = new HttpPut(AWS_ES_ENDPOINT + "/{Index_name}/{product_name}/{unique_id}" ); SsortingngEntity input = new SsortingngEntity(esInput); input.setContentType("application/json"); putRequest.setEntity(input); httpClient.execute(putRequest); httpClient.getConnectionManager().shutdown(); } return "success";} 
  3. Utilisez Postman ou Sense pour créer l’index réel et le mappage correspondant dans ES.

  4. Une fois cela fait, téléchargez et exécutez proxy.js sur votre ordinateur . Assurez-vous de configurer les étapes de sécurité ES suggérées dans cet article.

  5. Testez la configuration et Kibana en exécutant http: // localhost: 9200 / _plugin / kibana / URL à partir de votre ordinateur .

  6. Tout est réglé. Allez-y et configurez votre tableau de bord à Kibana. Testez-le en ajoutant de nouveaux objects dans votre compartiment S3.