通过 AWS ECS 服务发现将前端应用程序与后端连接

时间:2021-02-11 05:02:12

标签: amazon-web-services amazon-ecs consul aws-fargate service-discovery

我有一个由前端(基于 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,它也能完美运行]

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

不能在前端使用互联网上的服务发现 (SD) 名称。它们只能在 VPC 内使用,不能从外部使用。这是因为 SD 仅使用不能通过 Internet 使用的私有 IP 地址。来自docs

<块引用>

为服务发现服务创建的 DNS 记录总是注册任务的私有 IP 地址,而不是公共 IP 地址,即使使用公共命名空间.

对于互联网上的流量,您必须使用负载平衡器。