亞馬遜網絡服務(AWS)客戶需要經歷五個步驟,才能駕馭云自動化。先要從只需點擊操作的AWS Web控制臺入手,最后是為云計算系統的聲明式模型編寫代碼。
1. 熟悉AWS Web控制臺
想盡快熟悉許多AWS服務,最簡便的方法就是,在AWS Web控制臺里面反復搗鼓和研究,看看發生什么情況。AWS控制臺塞滿了功能特性,每年都會出現更多的功能特性。AWS客戶關注一下許多儀表板,就能弄清楚哪些部分適用于其項目。AWS控制臺不僅僅面向新手,連經驗豐富的老手都在繼續使用AWS控制臺面板來處理手動工作。
AWS安全組限制了對服務的訪問。AWS控制臺里面的EC2儀表板有一個Security Groups(安全組)頁面。圖A顯示如何建立一個名為sgMail的安全組,允許來自互聯網的郵件請求。放馬過來吧,垃圾郵件發送者!
2. 使用AWS CLI
下一步就是使用AWS命令行工具。從Web進入到命令行感覺就好像你閉著眼睛四處走動。不過一旦你上了手,CLI工具用起來比Web控制臺來得快捷、靈活。
使用命令行工具查看那個sgMail安全組看起來就像這樣。
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:~ $簡明扼要。我只對事實感興趣。只需要事實。
3. 注重AWS API
之后,可以使用AWS API。這方面學起來難度最大。AWS客戶在開始編寫代碼、使用API之前,需要落實幾個方面。這幾個方面包括:
對Java、Node.js或Ruby等編程語言有一個基本的了解和認識;附件庫,以便該語言與AWS API進行聯系――AWS非常受歡迎,因而有面向Python的AWS SDK(名為Boto)、面向PHP的AWS SDK、面向Ruby的AWS SDK及面向另外許多語言的AWS SDK;編寫代碼的開發環境,開發環境可以像文件編輯工具這么簡單,也可以像微軟的Visual Studio這么復雜。4. 開始自動化!
一旦AWS客戶度過了處理AWS API的最困難階段,接下來就是玩樂時間了。隨之而來的是忍不住什么都想自動化!構建高可用性集群、程序包部署、安全補丁――這一切都可以借助代碼的魅力實現自動化。
實際上,自從有了AWS以來,編程人員就一直在讓AWS實現自動化。許多配置管理工具有助于讓技術架構的所有層實現自動化。
Vagrant(https://www.vagrantup.com)構建了一個本地開發環境。Jenkins(https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins)構建并測試軟件項目。AWS CloudFormation(http://aws.amazon.com/cn/cloudformation/)構建了一個遠程AWS環境。實際上,市面上有太多的自動化工具,以至于將它們整合到一條產品線是項復雜的任務。
自動化通常使用命令式語言來實現。
在經歷了安裝和配置方面的一些困難后,Python開發人員可以使用boto來處理AWS安全組。查看該sgMail組的命令看起來就像這樣。
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:~ $引用、對象、方法、列表操作符以及那個瘋狂的交互式Python ">>>"提示符,現在情況變得有點棘手。沒錯,同時也變得相當麻煩――控制臺的那些漂亮顏色現在成了遙遠的回憶。
5. 借助聲明式代碼
Puppet、Chef和Ansible等自動化應用程序都有各自的配置語言,可以幫助其用戶描述要求怎樣操作的模型。它們還有巧妙的引擎,可以讀取那些模型,并改變計算環境。
這些配置語言是聲明式語言。像上述Python例子這些計算機語言是命令式語言――它們適用于編寫逐步過程。聲明式語言描述了所要求的,而不是描述實現要求的步驟。SQL“select”語句是聲明式語句――它可能命令服務器“從表選擇記錄”,但是查找表、使用索引和顯示結果等操作的步驟被隱藏起來。
Puppet實驗室發布了一個新的模塊來配置AWS基礎設施。使用其中一個模塊意味著,可以在Puppet方面盡快上手。Puppet自動化方面學起來其難度就如同編寫代碼――客戶得處理好下面這些任務,才能使用Puppet:
Puppet應用程序和Ruby解釋器;使用RubyGems程序包管理器;編寫聲明。在安裝了新的Puppet AWS模塊后,AWS客戶可以使用清單文件來描述該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進行聯系,確保這個安全組存在――或者借助命令puppet apply aws-manifest.pp手動實現,或者使用Puppet主服務器(Puppet master)自動實現。