11

FTPのファイルをリストするだけの基本的なjsをいくつか書きましたが、次のようになります。

「リクエストを完了する前にプロセスが終了しました」

これは、Lambda が FTP と対話できないためですか?

私はところでjsftpを使用しています。

これが私のセットアップです:

  • サーバーレスを使用してプロジェクトを作成します
  • 私のラムダでは、nodejs を使用し、JSFTP を使用して ftp を処理しています。

私のコード:

// Require Serverless ENV vars
var ServerlessHelpers = require('serverless-helpers-js').loadEnv();

// Require Logic
var lib = require('../lib');

// Lambda Handler
module.exports.handler = function (event, context) {

    lib.respond(event, function (error, response) {
        return context.done(error, response);
    });
};

私のftpラムダコード:

var JSFtp = require("jsftp");

module.exports.respond = function (event, cb) {

    var ftp = new JSFtp({
        host: "host",
        user: "user",
        password: "password"
    });

    ftp.auth(ftp.user, ftp.password, function(err, res) {
        if (err) console.log(err);
        else console.log(res);

        ftp.ls(".", function (err, res) {
            var results = [];
            res.forEach(function (file) {
                results.push(file.name);
            });

            ftp.raw.quit();

            return cb(null, results.length);
        })
    });
};

あちこちに console.log() を追加しましたが、ftp.auth を試みると詰まってしまったようです。

クラウドウォッチに表示される出力:

START RequestId: __ID__ Version: $LATEST
END RequestId: __ID__
REPORT RequestId: __ID__    Duration: 526.46 ms Billed Duration: 600 ms     Memory Size: 1024 MB    Max Memory Used: 33 MB  
Process exited before completing request

それで、どこかで窒息したように見えます...

4

3 に答える 3

3

すぐにテストすることができます。タイムアウトが十分に長く設定されていることを確認し、プロセスの終了時に context.succeed() を呼び出していることを確認してください

function __main__(event, context) {
    var JSFtp = require("jsftp");
    var ftp = new JSFtp({
        host: "speedtest.tele2.net",
        port: 21, // defaults to 21
    });
    ftp.ls(".", function(err, res) {
      var results = []; res.forEach(function(file) {
        results.push(file.name);
      });
      context.succeed(results);
    });
};

于 2015-12-18T16:45:14.420 に答える
1

デフォルトでは、Lambda 関数は 3 秒で完了します。それよりも時間がかかる場合は、表示されているエラーが発生します。

タイムアウトは最大 5 分まで調整できます。awsCLIを使用して変更するには、次を実行します。

aws lambda update-function-configuration --function-name my-lambda-function --timeout 300
于 2015-12-18T16:51:25.203 に答える