web-dev-qa-db-fra.com

AWS serverless-image-handler v3.x interrompu par des modifications apportées à l'environnement d'exécution AWS Lambda

Nous utilisions la version v3 du gestionnaire d'images sans serveur AWS pour le traitement des images de notre site. Cependant, lorsque AWS a publié cette mise à jour , le tout était cassé. Malheureusement, la nouvelle version (v4) ne fonctionne pas avec les demandes de style Thumbor pour les raisons suivantes:

Comment puis-je être opérationnel sur la nouvelle version du gestionnaire d'images sans serveur AWS sans avoir à apporter de modifications majeures à mon application (c'est-à-dire que je voudrais continuer à utiliser la demande de style Thumbor, mais avec la version 4 de l'image sans serveur -handler)?

10
soupy1976

J'ai remarqué que beaucoup d'autres personnes avaient le même problème que celui-ci, alors j'espère que ces notes aideront les gens à régler leurs problèmes.

Avec un certain travail sur la fonction de gestion d'image lambda sur la nouvelle v4 de cette pile, je la fais maintenant fonctionner de manière satisfaisante avec les requêtes de style Thumbor, et je n'ai pas eu besoin de changer la façon dont mon application demande des images.

Veuillez noter que certains des correctifs ici sont limités en ce que nous n'utilisons qu'un sous-ensemble de fonctionnalités Thumbor, nous n'avons donc corrigé que ce dont nous avions besoin. Il se peut que vous utilisiez des options que nous ne proposons pas et qui peuvent également nécessiter un codage supplémentaire ou différent pour fonctionner.

Une fois que vous avez déployé la version 4 de la pile de gestionnaire d'images sans serveur AWS, la seule chose que vous devez modifier est la Lambda 'ImageHandlerFunction' pour votre pile qui a été créée par la formation du cloud. Voici quelques pointeurs rapides pour effectuer des mises à jour:

  • Localisez ImageHandlerFunction dans Lambda, allez-y et cliquez sur Actions -> Fonction d'exportation -> Télécharger le package de déploiement

  • Cela téléchargera un fichier Zip contenant tout le code du gestionnaire d'images. Extrayez tous les fichiers de ce Zip.

  • Vous pouvez maintenant commencer à apporter des modifications au code. Vous pouvez exécuter les tests unitaires en utilisant mocha si vous le souhaitez.

  • Une fois que vous avez apporté des modifications au code, vous devez créer un nouveau Zip avec tous les fichiers dans

  • Vous devez télécharger votre nouveau package de déploiement sur S3 avant de pouvoir mettre à jour ImageHandlerFunction (il est trop gros pour être téléchargé directement)

  • Une fois que vous avez téléchargé quelque part sur S3, accédez à ImageHandlerFunction dans lambda et sélectionnez les options s3 dans le type d'entrée de code. Entrez le lien vers le fichier Zip sur S3, puis cliquez sur enregistrer en haut de la page.

  • Vous pouvez maintenant tester votre fonction mise à jour. N'oubliez pas que les réponses sont mises en cache sur cloudfront, vous devrez donc peut-être créer et invalider sur cloudfront pour la tester, ou utiliser une nouvelle image qui n'est pas encore mise en cache.

En ce qui concerne la résolution des problèmes mentionnés ci-dessus:

Pour le faire fonctionner avec des images dans des sous-dossiers , pas seulement la racine du compartiment S3: Voir ma solution ici - en gros vous besoin de changer cela:

    const key = (event["path"]).split("/");
    return key[key.length - 1];

La solution que j'ai utilisée, y compris les tests unitaires, est dans le commentaire github ci-dessus. Vous pouvez avoir besoin d'une solution légèrement différente.

Pour faire fonctionner le hachage de sécurité , voir mon correctif ici

Pour faire fonctionner automatiquement le support webp , voir ma correction ici

En ce qui concerne la correction du mappage entre Thumbor et la demande d'image json, cela a nécessité quelques modifications mineures, mais ce n'était pas vraiment un gros problème. Il est probablement préférable de le faire en fonction de vos propres exigences, car mes correctifs étaient assez spécifiques à mon utilisation. J'essaierai d'ajouter quelques notes aux tickets github pertinents.

5
soupy1976