2

Je suis relativement nouveau sur AWS Lambda, alors peut-être que c'est trivial mais je ne l'ai pas encore compris. Je voudrais retourner les données JSON la même chose que je peux le retourner comme un rappel en réponse à une demande API Gateway. Le problème que j'ai, c'est que je voudrais traiter une image qu'un utilisateur télécharge et renvoyer le résultat de ce traitement à l'utilisateur au format JSON. Je sais que je peux créer des fonctions Lambda qui répondent aux téléchargements S3 (triggers), mais je ne peux pas retourner les données à l'utilisateur de cette façon.Retour JSON en réponse à S3 Upload

+0

Vous devez inclure des exemples de code. –

Répondre

2

Vous pouvez être en mesure d'implémenter cela comme une opération synchrone unique. Si les images sont inférieures à 10 Mo, vous devriez pouvoir créer une fonction Lambda pour accepter l'image, la télécharger sur S3, la traiter et renvoyer les données à l'utilisateur. Cela suppose également que vous pouvez télécharger vers S3 et traiter l'image dans les 29 secondes, ce qui est le délai maximum avant qu'API Gateway expire la demande.

Si cela ne fonctionne pas pour vous, vous devrez passer au traitement asynchrone. Vous pouvez avoir une fonction Lambda qui répond à l'événement de téléchargement S3 et effectue le traitement et écrit les résultats dans une table dans DynamoDB, RDS ou Aurora. Vous pouvez ensuite exposer une méthode API Gateway pour vérifier le traitement terminé et obtenir les résultats. Le client devrait alors interroger cette méthode API Gateway.

1

Je recommande une autre approche:

  1. let the browser do the upload to S3 directement en utilisant javascript
  2. subscribe your lambda function to S3 events dans ce seau
  3. laisser l'ongle du pouce de la fonction Lambda l'image et enregistrer la vignette résultant de nouveau dans S3 sur la base d'une dénomination convention, par exemple si votre image est someimage.jpg vous pourriez l'enregistrer comme someimage-thumb.jpg.
  4. Une fois le chargement terminé, laissez le client javascript interroger le compartiment S3 dans une boucle jusqu'à ce que la vignette existe et s'affiche.

Cette méthode se traduira par un téléchargement plus rapide, une meilleure expérience utilisateur et devrait être extrêmement fiable.

============================================== ===

Si vous voulez réellement utiliser la passerelle API, cela est possible car les données binaires sont now supported. Vous pouvez recevoir les données de votre fonction sous forme de code binaire ou base64. Vous pouvez répondre avec une réponse, y compris les base64 image traitée et des méta-données, par exemple:

{ 
    "thumbnail": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wlseKgAAAABJRU5ErkJggg==", 
    "metadataKey1": "some data", 
    "metadataKey2": "some other data" 
} 

Les inconvénients ici:

  1. Le temps de télécharger sera plus lent que nous introduisons un goulot d'étranglement .
  2. Beaucoup plus de traitement est nécessaire, en particulier si de grandes images doivent être converties en base64.
  3. Le navigateur travaillera plus dur pour rendre l'image traitée.