2017-11-09 40 views
1

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"}}} 

のいずれかで、いくつかの不正な文字があるようなので、それが見えますプロキシエージェントモジュール。しかし、なぜ私のローカルマシンから正常に動作するのかわかりません。それはノードのバージョンのためですか?

+1

解決しなければならないネットワーク上の問題があります。コードを実行している間は、AWS APIにアクセスすることはできません。 –

+1

*は "In lambda invoke"も印刷しません。*これはコード内のそのステップの正確なラベルではありません。リクエストが試行されている間ではなく、ラムダAPIが応答を返した後、または例外がスローされた後**応答コールバック内に** **ラムダがここで呼び出された後**コールバック関数は何か(応答またはエラー)が利用可能になるまで実行されないため、処理されます。 @マークBは正しいようです。 –

答えて

0

2)設定/設定解除の企業プロキシ

プロキシ後ろにいる場合は、このために正しくAWSクライアントを設定する必要があります。

nodejs:

var proxy = require('proxy-agent'); 

AWS.config.update({ 
    httpOptions: { agent: proxy('http://{your_proxy_goes_here}') } 
}); 

Javaについては、hereをご覧ください。

+0

それはそれだった!プロキシは環境内ではなくコード内に設定する必要がありました。ありがとう@ダニエル – asrinath

関連する問題