我如何使用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,看看这里 。
- AWS Step / Lambda – 在运行之间存储variables
- 应该在Nodejs + Koa应用程序中使用AWS SQS消息轮询?
- Amazon Elastic Beanstalk .config for node 64bit&env
- cloudSearch有没有办法在q(queryString)中使用expr的结果
- EC2实例“花了很长时间回应”
- 如何以编程方式将AWS lambda触发器设置为Alexa技能
- 无服务器框架Facebook Bot慢(AWS Lambda)
- 为什么descisionTask不从AWS-SWF服务(SWF)接收任何任务?
- 在AWS节点上,socketcluster无法连接超过1000个连接