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

标签 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=‘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 中尝试了类似的代码。同样的问题,只是卡在调用方法上并因 Socket 连接错误而超时。

4) 将 InitationType 更改为 RequestResponse 和 Event,结果相似。

有人知道为什么我无法执行 Node 或 java 代码吗?

TIA

更新:

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

但是,当我尝试从 Apigee(作为 Node 代理)调用相同的代码时,我收到如下错误 -

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

所以看起来代理模块之一中存在一些非法字符。但我不确定为什么它在我的本地机器上运行良好。是因为node版本的原因吗?

最佳答案

2) Set/Unset corporate proxy

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

Node :

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

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

对于java,看看here .

关于node.js - 如何将 aws-sdk 与 node.js 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47212888/

相关文章:

html - 在 React 中覆盖 RSS 提要样式

objective-c - 如何停止/取消aws s3中的下载请求

amazon-web-services - AWS DataSync 无法检测到源 NFS 文件系统中的任何文件

node.js - AWS NodeJS微服务: Iteratively invoke service when files in S3 bucket changed

amazon-web-services - AWS Cognito 用户池身份 REST 示例

javascript - iot.listDimensions 不是函数

javascript - Backbone : How to talk to backend without the use of model. 保存()?

node.js - 使用 sequelize 将数据库前缀附加到表名

javascript - 在连接数据库的函数中使用app.get - NodeJs

amazon-web-services - 如何使用yum安装第三方库(例如opencv)?