API网关是否可以代理HTTP服务器而不是json?

时间:2018-09-02 18:31:42

标签: amazon-web-services aws-api-gateway aws-vpc-link

我正在尝试将AWS API Gateway用作针对私有HTTP服务的身份验证解决方案,但无法对其进行设置。

我有一个虚拟的node.js服务,该服务在专用VPC内运行,并且内部有网络负载均衡器在前面(注意:它很健康)。

然后我设置一个API并配置了VPC链接,该指南:https://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-with-private-integration.html

get方法的资源URL指向内部网络负载平衡器的DNS名称。

当我导航到API网关URL(例如https://ABC123.execute-api.us-west-2.amazonaws.com/prod/)时,我可以获取服务器的HTML响应(请参见下文)。但是,javascript文件返回403 Forbidden。我希望这与路径设置有关。

不仅仅是返回单个响应(即json API响应),还有一种方法可以配置API网关以返回包含HTML,css和js资源的功能完善的应用程序吗?


这是运行应用程序的虚拟代码:

// server.js
var express = require('express'),
app = express(); 
app.use('/', express.static('/home/ubuntu/static/'));
app.listen(8080);

索引页面-这是我点击API网关时加载的页面

<!-- static/index.html -->
<html>
<body>
<h1>Hello world!</h1>
<p>This is some text.</p>
<script src="./app.js"></script>
</body>
</html>

the index page

此JS无法加载(403),并且无法执行。

// static/app.js
console.log('Logging from app.js');
alert('WOOT!');

console output

1 个答案:

答案 0 :(得分:0)

您可以在AWS的Lambda面板中验证函数是否已被调用(并正确配置)。如果您的API网关配置正确,它将显示为lambda函数的触发器:

lambdaconfig

之后,您可以在“监控”选项卡上查看lambda的统计信息和日志:

lambdamonitoring

您需要一个事件处理程序函数,该函数将API Gateway请求重定向到您的快速应用程序上的相应资源,这意味着您需要实现某种中间层,以将API GateWay请求正确映射到您的快速方法/路径/参数/文件。

AWS Lambda是在API网关,SNS,Alexa Skills等服务上发生事件时调用的函数。我将尝试设置aws-serverless-express或使用其他一些服务,例如Elastic Beanstalk或精英