Angular 7 客户端的单个微服务(春季启动)的 AWS 选择

Posted

技术标签:

【中文标题】Angular 7 客户端的单个微服务(春季启动)的 AWS 选择【英文标题】:AWS choices for single microservice (spring boot) for Angular 7 client 【发布时间】:2020-01-27 09:00:37 【问题描述】:

我对 AWS 比较陌生,希望获得有关满足我需求的最佳选项的建议。我有一个 Spring Boot API,只能由我的 Angular 7 客户端访问。客户端将进入 S3 存储桶。我需要有关如何托管 API 的建议(它需要 mysql 自动生成的数据库)。

到目前为止,我已经看到了 ECS 与 Elastic Beanstalk 与 Amplify。有经验的人可以向我推荐一个对于这个小项目来说不会过分的选择吗?根据客户端的流量,可以频繁调用 API。

如果您有来自 Azure 或 Google Cloud Platform 的建议,我们也欢迎您。

谢谢!

【问题讨论】:

【参考方案1】:

AWS 提供 EC2 服务,您可以在其中创建实例(虚拟机)并手动安装/部署您的应用程序和所有必需的软件。对于个人或非常小的项目,这可能是一个选项,但您应该考虑到您的后端将无法自动(或通过配置)扩展到更多实例,您必须注意数据库的配置和备份,等等

对于生产级应用程序,分离应用程序组件并为每个组件使用特定服务有很多优势。

鉴于您的应用程序堆栈,我建议您考虑这种方法:

使用 AWS RDS 创建关系数据库 将 Spring 后端部署到 AWS Beanstalk 将您的 Angular 前端部署到 AWS S3(它可以作为静态内容) 创建具有两个来源的 CloudFront 分配,以路由必须传送到后端(通常使用 /api/ 等 URL 约定)和前端 () 的请求

【讨论】:

我正在实施类似的情况,但无法让前端与后端对话。例如: 1. Angular 应用程序中的 HTTPclient 会调用哪个地址来调用在 ELB 中运行的后端? 2. 在我的后端,我该怎么做才能接受来自 Angular 应用程序 @Crossorgin("what goes here") 的调用? 如果您采用类似的方法(使用 AWS CloudFront),您可以在 Angular 应用程序中调用相对 URL(“/api/my-service”),无需指定主机。然后在 CloudFront 中设置一条规则,将具有特定 URL 模式(如 /api/*)的每个请求发送到您的后端。所以不需要Crossorgin配置(浏览器下载前端代码的域和你进行后端调用的域是一样的)。

以上是关于Angular 7 客户端的单个微服务(春季启动)的 AWS 选择的主要内容,如果未能解决你的问题,请参考以下文章

缺少客户端的心跳,超时:30秒-RabbitMQ

ABP微服务系列学习-对接前端界面

SpringCloud的使用

春季启动中websocket的互斥锁

春季启动生产者在kafka重启后无法发送任何消息

Spring Cloud:Zuul 抛出“负载均衡器没有可用于客户端的服务器”