云自動(dòng)化難駕馭?五步簡(jiǎn)化你的AWS自動(dòng)化部署
譯文亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)客戶需要經(jīng)歷五個(gè)步驟,才能駕馭云自動(dòng)化。先要從只需點(diǎn)擊操作的AWS Web控制臺(tái)入手,最后是為云計(jì)算系統(tǒng)的聲明式模型編寫代碼。
1. 熟悉AWS Web控制臺(tái)
想盡快熟悉許多AWS服務(wù),最簡(jiǎn)便的方法就是,在AWS Web控制臺(tái)里面反復(fù)搗鼓和研究,看看發(fā)生什么情況。AWS控制臺(tái)塞滿了功能特性,每年都會(huì)出現(xiàn)更多的功能特性。AWS客戶關(guān)注一下許多儀表板,就能弄清楚哪些部分適用于其項(xiàng)目。AWS控制臺(tái)不僅僅面向新手,連經(jīng)驗(yàn)豐富的老手都在繼續(xù)使用AWS控制臺(tái)面板來(lái)處理手動(dòng)工作。
AWS安全組限制了對(duì)服務(wù)的訪問(wèn)。AWS控制臺(tái)里面的EC2儀表板有一個(gè)Security Groups(安全組)頁(yè)面。圖A顯示如何建立一個(gè)名為sgMail的安全組,允許來(lái)自互聯(lián)網(wǎng)的郵件請(qǐng)求。放馬過(guò)來(lái)吧,垃圾郵件發(fā)送者!
2. 使用AWS CLI
下一步就是使用AWS命令行工具。從Web進(jìn)入到命令行感覺(jué)就好像你閉著眼睛四處走動(dòng)。不過(guò)一旦你上了手,CLI工具用起來(lái)比Web控制臺(tái)來(lái)得快捷、靈活。
使用命令行工具查看那個(gè)sgMail安全組看起來(lái)就像這樣。
- nick:~ $ aws ec2 describe-security-groups --group-names sgMail
- SECURITYGROUPS Mail access from Internet sg-40199d36 sgMail 243894605340
- IPPERMISSIONS 25 tcp 25
- IPRANGES 0.0.0.0/0
- IPPERMISSIONS 110 tcp 110
- IPRANGES 0.0.0.0/0
- IPPERMISSIONS 143 tcp 143
- IPRANGES 0.0.0.0/0
- IPPERMISSIONS 465 tcp 465
- IPRANGES 0.0.0.0/0
- IPPERMISSIONS 993 tcp 993
- IPRANGES 0.0.0.0/0
- IPPERMISSIONS 995 tcp 995
- IPRANGES 0.0.0.0/0
- nick:~ $
簡(jiǎn)明扼要。我只對(duì)事實(shí)感興趣。只需要事實(shí)。
3. 注重AWS API
之后,可以使用AWS API。這方面學(xué)起來(lái)難度最大。AWS客戶在開始編寫代碼、使用API之前,需要落實(shí)幾個(gè)方面。這幾個(gè)方面包括:
- 對(duì)Java、Node.js或Ruby等編程語(yǔ)言有一個(gè)基本的了解和認(rèn)識(shí);
- 附件庫(kù),以便該語(yǔ)言與AWS API進(jìn)行聯(lián)系――AWS非常受歡迎,因而有面向Python的AWS SDK(名為Boto)、面向PHP的AWS SDK、面向Ruby的AWS SDK及面向另外許多語(yǔ)言的AWS SDK;
- 編寫代碼的開發(fā)環(huán)境,開發(fā)環(huán)境可以像文件編輯工具這么簡(jiǎn)單,也可以像微軟的Visual Studio這么復(fù)雜。
4. 開始自動(dòng)化!
一旦AWS客戶度過(guò)了處理AWS API的最困難階段,接下來(lái)就是玩樂(lè)時(shí)間了。隨之而來(lái)的是忍不住什么都想自動(dòng)化!構(gòu)建高可用性集群、程序包部署、安全補(bǔ)丁――這一切都可以借助代碼的魅力實(shí)現(xiàn)自動(dòng)化。
實(shí)際上,自從有了AWS以來(lái),編程人員就一直在讓AWS實(shí)現(xiàn)自動(dòng)化。許多配置管理工具有助于讓技術(shù)架構(gòu)的所有層實(shí)現(xiàn)自動(dòng)化。
- Vagrant(https://www.vagrantup.com)構(gòu)建了一個(gè)本地開發(fā)環(huán)境。
- Jenkins(https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins)構(gòu)建并測(cè)試軟件項(xiàng)目。
- AWS CloudFormation(http://aws.amazon.com/cn/cloudformation/)構(gòu)建了一個(gè)遠(yuǎn)程AWS環(huán)境。
實(shí)際上,市面上有太多的自動(dòng)化工具,以至于將它們整合到一條產(chǎn)品線是項(xiàng)復(fù)雜的任務(wù)。
自動(dòng)化通常使用命令式語(yǔ)言來(lái)實(shí)現(xiàn)。
在經(jīng)歷了安裝和配置方面的一些困難后,Python開發(fā)人員可以使用boto來(lái)處理AWS安全組。查看該sgMail組的命令看起來(lái)就像這樣。
- nick:~ $ python
- Python 2.7.6 (default, Sep 9 2014, 15:04:36)
- [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
- Type "help", "copyright", "credits" or "license" for more information.
- >>> import boto.ec2
- >>> conn = boto.ec2.connect_to_region('eu-west-1')
- >>> rs = conn.get_all_security_groups()
- >>> print rs
- [SecurityGroup:sgMail, SecurityGroup:default]
- >>> sg = rs[0]
- >>> sg.name
- u'sgMail'
- >>> sg.rules
- [IPPermissions:tcp(25-25), IPPermissions:tcp(110-110), IPPermissions:tcp(143-143),
- IPPermissions:tcp(465-465), IPPermissions:tcp(993-993), IPPermissions:tcp(995-995)]
- >>> quit()
- nick:~ $
引用、對(duì)象、方法、列表操作符以及那個(gè)瘋狂的交互式Python ">>>"提示符,現(xiàn)在情況變得有點(diǎn)棘手。沒(méi)錯(cuò),同時(shí)也變得相當(dāng)麻煩――控制臺(tái)的那些漂亮顏色現(xiàn)在成了遙遠(yuǎn)的回憶。
5. 借助聲明式代碼
Puppet、Chef和Ansible等自動(dòng)化應(yīng)用程序都有各自的配置語(yǔ)言,可以幫助其用戶描述要求怎樣操作的模型。它們還有巧妙的引擎,可以讀取那些模型,并改變計(jì)算環(huán)境。
這些配置語(yǔ)言是聲明式語(yǔ)言。像上述Python例子這些計(jì)算機(jī)語(yǔ)言是命令式語(yǔ)言――它們適用于編寫逐步過(guò)程。聲明式語(yǔ)言描述了所要求的,而不是描述實(shí)現(xiàn)要求的步驟。SQL“select”語(yǔ)句是聲明式語(yǔ)句――它可能命令服務(wù)器“從表選擇記錄”,但是查找表、使用索引和顯示結(jié)果等操作的步驟被隱藏起來(lái)。
Puppet實(shí)驗(yàn)室發(fā)布了一個(gè)新的模塊來(lái)配置AWS基礎(chǔ)設(shè)施。使用其中一個(gè)模塊意味著,可以在Puppet方面盡快上手。Puppet自動(dòng)化方面學(xué)起來(lái)其難度就如同編寫代碼――客戶得處理好下面這些任務(wù),才能使用Puppet:
- Puppet應(yīng)用程序和Ruby解釋器;
- 使用RubyGems程序包管理器;
- 編寫聲明。
在安裝了新的Puppet AWS模塊后,AWS客戶可以使用清單文件來(lái)描述該sgMail組,就像這樣。
- nick:~ $ cat /etc/puppet/manifests/aws-manifest.pp
- ec2_securitygroup { 'sgMail':
- region => 'eu-west-1',
- ensure => present,
- description => 'Mail access from Internet',
- ingress => [{
- protocol => 'tcp',
- port => 25,
- cidr => '0.0.0.0/0',
- },{
- protocol => 'tcp',
- port => 110,
- cidr => '0.0.0.0/0',
- },{
- protocol => 'tcp',
- port => 143,
- cidr => '0.0.0.0/0',
- },{
- protocol => 'tcp',
- port => 465,
- cidr => '0.0.0.0/0',
- },{
- protocol => 'tcp',
- port => 993,
- cidr => '0.0.0.0/0',
- },{
- protocol => 'tcp',
- port => 995,
- cidr => '0.0.0.0/0',
- }],
- }
- nick:~ $
然后,客戶就可以讓Puppet與AWS進(jìn)行聯(lián)系,確保這個(gè)安全組存在――或者借助命令puppet apply aws-manifest.pp手動(dòng)實(shí)現(xiàn),或者使用Puppet主服務(wù)器(Puppet master)自動(dòng)實(shí)現(xiàn)。
貴企業(yè)在自動(dòng)化這條路上走了多遠(yuǎn)?
并非所有企業(yè)都走完自動(dòng)化這條路。有些企業(yè)走到第四步,再也走不下去。
至此,企業(yè)客戶已經(jīng)有了一條產(chǎn)品線,所以自動(dòng)化項(xiàng)目在優(yōu)先事項(xiàng)列表上的名次有可能下滑。要是審計(jì)失敗、運(yùn)營(yíng)成本、市場(chǎng)份額縮小或其他問(wèn)題帶來(lái)了業(yè)務(wù)驅(qū)動(dòng)因素,企業(yè)可能只好決定投入額外的時(shí)間和開支,從“可運(yùn)行”階段進(jìn)入到“順暢運(yùn)行”階段。
英文原文鏈接:http://www.techrepublic.com/article/puppet-configuration-the-ultimate-aws-automation/