Я пытаюсь выяснить, чего мне не хватает в этом контексте.
У меня есть EC2 с двумя докерами.Один из них представляет собой Python REST API, другой содержит nginx, который перенаправляет на сервер Python.
Отправка запроса GET на конечную точку my / test из браузера или почтальона возвращает ожидаемое значение.
Iпопытался получить доступ к тому же общему URL-адресу из лямбды AWS, но тайм-аут запроса.
Вот моя текущая ситуация
- URL-адрес EC2 является общедоступным и доступен из моего браузера.
- Лямбда может успешно связаться с www.google.com.
- Лямбда не может достичь URL EC2.
- Лямбда не имеет VPC.
- Lambda находится за шлюзом API (веб-сокет).
- Пробовал большое значение тайм-аута (30 с +).
Возможно, проблема связана с моим незнанием среды AWS.Кто-нибудь может увидеть проблему в следующем коде?
const AWS = require('aws-sdk');
require('./patch.js');
var http = require('http');
function test(url){
return new Promise((resolve, reject) => {
const req = http.request(url,
(res) => {
let body = '';
res.on('data', (chunk) => (body += chunk.toString()));
res.on('error', reject);
res.on('end', () => {
if (res.statusCode >= 200 && res.statusCode <= 299) {
resolve({statusCode: res.statusCode, headers: res.headers, body: body});
} else {
reject('Request failed. status: ' + res.statusCode + ', body: ' + body);
}
});
});
req.on('error', reject);
req.write('', 'binary');
req.end();
});
}
exports.handler = async(event) => {
let googleUrl = "http://www.google.com";
let ec2Url = "XXXXX"; // Public EC2 url
await test(googleUrl).then(function(res){
console.log("Response",res); // This is logged
});
await test(ec2Url).then(function(res){
console.log("Response",res); // This is never logged. Timeout kicked in.
});
return {};
};