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 任务的主要内容,如果未能解决你的问题,请参考以下文章

通过 ACM 和负载均衡器为 aws Nodejs 弹性 beanstalk 设置了 HTTPS,我如何在 s3 存储桶中为 Angular 设置 HTTPS

如何让 AWS S3 存储桶中的 Angular 应用程序对 AWS Elastic Beanstalk 中的服务进行 API 调用

Angular 11 路由在 AWS S3 和 Cloudfront 中不起作用

Angular 10 + AWS S3 + Cloudfront:没有哈希的导航

通过云端的 https 和 AWS 的 S3 存储桶不起作用

如何使用angular js将aws s3文件复制到同一个存储桶中的特定文件夹