使用 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/

相關文章
相關標籤/搜索