如何将aws sdk与node.js一起使用

如何将aws sdk与node.js一起使用,node.js,amazon-web-services,aws-sdk,Node.js,Amazon Web Services,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=‘

我正在尝试使用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
上面的代码工作正常,返回“helloworld”

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

3) 使用Java AWS SDK在Java中尝试了类似的代码。同样的问题,只是挂起在invoke方法上,并因套接字连接错误而超时

4) 将InvocationType更改为RequestResponse和Event,两者结果相似

有人知道我为什么不能执行节点或java代码吗

短暂性脑缺血发作

更新:

在代码中设置代理之后,我能够从本地机器上运行它,并从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) 设置/取消设置公司代理

如果您使用的是代理,则需要为此正确配置aws客户端:

nodejs:

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

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

对于java,请看一看。

您需要解决一个网络问题。无论您在哪里运行代码,它都没有访问AWS API的权限,甚至不打印“In lambda invoke”。这不是代码中该步骤的准确标签。在lambda调用之后,您将处于响应回调中——只有在lambda API返回响应或抛出异常之后,执行才会到达这一点,而不是在尝试或处理请求时,因为回调函数在某些(响应或错误)可用之前不会执行@马克似乎是对的,就是这样!!代理需要在代码中设置,而不是在环境中设置。谢谢@Daniel