使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用相关的知识,希望对你有一定的参考价值。
背景介绍
开发人员最喜欢做的事情是直接通过IDE管理发布代码,AWS Toolkit可以让开发人员将应用程序直接发布到AWS的云平台,并轻松实现部署调用与开发,并通过Elastic Beanstalk堆栈实现应用程序的一键部署,代码版本管理,数据库管理,负载均衡与自动扩展等。AWS Elastic Beanstalk 是一项易于使用的服务,用于在熟悉的服务器(例如 Apache 、nginx、Passenger 和 IIS )上部署和扩展使用 Java、.NET、php、Node.js、Python、Ruby、GO 和 Docker 开发的 Web 应用程序和服务。
我们只需上传代码,Elastic Beanstalk 即可自动处理从容量预置、负载均衡、自动扩展到应用程序运行状况监控的部署。同时能够完全控制为应用程序提供支持的 AWS 资源,并可以随时访问底层资源。
Elastic Beanstalk 不额外收费,只需为存储和运行应用程序所需的 AWS 资源支付费用。
AWS Toolkit for Visual Studio 是一个适用于对 Visual Studio 集成开发环境 (IDE) 的插件。该工具包使开发人员使用亚马逊 AWS 更容易开发,调用和部署 .NET 应用程序。
实验准备
官方工具下载地址:https://aws.amazon.com/cn/visualstudio/
备用地址:
AWS Toolkit for Visual Studio 2017和2019 https://s3testlq01.s3.cn-north-1.amazonaws.com.cn/AWSToolkitPackage.vsix
AWS Toolkit for Visual Studio 2013-2015 https://s3testlq01.s3.cn-north-1.amazonaws.com.cn/AWSToolsAndSDKForNet_sdk-3.3.606.0_ps-3.3.604.0_tk-1.14.5.0.msi
实验说明
涉及AWS组件:
AWS Elastic Beanstalk
AWS Toolkit for Visual Studio
Application Load Balance
实验流程
环境准备
配置Visual Studio
配置Elastic Beanstalk
蓝绿部署
自动扩展与负载均衡
转换负载均衡器
环境准备
本次演示选择使用的环境为Visual Studio 2019,可以参考Visual Studio 官方教程安装并下载https://visualstudio.microsoft.com/zh-hans/vs/
下载AWS Toolkit for Visual Studio 2019后执行VSIX installer ,执行时需要关闭Visual Studio。
配置Visual Studio
在Visual Studio的资源管理器中进行项目发布,可以看到Publish to AWS Elastic Beanstalk…。
回到AWS控制台的IAM,选择用户,本次测试选择具有admin的权限的用户,但是在生产环境中要按照权限最小化的原则,可以在IAM Policy中设定具体的用户具有什么样的权限。
这里我们直接选择导入csv文件,当然也可以手动将Access Key与Secret Key填写到Visual Studio中。
Account Number就是我们AWS的账号。
Account Type 选择China Region,否则选择global Region。
这里注意:点击OK之后,关闭Publish to Amazon Web Services这个操作界面,然后重新发布项目Publish to AWS Elastic Beanstalk…
我们可以将项目或应用程序发布到Beijing(BJS)或Ningxia(ZHY)。这里我们选择Beijing这个Region。
—这一步要定义自己应用程序的名称:application name
—定义自己应用环境的名称:Environment。环境建议定义应用名-test或-dev或-prod。因为后面会介绍到Elastic Beanstalk的蓝绿部署,可以无缝地切换我们的开发和生产环境。
—最后一步是检查我们的域名有没有被占用:Check availability…
下一步,定义软件环境。主要是包含两个操作:一是运行应用程序的OS环境。二是应用程序所运行的资源配置。
我们会发现有非常多的instance类型可以选择,由于环境run的是windows server所以推荐至少是C5.xlarge以上的instance类型4vcpu,8GiB RAM.
还有一个配置不要忽略,就是Key pair. 这个是登陆instance虚拟机的密钥。确保这个密钥文件在自己的手里,如果没有请创建。
下一步还是安全侧,就是Elastic Beanstalk的Role。意思是我们的部署应用服务器可以与哪些AWS资源交互。为了测试,我们直接给它分配一个默认的role。
下一步来定义Build与IIS的设置,比如App pool runtime, App path等。
检查没有问题的话就可以Deploy发布。
ElasticBeanstalk发布应用的所有状态都是可追踪的,我们在Events log上就可以看到。
可以看到它将代码存储在S3上,创建Security Group安全组,创建EIP,创建EC2等等。
发布成功后,我们可以直接点开URL来验证是否项目发布成功。
下一步我们修改一下View/Home/index.html文件,作为另外一个生产环境。
在进行发布的时候既可以覆盖已有的环境,也可以创建一个新的环境。为了测试我们先覆盖已有环境。后面会介绍蓝绿部署部分。
大概不到1分钟的时间,更新的代码环境就部署好了。
配置Elastic Beanstalk
现在一切的开发和部署工作都是通过Visual Studio实现的,那么究竟Elastic Beanstalk在AWS控制台是什么样的?
在Elastic Beanstalk控制台上可以对应用程序的配置,监控,版本管理等进行配置。
监控页面中可以看到应用程序所在的服务器对资源的使用率是什么,如下图:
在应用程序中界面中,可以回滚到任何应用程序的版本。比如这次我们发布了两个版本的应用。
在配置页面中,可以看到ElasticBenstalk的详细配置,如下图:
我们也可以将 Amazon RDS SQL 数据库添加到我们的部署和测试的环境。AWS Elastic Beanstalk 通过设置数据库主机名、用户名、密码、表名和端口的环境属性,来向实例提供连接信息。在将数据库添加到环境时,其生命周期将与环境的生命周期关联。对于生产环境,建议将实例配置为连接到外部数据库。详细请参考:https://docs.amazonaws.cn/elasticbeanstalk/latest/dg/using-features.managing.db.html?icmpid=docs_elasticbeanstalk_console
比如我们将 Amazon RDS SQL Server EE 数据库添加到部署和测试的环境,选择数据库的版本和类型等,这里为了保障数据库的高可用,我们可以选择Multi-AZ:
蓝绿部署
蓝绿部署概念:
蓝绿部署是最常见的一种0 downtime部署的方式,通过执行蓝/绿部署可避免产生停机时间。蓝绿部署原理上很简单,就是通过冗余来解决问题。通常生产环境需要两个环境,一个是prod另外一个是test或dev。用户访问我们的应用往往是active的服务器集群prod(绿色环境),当要更新自己的应用时,将更新的应用发布到test或dev(蓝色环境),经过测试完成后,将prod与test切换环境。如果运行出现了问题,可以通过负载均衡器指向快速回滚到绿色环境。
Elastic Beanstalk 交换旧环境和新环境的别名记录,以将流量从旧版本重定向到新版本,反之亦然。
我们可以通过Visual Studio发布一个新的环境(蓝色环境),具体步骤不在赘述,与前面的一致,如下图:
现在创建了第二个环境,蓝色环境dev,如下图:
回到AWS控制台,在Elastic Beanstalk上就有了两个环境,
通过交换URL来完成蓝绿环境的切换,大概5秒钟左右,环境切换完成。在传播 DNS 更改并且旧 DNS 记录过期之前,请勿终止旧环境。DNS 服务器不一定会基于应用所在 DNS 记录中设置的生存时间 (TTL) 来清除其缓存中的旧记录。另外,当应用程序使用生产数据库时,蓝/绿部署要求您的环境独立于生产数据库运行。如果Elastic Beanstalk的环境附加有 Amazon RDS 数据库实例,数据将不会传输到第二个环境,所以生产环境建议RDS数据库独立于Elastic Beanstalk堆栈之外。这个时候我们再访问之前的test环境,会发现已经与dev环境切换了,如下图:
下一步是网站的高可用,负载均衡与弹性扩展和缩减
自动扩展与负载均衡
在Elastic Beanstalk的控制台中修改容量,将单一实例切换到负载均衡,然后设置触发条件,这里我们以CPU的使用率为例,高于70%自动扩展1台实例,低于30%缩减1台实例。
然后应用,等待Elastic Beanstalk更新环境,这个时候的运行状况会切换成灰色,如下图:
下一步就是通过ELB的DNS来访问我们的应用程序,ELB负载均衡器在EC2操作页面的负载均衡器中,找到负载均衡DNS名称,把它Copy到浏览器中。
转换负载均衡器
我们可能注意到了Elastic Beanstalk使用的负载均衡器是CLB,我们可以将它迁移到ALB中,启用ALB迁移向导即可,但需要注意的是ALB要指定不同可用区的子网。具体操作步骤跟迁移向导做,所以不在赘述,转换成功后我们就可以通过ALB来访问.NET应用程序,如下图:
这样我们的应用程序的入口就是负载均衡器ALB,即使在蓝绿部署切换环境的时候,也无需切换入口的URL。
总结
将AWS Toolkit for Visual Studio与Elastic Beanstalk结合使用,简单易用的同时也大大的提高了开发效率。利用AWS的PaaS数据库和云计算的弹性提成了应用安全并减少了运维部署的工作。除此之外,还可以使用AWS SDK for .NET帮助开发基于原生.NET APIs、通过AWS Tools for PowerShell 以PowerShell脚本的方式直接访问管理和与AWS的服务交互。如果我们的应用程序是.NET Core还可以通过AWS ECS来实现微服务架构。
详细视频:https://edu.51cto.com/center/course/lesson/index?id=517074
博客参考:https://amazonaws-china.com/cn/blogs/china/using-visual-studio-aws-elastic-beanstalk-publish-net-applications/
以上是关于使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用的主要内容,如果未能解决你的问题,请参考以下文章
Installing the AWS Toolkit for Visual Studio Code
如何在 ASP.NET MVC 视图上将 XSD Schema 与 Visual Studio Intellisense 结合使用
我的程序可以在 Visual Studio 中运行,但不能在其他 IDE 示例 AWS Cloud 9 中运行
尝试在 Visual Studio 项目中将文件大小转换为可读 - 如何与我现有的代码结合使用