我如何使用node.js的aws-sdk

我正在尝试使用aws-sdk从node.js调用AWS Lambda函数(简单的Hello World)。 这是我的代码:

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

出于某种原因,代码挂在lambda.invoke方法,甚至不打印“In lambda invoke”。

我曾经尝试过的东西:

1)像这样从命令行运行aws lambda:

 #!/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中尝试类似的代码。 同样的问题,挂在invoke方法,并超时与Socket连接错误。

4)将InvocationType更改为RequestResponse和Event都具有相似的结果。

任何人有任何想法,为什么我不能执行节点或Java代码?

TIA

更新:

在代码中设置代理后,我能够从我的本地机器运行它,并从Lambda获得响应。

但是,当我尝试从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"}}} 

所以看起来在代理模块中有一些非法的字符。 但我不知道为什么它从我的本地机器正常工作。 是否因为节点版本?

2)设置/取消设置公司代理

如果你在一个代理之后,你将需要正确configuration你的aws客户端:

的NodeJS:

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

对于java,看看这里 。