自動化部署服務——AWS CodeDeploy 快速入門
作為DevOps和微服務的深入踐行者,Amazon在內部積累了許多持續整合、交付和部署的自動化工具和平臺。其中, Apollo作為程式碼部署的自動化平臺,每年進行超過5000萬次部署。
為了能夠讓廣大開發者和企業使用者使用到功能豐富且久經考驗的程式碼部署平臺,在Apollo的經驗基礎上,AWS釋出了自動化部署服務——CodeDeploy。
平臺介紹
AWS CodeDeploy旨在幫助使用者完成應用的快速部署,按照使用者指定的策略將程式碼部署在一組EC2伺服器上。使用者策略可以包括叢集部署速度、部署事件通知、警報處理策略等。此外,CodeDeploy還可以和彈性負載均衡(Elastic Load Balancer)、自動擴充套件組(Auto Scaling Group)等服務結合,完成無縫升級和動態部署。
為方便有效地組織部署任務,CodeDeploy設立了三個概念:應用(Application)、部署(Deployment),以及部署配置(Deployment Configuration)。
1)應用程式(Application)
應用程式是部署的核心,由部署組(Deployment Group)和程式碼修訂(Revisions)組成。一個應用可以包含多個部署組,一個部署組又可以包含多臺EC2伺服器。同時,一個伺服器也可以屬於多個部署組,因為一個伺服器可能同時執行多個應用。
1.1)部署組
建立或修改部署組時,如果新增EC2伺服器,可以通過標籤(Tag)對已有的EC2伺服器進行篩選。所以,在建立EC2時一定要打上標籤(Tag),便於在建立應用的部署組時找到對應業務的伺服器。
此外,部署組還可以新增自動擴充套件組(Auto Scaling Group),以及使用者自己機房的主機(On-Premise Instance)。
1.2)程式碼修訂
程式碼修訂儲存了當前應用涉及到得所有程式碼,程式碼的存放位置可以在S3或Github。
如果使用者自建程式碼託管,當需要部署時,可以在工作機上同步程式碼到本地,然後使用AWS命令列進行打包上傳。
aws deploy push --application-name <MyAppName> \
--s3-location s3://<MyBucketName>/<MyNewAppBundleName> \
--source <PathToMyBundle>
上面的命令可以將執行目錄下得程式碼打包上傳到S3,同時顯示在關聯應用的程式碼修訂一欄中。
2)部署(Deployment)
每一次部署都有唯一的ID標記,並儲存所有資訊,如程式碼來源、部署時間、目標伺服器、部署結果等。並且針對每一臺伺服器,都可以詳細檢視部署過程中的事件(如下載程式、安裝前檢查、 程式啟動、安裝後檢查等7個事件),以便追蹤部署的各個步驟。當部署出錯時,可以快速定位和排查。
3)部署配置(Deployment Configuration)
部署配置存放了一次部署的伺服器臺數或百分比,在發起部署時需要指定所需配置。CodeDeploy預設提供了三種配置:一次部署一臺、一次部署一半數量的伺服器,以及一次完成全部部署。部署發起後,CodeDeploy會按照上述策略進行工作,指導完成部署組內全部伺服器的更新。
如果使用者要自定義部署策略,建議使用命令列完成。比如下面的例子建立的配置就是一次完成20%的伺服器部署。
aws deploy create-deployment-config --deployment-config-name ThreeQuartersHealthy --minimum-healthy-hosts type=FLEET_PERCENT,value=20
此外,CodeDeploy還可以管理物理主機(或第三方主機)。只要在物理主機上安裝和配置CodeDeploy Agent,Agent向CodeDeploy註冊完成後,CodeDeploy就可以像管理 EC2伺服器一樣在物理伺服器上部署應用。
伺服器配置
CodeDeploy是通過與部署在伺服器上的Agent通訊,實現程式碼部署的。
1)伺服器角色
由於Agent需要訪問S3下載程式碼,所以EC2伺服器需要配置角色(Role)以保證Agent對S3的讀取許可權。建立一個IAM Policy包含如下內容,在建立所需的角色關聯這個Policy。然後,在建立EC2伺服器時,關聯此角色。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:Get*",
"s3:List*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
2)Agent安裝
Agent可以在建立EC2時通過User Data安裝,也可以登入到伺服器上安裝。
如果使用User Data安裝,模板如下:
#!/bin/bash
yum -y update
yum install -y ruby
yum install -y aws-cli
cd /home/ec2-user
aws s3 cp s3://bucket-name/latest/install . --region region-name
chmod +x ./install
./install auto
其中,關於bucket-name和region-name,請查閱下面連結,找到對應Region的替換名稱。
例如,北京Region的User Data是:
#!/bin/bash
yum -y update
yum install -y ruby
yum install -y aws-cli
cd /home/ec2-user
aws s3 cp s3://aws-codedeploy-cn-north-1/latest/install . --region cn-north-1
chmod +x ./install
./install auto
如果是選擇先建立EC2伺服器,再安裝Agent,請注意使用sudo以root許可權安裝。詳情請見:
部署完成後,使用如下命令檢驗Agent是否工作正常。
sudo service codedeploy-agent status
使用者端配置
如前文所述,使用者可以通過aws deploy push命令來完成程式碼打包上傳。但打包內容除了應用程式程式碼外,還包含了一個AppSpec.yml檔案和一些用於處理安裝中一個或多個事件的指令碼。
AppSpec.yml指令碼不僅定義了程式碼部署的路徑,而且指定了部署過程中相關事件的處理指令碼。部署事件有7個,可以按需選擇指定。
使用者把程式碼、AppSpec.yml、事件指令碼通過aws deploy push命令打包上傳後,使用者就可以通過CodeDeploy圖形化平臺選擇對應的程式碼修訂(Revision)進行部署了。當然,繼續使用命令列進行部署,更是高效的方法。
此外,CodeDeploy還可以和常見的持續整合工具協同工作,如Jenkins、Travis CI等。
案例分享
GILT是一家專注服飾的電商平臺,成立於2007年,總部位於紐約,員工超過1000人。 2016年1月,GILT以2億5千萬美金的價格被收購。
GILT的特色業務之一就是促銷,並且是在每天中午開售。為了能夠靈活、快速地應對業務壓力,GILT的DevOps團隊基於微服務來設計和部署平臺,並採用了Docker提高平臺的彈性。其部署平臺經歷過數次演化,目前是第五代平臺NOVA(程式碼已開源)。CodeDeploy在最新一代的平臺中,結合Cloudformation完成核心部署工作,NOVA通過AWS API/SDK完成對CodeDeploy和Cloudformation的呼叫。
擴充套件閱讀
The Story of Apollo – Amazon’s Deployment Engine
AWS Codedeploy plugin for Jenkins
AWS CodeDeploy for Travis CI
GILT NOVA
作者介紹
代聞
AWS解決方案架構師,負責基於AWS的雲端計算方案架構的諮詢和設計,同時致力於AWS雲服務在國內的應用和推廣,在大規模後臺架構、物聯網應用、媒體行業轉型、企業混合IT和自動化運維等方面有著廣泛的設計和實踐經驗。在加入AWS之前,在思科中國擔任系統工程師,負責方案諮詢和架構設計,在企業私有云和基礎網路方面有豐富經驗。曾任IBM中國軟體開發中心軟體工程師,從事企業軟體和移動平臺的開發工作。
相關推薦
自動化部署服務——AWS CodeDeploy 快速入門
作為DevOps和微服務的深入踐行者,Amazon在內部積累了許多持續整合、交付和部署的自動化工具和平臺。其中, Apollo作為程式碼部署的自動化平臺,每年進行超過5000萬次部署。 為了能夠讓廣大開發者和企業使用者使用到功能豐富且久經考驗的程式碼部署平臺,在Apollo的
可持續自動化構建微服務(10)SpringCloud 快速入門
第十章 SpringCloud 快速入門 按照官方的話說:Spring Cloud 為開發者提供了在分散式系統(如配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、一次性 Token、全域性鎖、決策競選、分散式會話和叢集狀態)操作的開發工具。最關鍵的是它足夠簡單,一般
buildbot自動化測試工具安裝及快速入門
buildbot自動化測試工具 搭建一個完全自動化的buildbot伺服器相對來說比較麻煩,所以打算開幾條部落格來具體說明,我以git作為本次搭建測試自動化測試的例子, 由於本次自動化測試伺服器需要一臺buildmaster主機、兩臺buildslave
Kubernetes(k8s)中文文件 AWS EC2快速入門_Kubernetes中文社群
譯者:李加慶 前提條件 1.您需要一個AWS賬戶,訪問http://aws.amazon.com獲得。 2.安裝並配置AWS命令列介面。 3.你需要一個擁有EC2全部許可權的AWS例項配置檔案和角色。 注:這個指令碼預設使用“預設”的AWS例項配置檔案,您可以使用 AWS_DEFAULT_PROFI
AWS CodeDeploy 自動化部署工具_程式碼自動化部署
AWS CodeDeploy 是一項將軟體自動部署到各種計算服務(例如 Amazon EC2、AWS Lambda 和本地伺服器)的完全託管的部署服務。藉助 AWS CodeDeploy,您可以更輕鬆地快速釋出新功能,避免在應用程式部署過程中出現停機,並簡化應用程式的更新工作。您可以使用
AWS CodeDeploy價格_程式碼自動化部署
對於 EC2/Lambda 上的 CodeDeploy:通過 AWS CodeDeploy 向 Amazon EC2 或 AWS Lambda 部署程式碼不會產生額外收費。 針對本地 CodeDeploy:使用 AWS CodeDeploy 進行的每次本地例項更新費用為 0.
AWS CodeDeploy常見問題_程式碼自動化部署
version: 0.0 os: linux files: # You can specify one or more mappings in the files section. - source: / destination: /var/www/html/Wor
快速入門系列--WCF--02消息、會話與服務寄宿
abc align bsp 不同的 cpu .org 程序 伸縮 網絡 經過WCF基礎的ABC學習,已經可以構建簡單的WCF的服務,使用不同的服務地址和綁定類型,根據業務提供所需的服務契約。但不禁想問,服務所使用的消息報文是什麽樣的形式麽?蘊含什麽樣內容呢?WCF服務是否支
品嘗阿裏雲容器服務:初步嘗試ASP.NET Core Web API站點的Docker自動化部署
asp.net title build 阿裏雲服務器 arm web 容器服務 倉庫 acs 部署場景是這樣的,我們基於 ASP.NET Core 2.0 Preview 1 開發了一個用於管理緩存的 Web API ,想通過阿裏雲容器服務基於 Docker 部署為內網服務
DB2 Connect 服務器快速入門pdf
sun tar 系統 page ctf 包括 入門 配置 -c 下載地址:網盤下載 DB2 Connect 服務器快速入門 安裝和配置DB2 Connect服務器9.7 安裝和配置DB2 connect 服務器提供準備及安裝db2 connect服務器產品所需的所有信息。其
openvpn部署之快速入門實戰+一鍵部署openvpn腳本
openvpn軟件環境: Centos6.9 x64 openvpn-2.4.3-1.el6.x86_64.rpm easy-rsa-2.2.2-1.el6.noarch.rpm #推薦使用2.2的版本 pkcs11-helper-1.11-3.el6.x86_64.rpm網絡環
快速入門web接口自動化測試---知識與思想準備階段(一)
重要 請求 協議 工具 簡單 目標 多說 tro font 剛換了工作,老板要求我搞接口自動化,可是之前完全沒有搞過,怎麽辦?怎麽辦?答:先把B裝下了,然後學!個人感覺,這是在工作提升自己的最好方式,嘻嘻,鄙人在這裏以日記的形式,記錄自己作為一個技術渣,點點滴滴
webpack快速入門——配置文件:服務和熱更新
並且 base 復制 暴露 span port 錯誤 tput 自己的 1.在終端安裝 cnpm i webpack-dev-server --save-dev 2.配置好後執行 webpack-dev-server,這時候會報錯 出現錯誤,只需要在pagejson裏
【ASP.NET Core快速入門】(四)在CentOS上安裝.NET Core運行時、部署到CentOS
ati libunwind serve code api cal 之前 prompt conn 下載.NET Core SDK 下載地址:https://www.microsoft.com/net/download/windows 第一步:Add the dotne
Twitter如何在數千臺服務器上快速部署代碼?
名稱 做出 有效 hit 重要 tor rail git 過程 答案是:用BT,也就是你我應該都很熟悉的BitTorrent。 對於網站經營者、創業者來說,擴展性的問題是在網站流量成長過程中勢必會面對的問題,如何建立一個具有擴展性的架構(scalable archit
Spring Cloud Spring Boot mybatis分布式微服務雲架構(一)快速入門
springboot springcloud mybatis eureka config 快速入門本章主要目標完成Spring Boot基礎項目的構建,並且實現一個簡單的Http請求處理,通過這個例子對Spring Boot有一個初步的了解,並體驗其結構簡單、開發快速的特性。 系統要求:J
[自動化] 部署Ansible服務及其常用的命令模塊
ansible images 連接方式 sys command 交互 ansible配置 安裝部署 inventory Ansible簡介: Ansible基於Python開發,默認通過SSH協議進行遠程命令執行或下發配置,無需部署任何客戶端代理軟件,可同時支持多臺主機進
[自動化]Puppet服務安裝和部署
system ets 目的 sha 修改權限 info emc ESS unix puppet簡介 puppet是一種基於ruby語言開發的Lnux、Unix、windows平臺的集中配置管理系統。它使用自有的puppet描述語言,可管理配置文件file、用戶user、c
【ASP.NET Core快速入門】(二)部署到IIS
圖片 cor .com servers 訪問 publish img 控制臺 -m 原文:【ASP.NET Core快速入門】(二)部署到IIS配置IIS模塊 ASP.NET Core Module載地址:https://docs.microsoft.com/en-us/
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰
大數據平臺 不用 send 指定 主機ip http 產品 oca 負責 一、概述分析 由於互聯網的快速發展導致產品更新換代速度逐漸加快,運維人員每天都要進行大量的維護操作,仍舊按照傳統方式進行維護會使得工作效率低下。這時,部署自動化運維就可以盡可能安全、高效地完成這些工