javascript - http.get 从异步 lambda 超时尝试访问公共 EC2
问题描述
我试图弄清楚我在这种情况下缺少什么。
我有一个运行两个 docker 容器的 EC2。一个是 python REST api,另一个包含重定向到 python 服务器的 nginx。
从浏览器或邮递员向我的 /test 端点发送 GET 请求会返回预期值。
我尝试从 AWS Lambda 访问相同的公共 URL,但请求超时。
这是我目前的情况
- EC2 url 是公开的,可以从我的浏览器访问。
- Lambda 可以成功访问 www.google.com。
- Lambda 无法访问 EC2 url。
- Lambda 没有 VPC。
- Lambda 位于 API 网关 (websocket) 后面。
- 尝试了较高的超时值(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 {};
};
解决方案
原来我在编辑后没有保存安全组。如果遇到类似问题,请检查您的安全组入站规则。
推荐阅读
- r - 替换 R 中的分组数据
- vue.js - TradingView 的 resolveSymbol 方法被调用了两次
- javascript - 为什么我不能更新这个 JavaScript 类中的变量?
- charts - 显示不正确数据的 SSRS 饼图
- python - 在 Excel 中选择包含字符串 Pandas 的特定工作表
- flutter - Flutter Web:使用 Dio 上传视频时显示进度
- r - 在图上添加图例和更改比例
- windows - WindowsForms TopMost 与 ComboBox
- python - 创建元素(线)点的矩阵连接python
- excel - 将多个 Excel 文件附加到访问表的问题