9

画像が s3 バケットに配置されるときに、 AWS Lambdaを使用して、ノード js を使用してs3 バケット内の画像のサイズをさまざまなサイズのバリアントに変更しています

昨日まで稼働していました。今日、同じラムダ関数を使用すると、次のエラーが発生します。

{
"errorMessage": "Command failed: identify: not authorized `//bucketname.s3.amazonaws.com/imagename.jpg' @ error/constitute.c/ReadImage/454.\n",
"errorType": "Error",
"stackTrace": [
    "",
    "ChildProcess.proc.on.onExit (/var/task/node_modules/gm/lib/command.js:297:17)",
    "emitTwo (events.js:87:13)",
    "ChildProcess.emit (events.js:172:7)",
    "maybeClose (internal/child_process.js:821:16)",
    "Socket.<anonymous> (internal/child_process.js:319:11)",
    "emitOne (events.js:77:13)",
    "Socket.emit (events.js:169:7)",
    "Pipe._onclose (net.js:469:12)"
    ]
}

なぜこの現象が発生したのか理解できません。以下のラムダ関数の指定されたすべての関数は、非同期のウォーターフォールにあり、最初にアスペクト比を計算してから、画像をさまざまなサイズのバリアントに変換します。

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

}

誰かが問題のデバッグを手伝ってくれますか? 私は過去 3 時間、これに行き詰まっています。私の AWS Lambda は東京リージョンにあります。

4

5 に答える 5

14

過去 5 週間問題なく実行されていたプロセスで、まったく同じエラー メッセージが表示されました。本日、AWS サポートと話をしたところ、 https: //imagetragick.com/ で最近発見された脆弱性が原因で、Imagemagick のネイティブ ライブラリ サポートが AWS Lambda から削除されたことが通知されました。

Lambda 関数を再構築し、独自のバージョンのネイティブ ライブラリにバンドルする必要があると言われました - https://aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/

サポート担当者は、この変更の公式発表がなかったことを確認しました。

TLDR: バンドルされているバージョンの Imagemagick に依存する AWS Lambda 関数を使用していた場合、2016 年 5 月 4 日現在、それは壊れており、独自に構築および維持されたバージョンの Imagemagick を再デプロイするまでおそらく機能しません。図書館。四代目があなたと共にありますように...

于 2016-05-05T21:06:40.293 に答える
1

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

「注: この更新には、EPHEMERAL、HTTPS、HTTP、URL、FTP、MVG、MSL、TEXT、および LABEL コーダーを無効にする更新された /etc/ImageMagick/policy.xml ファイルが含まれています」

通話を から に変更したgm(my_url)ところ、gm(request(my_url))正常に動作しているようです。つまり、ImageMagick にイメージのダウンロードを試行させる代わりに、request() 呼び出しからストリームを ImageMagick に送信します (これは、ImageMagick の policy.xml で無効にされており、変更できないファイルです)。

于 2016-07-01T02:27:57.223 に答える
1

AWS のドキュメントによると: http://docs.aws.amazon.com/pt_br/lambda/latest/dg/current-supported-versions.html AWS Lambda はまだ imagemagick をサポートしています。

しかし、私は数日前に同じ問題を抱えていました。プロジェクトは完璧に機能していました。エラー メッセージが表示されるのは、imagemagick の問題ではなく、S3 バケットを読み取ろうとする際のアクセス許可の競合のようです。

Amazon S3 でバケットを公開するバケットのアクセス許可を変更してみてください。

別の回避策として、イメージ ファイルをラムダ ファイルと一緒にいつでも圧縮して、そのような権限の競合を回避することができます。

于 2016-06-06T14:30:07.903 に答える