我有一个由前端(基于 ReactJS 构建)和后端(基于 Python 构建)组成的 Web 应用程序。
前端:我创建了一个 ECS Fargate 服务并附加了 aws 应用程序负载均衡器。
后端:我创建了一个 ECS Fargate 服务并附加了 ECS 服务发现。
现在,当我尝试通过服务发现向后端发出请求时,后端的响应从未出现。这是我的前端代码片段:
axios.get("http://be.be:5000/", {"abc":"bcd"})
.then(response => {
alert(response['data'])
console.log(response)
return response.data
})
.catch(error => {
console.log(error)
})
此处,“be.be”是 AWS ECS 服务发现提供的 URL。而不是 "http://be.be:5000/" 如果我像这样公开任务:"http://public-ip:5000/"它工作得很好。
[注意:我在同一个 VPC 上创建了一个 ec2 服务器并尝试 dig +short http://be.be,它也能完美运行]
我在这里缺少什么?
答案 0 :(得分:1)
您不能在前端使用互联网上的服务发现 (SD) 名称。它们只能在 VPC 内使用,不能从外部使用。这是因为 SD 仅使用不能通过 Internet 使用的私有 IP 地址。来自docs:
<块引用>为服务发现服务创建的 DNS 记录总是注册任务的私有 IP 地址,而不是公共 IP 地址,即使使用公共命名空间.
对于互联网上的流量,您必须使用负载平衡器。