AWS S3 Angular 应用通过 Route 53 地址调用 ECS 任务

AWS S3 Angular app calling ECS task by Route 53 address

我正在尝试将 Angular 客户端和 Spring 引导服务器应用程序部署到 AWS。我成功地将服务器应用程序作为 ECS 任务启动,使用服务发现以防止在每次任务重新启动时更改 Angular 应用程序代码中的服务器 ip 地址。所以我设置路由器 53 DNS,指的是提到的任务,而不是 public 任务的 IP 作为 Angular 应用程序中的服务器应用程序 URL,但这种方法不起作用。当我将任务的实际 public IP 作为服务器 URL 时,一切正常。 Angular 应用已部署到 AWS S3。

问题示例:

find() {
    return this.http.get<>(http://127.0.0.1:8080 + '/all);
}

解决方案示例:

find() {
    return this.http.get<>(http://test-service.test:8080 + '/all);
}

其中 test-service.test 是 Route 53 记录。

这种方法可行吗?如果没有,你能建议我其他解决方案吗?

我希望问题足够清楚。如果您需要更多详细信息,请告诉我。

谢谢!

是的,这种方法是可行的,但为了工作,您必须在 Route 53 中有一个 Public 托管区域,这意味着您已经购买了一个 public 域。

我假设您已经创建了一个私有托管区域。私有托管区域可用于 VPC 内的 DNS 解析,但不能通过 public 互联网。

我认为您需要解决两件不同的事情。

  1. 如何公开应用服务器?你这样做的方式是行不通的,因为 FQDN 是私有的。因此,您要么将应用程序服务器放在 ALB 后面(它提供静态 public FQDN),要么您购买一个域并创建一个 public 区域来公开您的任务(这可能有效,但任务是短暂的,您需要继续追到域中 register/de-register。

  2. 您如何指向应用程序服务器端点(ALB 或 R53 域或您选择公开它的任何内容?)。您要么将端点烘焙到 Angular 环境中(但端点将静态链接到 JS 编译代码中),要么使用 Angular 提供的工具来参数化端点。您可以创建一个名为 env.js 的文件以及包含应用程序服务器端点的 index.html 文件。这意味着,当从 S3 提供 JS 时,您可以配置 env.js 文件以包含您的应用程序服务器端点,并且您的浏览器将动态指向它(无需重新编译您的 Angular 应用程序。完整的方法-故事是 here.