Mon installation AWS actuelle est une fonction lambda qui est déclenchée chaque fois que je place un objet dans un compartiment S3. J'ai implémenté la fonction de gestionnaire de lambda en Java. Ce que je veux faire, c'est simplement accéder au fichier qui a été téléchargé et déclencher l'exécution de la fonction lambda. Par exemple, si je télécharge sample.json
dans le compartiment, je veux accéder au contenu de ce fichier dans ma fonction gestionnaire.Comment lire le fichier téléchargé qui a directement déclenché l'exécution de lambda?
Je sais que je peux faire quelque chose comme ceci:
public Void handleRequest(S3Event input, Context context) {
for (S3EventNotificationRecord record : input.getRecords()) {
String key = record.getS3().getObject().getKey();
String bucket = record.getS3().getBucket().getName();
AmazonS3 s3Client = new AmazonS3Client(credentials);
try {
S3Object s3Object = s3Client.getObject(new GetObjectRequest(bucket, key));
InputStream input = s3Object.getObjectContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
while (true) {
String line = reader.readLine();
if (line == null) break;
// Do something with line...
}
// ...
Le problème est que je ne suis pas autorisé à utiliser les touches d'accès. Ainsi, je ne peux pas créer un s3Client
pour télécharger le fichier avec. En d'autres termes, je dois obtenir l'objet de l'argument que ma méthode de gestionnaire prend, c'est-à-dire, S3Event input
. Comment ferais-je cela?
Lambda n'a pas besoin de clés d'accès à utiliser S3. – dashmug
@dashmug J'ai pensé que. Mais comment puis-je lire le fichier? Puis-je l'obtenir depuis 'S3Event input'? –
's3Client.getObject (new GetObjectRequest (bucket, key));' semble être une bonne approche. Qu'est-ce qui ne va pas avec ça? – cy3er