【问题标题】:Connecting Frontend application with Backend via AWS ECS Service Discovery通过 AWS ECS 服务发现将前端应用程序与后端连接起来
【发布时间】:2021-02-11 05:02:12
【问题描述】:

我有一个由前端(基于 ReactJS 构建)和后端(基于 Python 构建)组成的 Web 应用程序。

前端:我创建了一个 ECS Fargate 服务并附加了 aws 应用程序负载均衡器。

后端:我创建了一个 ECS Fargate 服务并附加了 ECS 服务发现。

现在,当我尝试通过服务发现向后端发出请求时,后端的响应从未到来。这是我的前端代码sn-p:

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,效果也很好]

我在这里缺少什么?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,但是我的前端服务正在 VPC 中运行。
    • @DeependraDangal 你能澄清一下你的意思吗?它是内部网站,从未从互联网访问过?
    • 它不是一个内部应用程序。它将从 Internet 访问,但只能从 Internet 访问前端。我不想通过负载均衡器公开后端,因为它是公开的,对吗?
    • @DeependraDangal 您写道代码axios.get(...) 在您的前端。对我来说,这意味着它在用户的浏览器中执行,即它的客户端代码。
    • 负载均衡器的替代品?因为,我不想使用负载均衡器。另外,我听说过一些第三方服务发现工具,例如:consul,它会工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2020-12-28
    相关资源
    最近更新 更多