2015-12-18 135 views
5

私はFTPのファイルを一覧表示するためにいくつかの基本的なJSを書いたが、私は得る:AWS LambdaはS/FTPに到達/対話できますか?

があるためラムダは、FTPと対話することができないということです「プロセスは、要求を完了する前に終了しましたか」?

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

は私の設定です:

  • 私はラムダのためのプロジェクト
  • を作成するためにServerlessを使用し、私はnodejsを使用し、私は、FTPのものに対処するためにJSFTPを使用しています。

マイコード:

// 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ラムダコード:私はすべての場所でいくつかはconsole.log()を追加し、それが一度窒息、それはしようとしたようにそれはそう

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); 
     }) 
    }); 
}; 

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 

それだけでどこかに窒息のようなので、それが見えます...

+0

ラムダ関数のデフォルトのタイムアウトは3秒です。あなたの電話には時間がかかり、終了することがあります。 –

+0

プロセスがクラッシュしている(ログにエラーがないかどうか)か、最後にcontext.succeed()が呼び出されていないかのいずれかです。 –

+0

@mbairdは、 – iCodeLikeImDrunk

答えて

3

を、ftpはラムダでは動作しません。

sftpはラムダでうまく動作します。私は問題なしでjsch経由でJavaコードを使ってテストしました。それはどのようなjs sftpのlibで動作しませんでした。

+0

これは当てはまりません。たぶん、あなたがこれに答えた時だったので、私はその仮定を下降させません。我々は、AWS Lambdaのプロダクションで動作するPythonのFTP転送コードを持っています。 – javamonkey79

+0

私はそれに取り組んで以来、何かが変更されているかわかりません。 vpcがサポートされる前であることに注意してください。私はJavaとjsを使ってみましたが、Pythonのチェックはしませんでした。 – iCodeLikeImDrunk

+1

https://aws.amazon.com/lambda/faqs/は、着信TCP接続が許可されていないことを示します。つまり、FTP PASVは少なくとも動作しません。 Q:AWSラムダファンクションコードにはどのような制限がありますか? ...インバウンドネットワーク接続はAWS Lambdaによってブロックされ、アウトバウンド接続の場合はTCP/IPソケットのみがサポートされ、ptrace(デバッグ)システムコールは制限されます。 TCPポート25のトラフィックは、スパム対策としても制限されています。 – Adam

3

ちょうど今、テスト可能です。 ウルタイムアウトは十分な長さに設定されていて、プロセスの終了デフォルトで

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); 
 
    }); 
 
};

+0

lsを試す前にftpが最初に認証する必要がありますか?またはJSFtpを既に作成していますか? – iCodeLikeImDrunk

+0

通常ははいですが、私はテストのために公開FTPサーバーを使用しました。ラムダ機能自体でログイン資格情報を送ってください – Yerken

+0

ええ、文字通り信用状をハードコードしました。私は公開のFTPを試し、そのmkesのdiffを参照してください。 – iCodeLikeImDrunk

1

にcontext.succeed()を呼び出していることを確認し、ラムダ関数は、のみ完了するまでに3秒を持っています。それよりも時間がかかる場合は、あなたが見ているエラーを取得します。

タイムアウトを最大5分に調整できます。 aws CLIを使用してそれを変更するには、実行します。彼らは一時ポートを使用するので、短い中

aws lambda update-function-configuration --function-name my-lambda-function --timeout 300 
+0

は1秒未満で終了し、iveはすでに1GBのmemで2分のタイムアウトを設定しています。 – iCodeLikeImDrunk

関連する問題