aws-sdkを使用してnode.jsからAWSラムダ関数(単純なHello World)を呼び出そうとしています。コードはlambda.invoke方法でハングアップしても、「ラムダ呼び出しで」を印刷していないいくつかの理由aws-sdkとnode.jsの使用方法
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var AWS = require('aws-sdk');
AWS.config.accessKeyId=‘xxxxxxxx’;
AWS.config.secretAccessKey=‘xxxxxxxx’;
AWS.config.region = 'us-east-1';
var lambda = new AWS.Lambda();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.get('/', function(req, res) {
var params = {
FunctionName: ‘myLambdaFunction’,
InvocationType : 'Event',
Payload: JSON.stringify(
{
"body" : {
"key":req.body.key
}
})};
lambda.invoke(params, function(err, data) {
console.log("In lambda invoke...");
if (err)
{
res.status(500);
res.set('Content-Type', 'application/json');
res.send(err);
}
else
{
res.status(200);
res.set('Content-Type', 'application/json');
res.send(data.Payload);
}
});
});
app.listen(9000, function() {
console.log('Node HTTP server is listening');
});
:ここに私のコードです。私が試してみました
物事:このようなコマンドラインから
1)を実行したAWSラムダ:
#!/bin/bash
aws lambda invoke \
--invocation-type RequestResponse \
--function-name myLambdaFunction \
--region us-east-1 \
--log-type Tail \
outputfile.txt
上記のコードは正常に動作し、リターンの "Hello World"。
2)設定/設定解除企業プロキシ
3)は、Java AWS SDKを使用してJavaで同様のコードを試してみました。同じ問題です。呼び出しメソッドでハングし、ソケット接続エラーでタイムアウトします。
4)InvocationTypeをRequestResponseおよびEventに変更し、両方とも同様の結果を得ました。
ノードまたはJavaコードを実行できない理由は何ですか?
TIA
更新:
私は私のローカルマシンからそれを実行し、ラムダからの応答を取得することができたコードでプロキシを設定した後。しかし
、私は(ノードプロキシとして)私はこのようなエラーを取得していますApigeeから同じコードを呼び出そう -
{"fault":{"faultstring":"Script node executed prematurely: illegal
character\nillegal character\n at module.js:439\n at
module.js:474\n at module.js:356\n at module.js:312\n at
module.js:364\n at require (module.js:380)\n at
\/organization\/environment\/api\/node_modules\/pac-proxy-
agent\/node_modules\/socks-proxy-agent\/index.js:8\n at
module.js:456\n at module.js:474\n at module.js:356\n at
module.js:312\n at module.js:364\n at require (module.js:380)\n
at \/organization\/environment\/api\/node_modules\/pac-proxy-
agent\/index.js:32\n at module.js:456\n at module.js:474\n
at module.js:356\n at module.js:312\n at module.js:364\n at
require (module.js:380)\n at
\/organization\/environment\/api\/node_modules\/proxy-
agent\/index.js:14\n at module.js:456\n at module.js:474\n
at module.js:356\n at module.js:312\n at module.js:364\n at
require (module.js:380)\n at
\/organization\/environment\/api\/lambda_test.js:5\n at
module.js:456\n at module.js:474\n at module.js:356\n at
module.js:312\n at module.js:497\n at startup
(trireme.js:142)\n at trireme.js:923\n","detail":
{"errorcode":"scripts.node.runtime.ScriptExitedError"}}}
のいずれかで、いくつかの不正な文字があるようなので、それが見えますプロキシエージェントモジュール。しかし、なぜ私のローカルマシンから正常に動作するのかわかりません。それはノードのバージョンのためですか?
解決しなければならないネットワーク上の問題があります。コードを実行している間は、AWS APIにアクセスすることはできません。 –
*は "In lambda invoke"も印刷しません。*これはコード内のそのステップの正確なラベルではありません。リクエストが試行されている間ではなく、ラムダAPIが応答を返した後、または例外がスローされた後**応答コールバック内に** **ラムダがここで呼び出された後**コールバック関数は何か(応答またはエラー)が利用可能になるまで実行されないため、処理されます。 @マークBは正しいようです。 –