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

Posted

技术标签:

【中文标题】AWS S3 Angular 应用程序通过 Route 53 地址调用 ECS 任务【英文标题】:AWS S3 Angular app calling ECS task by Route 53 address 【发布时间】:2021-12-31 15:37:48 【问题描述】:

我正在尝试将 Angular 客户端和 Spring Boot 服务器应用程序部署到 AWS。我成功地将服务器应用程序作为 ECS 任务启动,使用服务发现来防止在每次任务重启时更改 Angular 应用程序代码中的服务器 IP 地址。所以我设置路由器 53 DNS,指的是提到的任务,而不是任务的公共 IP 作为 Angular 应用程序中的服务器应用程序 URL,但这种方法不起作用。当我将任务的实际公共 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 记录。

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

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

谢谢!

【问题讨论】:

【参考方案1】:

我认为您需要解决两个不同的问题。

    如何公开应用服务器?您这样做的方式将不起作用,因为该 FQDN 是私有的。因此,您要么将应用服务器置于 ALB(提供静态公共 FQDN)之后,要么购买域并创建公共区域以公开您的任务(这可能有效,但任务是短暂的,您需要继续追踪它们在域中注册/注销)。

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于AWS S3 Angular 应用程序通过 Route 53 地址调用 ECS 任务的主要内容,如果未能解决你的问题,请参考以下文章