使用 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 应用程序和服务。html

咱们只需上传代码,Elastic Beanstalk 便可自动处理从容量预置、负载均衡、自动扩展到应用程序运行情况监控的部署。同时可以彻底控制为应用程序提供支持的 AWS 资源,并能够随时访问底层资源。数据库

Elastic Beanstalk 不额外收费,只需为存储和运行应用程序所需的 AWS 资源支付费用。windows

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/app

下载AWS Toolkit for Visual Studio 2019后执行VSIX installer ,执行时须要关闭Visual Studio。负载均衡

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

配置Visual Studio

在Visual Studio的资源管理器中进行项目发布,能够看到Publish to AWS Elastic Beanstalk…。
使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

回到AWS控制台的IAM,选择用户,本次测试选择具备admin的权限的用户,可是在生产环境中要按照权限最小化的原则,能够在IAM Policy中设定具体的用户具备什么样的权限。
使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用
这里咱们直接选择导入csv文件,固然也能够手动将Access Key与Secret Key填写到Visual Studio中。

Account Number就是咱们AWS的帐号。

Account Type 选择China Region,不然选择global Region。
使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

这里注意:点击OK以后,关闭Publish to Amazon Web Services这个操做界面,而后从新发布项目Publish to AWS Elastic Beanstalk…

咱们能够将项目或应用程序发布到Beijing(BJS)或Ningxia(ZHY)。这里咱们选择Beijing这个Region。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

—这一步要定义本身应用程序的名称:application name

—定义本身应用环境的名称:Environment。环境建议定义应用名-test或-dev或-prod。由于后面会介绍到Elastic Beanstalk的蓝绿部署,能够无缝地切换咱们的开发和生产环境。

—最后一步是检查咱们的域名有没有被占用:Check availability…
使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

下一步,定义软件环境。主要是包含两个操做:一是运行应用程序的OS环境。二是应用程序所运行的资源配置。
使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

咱们会发现有很是多的instance类型能够选择,因为环境run的是windows server因此推荐至少是C5.xlarge以上的instance类型4vcpu,8GiB RAM.
使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

还有一个配置不要忽略,就是Key pair. 这个是登录instance虚拟机的密钥。确保这个密钥文件在本身的手里,若是没有请建立。
使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

下一步仍是安全侧,就是Elastic Beanstalk的Role。意思是咱们的部署应用服务器能够与哪些AWS资源交互。为了测试,咱们直接给它分配一个默认的role。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

下一步来定义Build与IIS的设置,好比App pool runtime, App path等。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

检查没有问题的话就能够Deploy发布。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

ElasticBeanstalk发布应用的全部状态都是可追踪的,咱们在Events log上就能够看到。

能够看到它将代码存储在S3上,建立Security Group安全组,建立EIP,建立EC2等等。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

发布成功后,咱们能够直接点开URL来验证是否项目发布成功。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

下一步咱们修改一下View/Home/index.html文件,做为另一个生产环境。

在进行发布的时候既能够覆盖已有的环境,也能够建立一个新的环境。为了测试咱们先覆盖已有环境。后面会介绍蓝绿部署部分。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

大概不到1分钟的时间,更新的代码环境就部署好了。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

配置Elastic Beanstalk

如今一切的开发和部署工做都是经过Visual Studio实现的,那么究竟Elastic Beanstalk在AWS控制台是什么样的?
使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

在Elastic Beanstalk控制台上能够对应用程序的配置,监控,版本管理等进行配置。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

监控页面中能够看到应用程序所在的服务器对资源的使用率是什么,以下图:

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

在应用程序中界面中,能够回滚到任何应用程序的版本。好比此次咱们发布了两个版本的应用。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

在配置页面中,能够看到ElasticBenstalk的详细配置,以下图:

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

咱们也能够将 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:

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

蓝绿部署

蓝绿部署概念:
蓝绿部署是最多见的一种0 downtime部署的方式,经过执行蓝/绿部署可避免产生停机时间。蓝绿部署原理上很简单,就是经过冗余来解决问题。一般生产环境须要两个环境,一个是prod另一个是test或dev。用户访问咱们的应用每每是active的服务器集群prod(绿色环境),当要更新本身的应用时,将更新的应用发布到test或dev(蓝色环境),通过测试完成后,将prod与test切换环境。若是运行出现了问题,能够经过负载均衡器指向快速回滚到绿色环境。

Elastic Beanstalk 交换旧环境和新环境的别名记录,以将流量从旧版本重定向到新版本,反之亦然。

咱们能够经过Visual Studio发布一个新的环境(蓝色环境),具体步骤不在赘述,与前面的一致,以下图:

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

如今建立了第二个环境,蓝色环境dev,以下图:

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

回到AWS控制台,在Elastic Beanstalk上就有了两个环境,

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

经过交换URL来完成蓝绿环境的切换,大概5秒钟左右,环境切换完成。在传播 DNS 更改而且旧 DNS 记录过时以前,请勿终止旧环境。DNS 服务器不必定会基于应用所在 DNS 记录中设置的生存时间 (TTL) 来清除其缓存中的旧记录。另外,当应用程序使用生产数据库时,蓝/绿部署要求您的环境独立于生产数据库运行。若是Elastic Beanstalk的环境附加有 Amazon RDS 数据库实例,数据将不会传输到第二个环境,因此生产环境建议RDS数据库独立于Elastic Beanstalk堆栈以外。这个时候咱们再访问以前的test环境,会发现已经与dev环境切换了,以下图:

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

下一步是网站的高可用,负载均衡与弹性扩展和缩减

自动扩展与负载均衡
在Elastic Beanstalk的控制台中修改容量,将单一实例切换到负载均衡,而后设置触发条件,这里咱们以CPU的使用率为例,高于70%自动扩展1台实例,低于30%缩减1台实例。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

而后应用,等待Elastic Beanstalk更新环境,这个时候的运行情况会切换成灰色,以下图:

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

下一步就是经过ELB的DNS来访问咱们的应用程序,ELB负载均衡器在EC2操做页面的负载均衡器中,找到负载均衡DNS名称,把它Copy到浏览器中。

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

转换负载均衡器

咱们可能注意到了Elastic Beanstalk使用的负载均衡器是CLB,咱们能够将它迁移到ALB中,启用ALB迁移向导便可,但须要注意的是ALB要指定不一样可用区的子网。具体操做步骤跟迁移向导作,因此不在赘述,转换成功后咱们就能够经过ALB来访问.NET应用程序,以下图:

使用 Visual Studio 结合 AWS Beanstalk 发布高可用Web应用

这样咱们的应用程序的入口就是负载均衡器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/

相关文章
相关标签/搜索