首页 > 解决方案 > 具有多路由 ExpressJS 应用程序的 ClaudiaJs 部署到 AWS Lambda 和 AWS API Gateway

问题描述

我有一个包含多条路线的 ExpressJS 项目

var app = new express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.static(path.join(__dirname, 'public')));
app.use('/car', car);
app.use('/bike', bike);
app.use('/bus', bus);
app.use('/train', train);
app.get('/',function(req,res){
  res.render('layout', { title: 'app example' });
});
module.exports = app

我已经将 ClaudiaJS 部署到 AWS Lambda,并且部署似乎有效。

之后,我将 AWS API Gateway 配置为调用 Lambda 函数中的不同资源路径。我发现它适用于根路径“/”但是当我尝试从 API Gateway 调用不同的资源路径时,我在 API Gateway 中收到此错误:

"You do not have permission to perform this action"

此外,我在 Lambda 函数中收到此消息:

"The API with ID XXXXXXXXX does not include a resource with path /car having an integration arn:aws:lambda:myzone:XXXXXXXXXXXXX:function:functioname on the GET method."

目前这是否可以使用 ClaudiaJS 甚至 Lambda 函数中支持的配置(多个资源路径)来实现?有什么经验吗?


更新 1:这对 AWS Lambdas 来说似乎是可能的。请参阅此处:是否可以将 API 网关与 AWS lambda 中的节点路由连接起来?不确定 ClaudiaJS 是否可以管理此用例


更新 2:ClaudiaJS 在他们的支持小组https://gitter.im/claudiajs/claudia中确认,他们的产品可以将多路由 ExpressJS 应用程序部署到单个 AWS Lambda,并将我推荐给https://livebook.manning。 com/#!/book/serverless-apps-with-node-and-claudiajs/chapter-13/v-5/167所以我这边看起来有些配置/调用错误


更新 3:成功调用 2 条路线:

app.get('/test', function (req, res) {
    res.send('Hello World test!');
});
app.get('/', function (req, res) {
    res.send('Hello World!');
});

获取 {"message": "Internal server error"} 用于访问 EC2 上的 MongoDB 的第三条路由。看起来是权限问题。

标签: expressaws-lambdaaws-api-gatewayclaudiajsclaudia.js

解决方案


最后,这个问题与 ClaudiaJS 无关。

它只需要使用 EC2 的内部 IP,而不是外部 IP,如此处所述Invalid permission from Lambda to MongoDB in EC2


推荐阅读