app aws_在AWS上将Spring App迁移到MicroServices App
app aws
我正在工作的公司最近经历了从单片应用程序(Java Spring WAR)重构代码库到Amazon PAAS托管的MicroServices应用程序(特别是Beanstalk和CloudFront)的迁移的过程。 作为此博客文章的一部分,我提供了一个小型简单的Sales Demo应用程序,并将讨论重构该应用程序所需的步骤,以便可以在Beanstalk / S3 / CloudFront环境中运行该应用程序。
出于本博客的目的,我将使用SalesTax演示应用程序,并且可以在此处找到代码( https://github.com/shannonlal/salesdemo )。 该站点将为用户提供产品列表,并使他们能够创建订单和征收营业税。 我创建了更详细的指南,其中包括在AWS中创建不同服务的步骤。 可以在以下位置找到该指南( https://github.com/shannonlal/salesdemo/AWS-MigrationGuide.pdf )。 以下是Spring体系结构的图:
上面的体系结构是用于大多数单片Web应用程序的非常标准的Spring体系结构。 在迁移过程中,我们分解了代码,将后端服务与前端内容JSP(现在HTML),CSS和JS分离了。 下图说明了我们如何控制访问的模型:
亚马逊网络服务
我将首先从高层次解释AWS中的这些不同组件是什么以及如何将它们集成在一起。
53路
路线53是一种域名服务(HTTPS:// AWS 亚马逊的.com / route53 /),它允许您将流量路由到不同的内部AWS服务。 在我们的模型中,我们使用Route 53托管我们的DNS服务器(例如www.mycompany.com )。
S3
Amazon S3(https://aws.amazon.com/s3/)是一项简单的存储服务,可让您存储内容(云中存储桶中的html,css,js文件)。 在此演示中,我们将使用Amazon S3托管静态内容(html,css和JS)。
豆茎
Beanstalk(https://aws.amazon.com/elasticbeanstalk/)是一个应用程序堆栈,将用于托管我们的各个服务。 Beanstalk可以访问多个堆栈(Tomcat,PHP,Node,Ruby,Go,.Net)。 在本演示中,我们将使用Beanstalk托管我们的不同Web服务(例如在Tomcat上运行的Spring WARS)。
RDS
亚马逊关系数据库服务(RDS 的https:// AWS 亚马逊的.com / RDS / )将被用于承载我们的数据库。 我们将创建一个RDS数据库,我们的Web服务将用于连接到该数据库。
CloudFront
Amazon CloudFront是将所有不同服务捆绑在一个通用URL下的粘合剂。 我们将定义一个原点(与我们的URL相对应,该URL在Route 53 www.mycompany.com中定义)。 当用户点击此URL时,Route53会将流量路由到CloudFront。 CloudFront将托管内容并将其推送到世界各地。 在CloudFront中,您可以根据URL模式重定向流量。 例如,进入默认模式(/ *)的任何人都可以重定向到S3中存储您静态内容(例如html,css,图像)的存储桶。 如果他们说出API URL(/ api / products),则可以将它们路由到后端的Beanstalk服务。
基础设施安全
在生产系统中,我们所有的Web服务都隐藏在不同的VPC后面,并且已经实施了网络规则以限制对后端服务的访问。 我认为我没有时间在此博客中解决此问题,但是我将在下一篇中尝试讨论。
应用安全
我未包含在销售演示中的一个主要组件是Spring Security。 在我们的应用程序中,我们删除了Spring Security,并使用API网关替换了访问控制。 我将在此博客的结尾简要讨论这个概念。
注意: AWS是一个非常复杂的复杂生态系统,它提供了多种集成这些不同服务的方式。 我将讨论的模型与我们在公司中实施的模型相似。
SalesTax应用程序概述
SalesTax Demo应用程序将看起来像传统的Spring应用程序,但有一个例外。 JSP页面不遵循传统的Spring MVC模型,先从控制器传递数据,然后再由JSP页面呈现视图。 相反,我们使用的是Angular,它对后端控制器进行REST调用,并在浏览器中呈现内容。 之所以这样做,是因为我们可以将静态内容(html,css,js文件)迁移到S3存储桶,并使后端服务在beantalk中运行。
我创建了一个指南,其中提供了有关如何在AWS中设置您的环境的逐步说明和图片。 您可以在此位置的github上找到该文档的链接。 本文档的其余部分将提供对该过程的摘要以及对指南的引用。 如果您想在自己的AWS设置上尝试此操作,我建议您在此处查看详细指南( https://github.com/shannonlal/salesdemo/AWS-MigrationGuide.pdf )。
迁移过程
下一节将提供迁移过程的高级概述。 同样,如果您想自己尝试一下,我建议您使用详细指南。
将应用程序部署到Beanstalk
第一步将是构建应用程序并将其部署到beantalk实例中。 要签出代码,请运行以下命令:
Git clone https://github.com/shannonlal/salesdemo step0
您可以将项目导入到您的IDE(Eclipse,NetBeans,STS等)中,也可以仅从命令行构建。 要构建项目,请运行以下命令:
mvn clean install
构建完WAR之后,登录到AWS Adminstration控制台,并将WAR部署在新的Beanstalk实例中。 有关详细说明,请参阅安装指南。
配置CloudFront指向yourBeanstalk实例
登录到Amazon控制台,然后单击CloudFront链接。 此时,您有两个选择:
- 使用您自己的域名(www.example.com)
- 使用Cloud Front提供的默认设置(这看起来像https://xxxxxxxxxx.cloudfront.net )。
如果您已经拥有自己的域名,则可以将其添加到Route53。以下链接提供了有关如何执行此操作的详细说明( http://docs.aws.amazon.com/gettingstarted/latest/swh/website-hosting- intro.html )。 如果您没有自己的语言,则可以创建一个CloudFront Origin,它会为您提供一个URL。
此步骤的目标是使用CloudFront将您的URL(您自己的www.example.com或生成的https://xxxxxxxxxx.cloudfront.net )映射到BeanStalk中的托管应用程序。 在CloudFront中,您将定义一个Web分布,然后为该分布定义一个Origin。 Cloud Front中的起源表示后端服务(即用于托管静态内容的S3存储桶或用于托管Spring Apps的Beanstalk应用程序)。 最后,您将创建一个行为,该行为将指示CloudFront将某个URL模式的所有请求映射到特定的Beanstalk实例。 第一步,我们将所有请求(/ )映射到Beanstalk实例。 以后的步骤会将所有格式(/ api / )的请求映射到您的Beanstalk实例,其余的(/ *)将转到您的S3存储桶。 以下是用于创建行为的屏幕的图像。
创建RDS Postgres实例并连接到Beanstalk
在此步骤中,我们创建一个可公开访问的RDS实例,然后从pgAdmin工具连接到该实例以创建数据库。 可以通过如下拉出step1分支来找到sql脚本和更新的代码: Git克隆 https://github.com/shannonlal/salesdemo step1 。 可以在以下位置找到sql创建脚本: src / resources / sql / createSalesTax-DB-Postgres.sql 。
创建数据库后,可以使用以下命令使用maven重建项目:
mvn clean install
重新登录到您的Amazon控制台并重新部署最新的war文件。 您还需要将环境属性附加到Beanstalk实例,以便它知道在哪里可以找到您的数据库。 这可以通过单击“配置”,“软件配置”并将它们添加到“环境属性”中来完成。
如果重新加载应用程序,您将看到它现在正在从AWS中的数据库实例中提取产品。
创建一个S3存储桶并将静态内容部署到其中
在此步骤中,我们将创建一个S3存储桶,并将其“静态内容”(html,css,图像等)移至其中。 为了获得最新的代码,我们需要从git中提取最新的更改。 运行以下命令:
Git clone https://github.com/shannonlal/salesdemo step2
重新登录到Amazon Console,然后单击S3。 单击创建存储桶并创建一个新存储桶。
创建存储桶后,单击属性(右上角),然后单击静态网站托管以启用内容托管。 准备好S3存储桶后,您可以将项目的静态内容传输到S3。 要传输的代码在以下目录中:
web/build/prod/
更新Cloud Front以反映新的来源
我们将需要更新CloudFront以将请求重定向到其适当的来源。 第一步将是登录CloudFront并为新创建的存储桶创建一个Origin。 创建原点后,您将需要修改行为,以便您的默认行为( )现在指向S3中的静态内容,并且您的API请求(/ api / )将重定向到您的Elastic Beanstalk实例。 以下是对CloudFront提出的建议更改的示意图。
重新部署应用
更新CloudFront并将状态更改为已部署后 ,现在可以通过CloudFront URL访问S3中托管的静态内容。 剩下要做的就是重建销售演示应用程序并将其重新部署到Beanstalk中。 在此阶段,所有前端代码(html,js,css)已移至Web目录,后端功能位于services目录中。 要重建应用程序,请在services目录中运行maven命令。
mvn clean install
重新登录到Amazon控制台,并使用新的WAR重新部署您的Beanstalk应用程序。
对于希望将Spring应用程序迁移到基于云的MicroServices的任何人来说,上述架构都是一个很好的起点。 作为迁移的一部分,我建议您考虑合并API网关。 有一系列开源和可商购的API网关(亚马逊于2015年7月发布了他们的API网关,film-soa.org /等)。 API网关将位于CloudFront与您的后端服务之间,并将处理身份验证和访问控制,并将您的请求重定向到适当的Beanstalk实例。 我在下面提供了API网关的图片。
翻译自: https://www.javacodegeeks.com/2015/12/migrating-spring-app-microservices-app-aws.html
app aws
标签:
相关文章
-
无相关信息