Может ли API-шлюз прокси-сервер к HTTP-серверу больше, чем JSON?

Я экспериментирую с AWS API Gateway в качестве решения для аутентификации частного HTTP-сервиса, и у меня возникают проблемы с его настройкой.

У меня есть фиктивная служба node.js, работающая в частном VPC с внутренним балансировщиком сетевой нагрузки (примечание: это исправно).

Затем я настроил API и настроил ссылку VPC на это руководство: https://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-with-private-integration.html

URL ресурса метода get указывает на DNS-имя балансировщика нагрузки внутренней сети.

Когда я перехожу к URL-адресу шлюза API (например, https://abc123.execute-api.us-west-2.amazonaws.com/prod/), я могу получить ответ сервера в формате HTML (см. Ниже), Тем не менее, файлы JavaScript возвращают 403 Forbidden, Я ожидаю, что это как-то связано с настройкой пути.

Вместо того, чтобы просто возвращать один ответ (т. Е. Ответ API json), есть ли способ настроить 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>

страница указателя

Этот JS не загружается (403) и не выполняется.

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

консольный вывод

1 ответ

Вы можете проверить, что ваша функция вызывается (и правильно настраивается) на панели Lambda в AWS. Если ваш API-шлюз настроен правильно, он должен появиться как триггер для вашей лямбда-функции:

lambdaconfig

После этого вы можете увидеть статистику и журналы вашей лямбды на вкладке мониторинга:

lambdamonitoring

Вам нужна функция обработчика событий, которая перенаправляет запрос API-шлюза на соответствующий ресурс в вашем экспресс-приложении, а это значит, что вам нужно реализовать какой-то промежуточный уровень для правильного сопоставления запросов API GateWay с вашим экспресс-методом / path / parameters / files.

AWS Lambda - это функции, которые вызываются, когда происходит событие в таких сервисах, как API Gateway, SNS, Alexa Skills и т. Д. Я бы попытался настроить https://github.com/awslabs/aws-serverless-express или использовать какой-либо другой сервис, такой как Elastic Beanstalk или ECS.

Другие вопросы по тегам