express - 具有多路由 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 的第三条路由。看起来是权限问题。
解决方案
最后,这个问题与 ClaudiaJS 无关。
它只需要使用 EC2 的内部 IP,而不是外部 IP,如此处所述Invalid permission from Lambda to MongoDB in EC2
推荐阅读
- delphi - Delphi 10.3 - 带有 HashMap 的 Zebra 打印机的 Android Intent
- css - CSS箭头不直
- csv - 当文本(在定义的文本分隔符内)包含逗号时,SSIS 无法读取 .CSV 文件
- laravel - laravel-localization 在运行服务器时给我错误
- visual-studio-code - 如何对 vscode 调试器扩展进行端到端测试?
- python-3.x - 如何从 django HttpRequest 对象执行 url 传递的键 = 值对
- laravel - Eloquent - 从闭包中向主查询实例添加查询
- php - PHP:为什么 imagepng() 函数在保存图像时会增加大小?
- java - 模型映射器异常:仅在 Docker 中无法将 java.lang.String 转换为 java.lang.Integer
- javascript - 在 React 组件中测试 API 调用