codedeploy是aws上面的一個自動部署服務,能夠自動的將應用程序部署到EC2實例、本地實例(任意的線上或線下本身的一臺機器)、無實例的lamda函數、ECS上面。git
能夠部署的應用程序包括:代碼、無服務器的lamda函數、web和配置、可執行文件、包、腳本、多媒體文件。github
能夠部署到一個或數千個實例。web
1)就地部署:中止部署組中每一個實例上的應用程序,安裝最新的應用程序修訂版,並啓動並驗證新版本的應用程序。您可使用負載平衡器,以便在部署期間取消註冊每一個實例,而後在部署完成後恢復爲服務。只有使用EC2 / On-Premises計算平臺的部署才能使用就地部署。json
工做原理:建立可部署的內容,添加應用程序規範文件 (AppSpec文件:定義了CodeDeploy執行的部署操做),將可部署內容和AppSpec文件捆綁到存檔文件中,而後上傳到s3或github中,此時的歸檔文件稱爲應用程序修訂版 --> 告訴codedeploy新代碼或部署內容在哪,codedeploy調用一組EC2 --> 每臺EC2上面的EC2實例輪詢codedeploy,肯定在哪得到新的內容和時間 --> 每一個實例上的CodeDeploy代理從S3或GitHub上提取新代碼,並使用AppSpec文件中的指令將內容部署到實例。服務器
2)藍綠部署:藍/綠部署將應用程序原始環境中的流量從新路由到替換環境,環境取決於codedeploy應用程序的計算平臺。app
AWS Lambda:流量從 Lambda 函數的一個版本轉移到同一 Lambda 函數的新版本。負載均衡
Amazon ECS:流量從 Amazon ECS 服務中的任務集轉移到同一 Amazon ECS 服務中更新的替換任務集。函數
EC2/本地:流量從原始環境中的一組實例轉移到一組替換實例。測試
全部 AWS Lambda 和 Amazon ECS 部署都是藍/綠部署。EC2/本地部署能夠是就地部署或藍/綠部署。藍綠部署相比較就地部署的優點:spa
1)能夠在新的替換環境中安裝和測試應用程序,在部署的時候只須要從新路由流量就能夠應用到生產環境中;
2)若是是EC2或本地實例,切換回最新的程序版本將更快,更可靠。這是由於只要原始實例沒有被終止,流量就能夠路由回原始實例,而在就地部署中,必須從新部署上一個版本的應用程序來進行回滾;
3)若是生產環境使用的是EC2或本地實例,則會爲藍綠部署預置新的實例,而且新實例是最新的服務器配置,能夠避免生產實例長時間運行出現的問題;
4)若是使用的是lambda計算平臺,則須要控制流量如何從原始地lambda函數版本轉移到新的lambda函數版本。
例:在EC2或本地實例上作藍綠部署:
注(使用藍綠部署必須使用AWS的EC2實例,不但是本地實例);若是使用EC2或本地計算平臺必須有一個或多個帶有標識的EC2標籤或EC2 Auto Scaling 組的 EC2 實例(這些實例必須知足:每一個EC2實例必須附加有正確的IAM實例配置文件,而且在每臺實例上安裝運行codedeploy代理);一般,您還會有一個在原始環境中的實例上運行的應用程序修訂,但這對藍/綠部署來講不是必需的。
當建立使用藍綠部署的部署組的時候,能夠選擇如何指定替換環境:{
複製現有 Amazon EC2 Auto Scaling 組:在藍綠部署中,codedeploy將在部署期間爲替換環境建立實例,CodeDeploy 將使用指定的 Amazon EC2 Auto Scaling 組做爲替換環境的模板,其中包括相同數量的正在運行的實例和許多其餘配置選項。
手動選擇實例:使用 Amazon EC2 實例標籤或 Amazon EC2 Auto Scaling 組名稱指定要計爲替換項的實例,選擇了此項,在部署前無需指定替換環境的實例。
操做方式:
1)已有充當原始環境的一些實例或一個 Amazon EC2 Auto Scaling 組。首次運行藍/綠部署時,您一般使用已在就地部署中使用的實例;
2)在codedeploy中建立一個藍綠部署,在其中除了就地部署所需的選項以外,還要指定如下內容:
在藍/綠部署過程期間,將流量從您原始環境路由到替換環境的負載均衡器。
當即將流量從新路由到替換環境仍是等待您手動路由。
流量路由到替換實例的速率。
被替換的實例是終止仍是繼續運行。
3)爲此部署建立了一個部署將會發生如下狀況:
若是選擇複製 Amazon EC2 Auto Scaling 組,則將爲您的替換環境預置實例;
指定部署的應用程序將安裝在替換環境上;
若是在部署組中設置了等待時間,部署將暫停,這是是對替換環境測試和驗證的時間,若是未在等待以前進行手動路由流量,部署將中止;
替換環境中的實例向 Elastic Load Balancing 負載均衡器註冊,流量開始路由到這些實例;
原始環境中的實例將取消註冊,並根據部署組中的規範進行處理,要麼終止,要麼繼續運行。
應用:惟一標識要部署的應用程序的名稱。代碼部署使用此名稱 (用做容器), 以確保在部署過程當中引用修訂、部署配置和部署組的正確組合。
計算平臺:codedeploy部署應用程序的平臺。EC2/本地:能夠做爲 Amazon EC2 雲實例或本地服務器的物理服務器實例。使用 EC2或本地計算平臺建立的應用程序能夠包括可執行文件、配置文件和映像等。使用 EC2/本地 計算平臺的部署經過使用就地部署或藍/綠部署類型,管理流量定向到實例的方式。
部署配置:codedeploy在部署期間使用的一組部署規則、部署成功條件、失敗條件。若是部署採用的是EC2或本地實例,能夠爲部署指定最少數量的運行正常實例。
部署組:一組單獨的實例。部署組包含單獨標記的實例或 Amazon EC2 Auto Scaling 組中的 Amazon EC2 實例
部署類型:用於在部署組中的實例上,提供最新的的應用程序修訂的方法。
IAM實例配置文件:一種附加到EC2實例的IAM角色。此配置文件包含了訪問S3和github的訪問權限。
修訂:lambda部署修訂是一種yaml格式或json格式的文件,指定有關要部署的lambda函數的信息。EC2本地部署修訂是一個存檔文件,包含源內容(源代碼、網頁、可執行文件和部署腳本)以及 application specification file (AppSpec file)。AWS Lambda 修訂可存儲在 Amazon S3 中。EC2/本地 修訂存儲在 Amazon S3 或 GitHub 中。
服務角色:一組用於向aws服務授予權限即可以訪問aws服務資源的IAM角色,在codedeploy中,服務角色用於:
讀取應用於實例的標記與實例關聯的EC2 auto scaling 組名,這使codedeploy可以標識它,可將應用程序部署到實例;(使codedeploy對實例有部署的權限,)
對實例、EC2 auto scaling 組和elastic load balancing負載均衡器執行操做;(有執行操做的權利)
將信息發佈到aws SNS主題,以便在發生指定的部署或實例事件時發送通知;(使codedeploy有發送信息到SNS的權利)
檢索cloudwatch警報信息,設置部署的警報監視。
目標版本:將要部署的目標版本