如何在 AWS Fargate 中获取 Java 应用程序的 public 主机名?

How to get a public hostname for a Java application in AWS Fargate?

我有一个简单的 Java 应用程序侦听端口 8443。我已将它作为 Docker 映像部署到 Fargate 中,它有一个 public IP 地址,我可以访问通过IP地址就好了。

问题是每次我重新部署映像时,它都会获得一个新的 IP 地址。

我想要一个静态主机名。例如,当我使用 Elastic Beanstalk 并部署一个网站时,它将获得一个主机名。我如何获得相同的东西?

我一直在关注文档一整天,但没有取得任何进展。我已经创建了负载平衡器、目标、侦听器、加速器,但似乎没有任何效果。例如,在创建负载均衡器时,它没有告诉我主机名是什么。

我很确定这应该是一件非常简单的事情,但我就是想不通。我做错了什么?

您可能想要创建应用程序负载均衡器并将您的 Fargate 服务注册到负载均衡器的目标组中。您只需注册一次您的服务,如果您之后重新部署更新的版本,它们将自动添加到目标组。

应用程序负载均衡器将提供一个 public 可访问的主机名。示例:

要使您的负载均衡器可访问,它需要位于 public 子网中。它还需要有一个安全组,允许来自 public 互联网的流量,也允许流量到注册目标。

为您的 ECS 集群创建 ALB 的步骤:AWS docs

正在将 ECS 服务注册到目标组中:AWS docs

更新:

The problem is that when I create a Target Group I cannot associate it with the service.

创建集群时,AWS 控制台会询问您是否要在 VPC 中部署容器。您必须 select 是,并创建一个 VPC:

之后,您可能想要获取 VPC 的 ID(例如,在我的例子中:vpc-0e6...)并且您可能想要进入 EC2 控制台并创建一个新的应用程序负载均衡器,将它进入那个VPC

ALB:

现在,当您创建新的 Fargate 服务时,您应该会看到 Application Load Balancer: