別のAWSラムダ関数内でAWSラムダ関数として呼び出されるコード(データと関数を含む)を渡すことはできないようです。例えばnode.jsのAWSラムダ関数間のコードを共有
、このcustomConfigLambda
取る:私はここのような他のAWSのラムダ関数の前のAWSのラムダ関数を呼び出すと
var callbackPayload = {};
callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };
exports.handler = (event, context, callback) => {
callback(null, callbackPayload);
};
を:
var AWS = require('aws-sdk');
AWS.config.update({accessKey: '123', secretAccessKey: 'abc', region: 'us-east-1' });
var lambda = new AWS.Lambda({region: 'us-east-1'});
exports.handler = (event, context, callback) => {
var params = {FunctionName: 'customConfigLambda'};
lambda.invoke(params, function(err, callbackPayload) {
if (err) {
// do nothing
}
else {
console.log('callbackPayload:', JSON.stringify(callbackPayload, null, 2));
}
});
};
その後、私は唯一のcallbackPayload.fooData
なくcallbackPayload.fooFunction
を見ることができます。
callbackPayload.fooFunction(s)
を複数の他のAWSラムダ関数間で共有するにはどうすればよいですか?
ありがとう、私はそこに方法があったと思っていた:)異なるラムダ関数でカスタムモジュールをrequireすることに関しては、普通のコード(すなわち、ZIP/S3ファイルがアップロードされていない)を伴う方法があるのだろうか? 'eval'に関しては、関数が入力パラメータを持っていないときだけうまくいくと思いますか? – TPPZ
@TPPZ Serverlessプロジェクト(以前はJAWSと呼ばれていました)を見てください。この情報はhttp://docs.serverless.com/docs/installing-serverlessを参照してください。いくつかの共通コードベース。関数の評価については、関数function(x){return x;} "'を評価することができ、evalの結果はパラメータで実行できる関数になります。関数内のシンボルは、書かれた元のスコープにアクセスすることはできませんが、たとえば、スコープがどこで評価されたかというスコープにアクセスすることはできません。 – rsp
リンクと詳細をありがとう。完全性のために、次のようにすることができます: 'var fooFunctionParsed = eval( '(+ + callbackPayload.fooFunction +') ');' 'const inputX = 42; const outputX = fooFunctionParsed(inputX); '私は 'this'のようなスコープについてはほとんど調べていませんでしたが、入力パラメータの組み合わせを返す簡単なヘルパー/化粧品の関数では、' eval'が最速の解決策に見えます。 – TPPZ