9
votes

AWS Lambda ne fonctionne pas avec le module GM

J'utilise AWS Lambda pour redimensionner mon image dans S3 Bucket dans des variantes de taille différentes à l'aide de nœud JS lorsqu'une image est mettre dans le S3 Sucket .

C'était le travail jusqu'à hier. Aujourd'hui, lorsque j'utilise la même fonction Lambda, j'obtiens l'erreur suivante: p> xxx pré>

Je suis incapable de comprendre pourquoi ce phénomène s'est produit. Toutes les fonctions données de ma fonction Lambda ci-dessous sont dans ASYNC Waterfall pour calculer d'abord le rapport de format, puis convertir le image dans différentes variantes de taille. P>

var request=require("request");

function getTheAspectRatio(callback) {
    gm(s3Url) // I am constructing the image url in the AWS Lambda Function.
        .size(function(err, size) {
            if (!err) {
                //Calculate the Aspect ratio
            } else if (err) {
                //Give Back the Error
              }
        });
}

function getTheImageBuffer(callback) {
    request(imageUrl, function(err, res, res1) {
        if (err) {
            callback(err);
        } else {
            buffer = res1;
            console.log("got the BUffer");
            callback(null);
        }

    });
}

function convertToThumbNail(callback) {
    //Convert to Thumbnail Image
}


function convertToFull(callback) {
    //Convert to Full Image
}

function convertToBadge(callback) {
   //Convert to Badge image

}


1 commentaires

En lisant simplement le message d'erreur, il apparaît que la fonction Lambda n'a plus accès au godet S3.


5 Réponses :


-1
votes

Il semble que votre fonction Lambda n'a pas accès à votre godet S3. Assurez-vous que votre fonction a une politique Selon IAM appliquée, E.g.:

var gm = require("gm").subClass({ imageMagick: true });

, ce que votre problème n'a rien à voir avec GraphicsMagick, veuillez noter que AWS Lambda est livré avec ImageMagick installé. Donc, à moins que vous fournissez vous-même les exécutables GraphicsMagick, assurez-vous d'utiliser la sous-classe ImageMagic: P>

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    }]
}


0 commentaires

14
votes

J'ai eu exactement le même message d'erreur sur un processus qui avait été sans faille pendant les 5 dernières semaines. Après avoir parlé avec AWS Support aujourd'hui, j'ai été informé que l'appui de la bibliothèque indigène pour ImageMagick a été supprimé de AWS Lambda en raison de la vulnérabilité qui a été trouvée récemment documentée ici https: // ImageTragick.com/ .

On m'a dit que je devais reconstruire ma fonction Lambda et mener à ma propre version de la bibliothèque natale - https://aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/

Le représentant du support a confirmé qu'il n'y avait pas eu d'annonce publique de ce changement.

TLDR: Si vous utilisiez une fonction AWS Lambda dépendant de la version fournie dans la version de ImageMagick, à partir du 05/04/2016, il est maintenant cassé et ne fonctionnera probablement pas tant que vous redéployez votre propre Version maintenue de la bibliothèque. Que le quatrième soit avec vous ...


1 commentaires

Avez-vous une source pour une construction compatible Lambda? Serait bien de ne pas avoir à en créer un moi-même.



3
votes

Mitch Shields est correct, vous devez maintenant construire / le déployer vous-même sur AWS Lambda.

J'ai construit une version qui fonctionne pour mon projet et un outil NodeJS qui le téléchargera sur l'instance Lambda. Le Tarbal construit est ~ 85 Mo, qui est trop grand pour emballer avec votre code, vous devez donc la télécharger sur Lambda avant de courir. Il est stocké dans / TMP / ImageMagick , Lambda tente de mettre en cache le dossier / tmp / , vous n'avez donc pas besoin de le télécharger sur chaque course.

Page GitHub: https://github.com/doudedor/imagemagick-prebuilt

Vérifiez les versions de la crevaison de la construction ImageMagick https://github.com/doudedor/ ImageMagick-Prebuilt / Communiqués


0 commentaires

1
votes

Selon la documentation AWS: HTTP : //docs.aws.amazon.com/PT_BR/LAMBDA/LATEST/DG/CURRENT-SUPPORTED-VERSIONS.HTML AWS Lambda supportant toujours ImageMagick.

Cependant, j'ai eu le même problème il y a quelques jours, avec un projet qui travaillait sans faille. Comme le problème du message d'erreur semble être un conflit d'autorisation tout en essayant de lire le godet S3 plutôt qu'un problème ImageMagick.

Vous pouvez essayer de changer les autorisations de seau faire un godet public à Amazon S3 < / a>.

Alternativement en tant que solution de contournement, vous pouvez toujours bloquer les fichiers image avec votre fichier Lambda et éviter de telles conflits.


0 commentaires

1
votes

https://alas.aws.amazon.com/alas-2016- 699.html

"Remarque: cette mise à jour contient un fichier mis à jour /etc/imagemagick/policy.xml qui désactive les codeurs éphémères, HTTPS, HTTP, URL, FTP, MVG, MSL, MVG, MSL, Texte et Étiquette"

J'ai changé d'appel de gm (my_url) à gm (demande (my_url)) et les choses semblent fonctionner à nouveau. I.E I Envoyer un flux à partir d'une demande () Appelez à ImageMagick au lieu de laisser ImageMagick essayer de télécharger l'image (qui est désactivé dans la stratégie de ImageMagick. XXML, un fichier que je ne puisse pas modifier).


0 commentaires