蘇翔宇
(深圳技師學(xué)院信息與通信學(xué)院,深圳 518116)
自2006 年亞馬遜AWS 公司提出 “云計算”的概念以來,云計算技術(shù)在短短十幾年間實(shí)現(xiàn)了突飛猛進(jìn)的發(fā)展,云計算行業(yè)的規(guī)模已經(jīng)達(dá)到萬億級別以上,其地位已經(jīng)超越傳統(tǒng)的物理數(shù)據(jù)中心,成為新一代的IT基礎(chǔ)設(shè)施。
成千上萬的企業(yè)想要把自己的業(yè)務(wù)遷移到“云” 上,如何快速高效地實(shí)現(xiàn)云中各種基礎(chǔ)設(shè)施和服務(wù)的部署?傳統(tǒng)的通過手動在云中配置云資源的方式效率低下且容易出錯。如何避免大量重復(fù)的基礎(chǔ)設(shè)施配置操作并降低部署故障率? 一種將基礎(chǔ)設(shè)施視為代碼的AWS CloudFor?mation 服務(wù), 有效地解決了以上問題。 AWS CloudFormation 服務(wù)使用JSON 或YAML 語言編寫的模板構(gòu)建堆棧部署云資源,對堆棧創(chuàng)建、更新、刪除的整個生命周期進(jìn)行管理,實(shí)現(xiàn)了云中基礎(chǔ)設(shè)施部署的自動化[1]。
在當(dāng)前工信部倡導(dǎo)百萬企業(yè)上云的趨勢下,越來越多的企業(yè)響應(yīng)號召開始了上 “云” 之路,準(zhǔn)備將全部或部分業(yè)務(wù)遷移到云上。由于很多企業(yè)原有的IT 基礎(chǔ)架構(gòu)和業(yè)務(wù)系統(tǒng)功能不同,其云遷移的方案也各不相同,但在遷移中有關(guān)網(wǎng)絡(luò)等基礎(chǔ)設(shè)施的部署都是必須的,要在云中先把基礎(chǔ)設(shè)施部署完成,才能著手遷移具體的業(yè)務(wù)[2]。
當(dāng)前的云計算服務(wù)提供商很多,以亞馬遜AWS 公有云為例,云中的基礎(chǔ)設(shè)施主要包括區(qū)域與可用區(qū)、VPC 與子網(wǎng)、安全組和網(wǎng)絡(luò)ACL、路由表、負(fù)載均衡器、防火墻、計算資源、存儲資源等,如圖1 所示。無論是哪種云遷移方案,從傳統(tǒng)的本地IT 系統(tǒng)遷移到云中的這些基礎(chǔ)設(shè)施資源都是必須的,基礎(chǔ)設(shè)施遷移方案的準(zhǔn)確與否是云遷移最終能否成功的關(guān)鍵。

圖1 云遷移中的基礎(chǔ)設(shè)施對應(yīng)
鑒于基礎(chǔ)設(shè)施在云中部署的先行性和重要性,企業(yè)在做云遷移時務(wù)必格外重視,但絕大多數(shù)企業(yè)在云中部署基礎(chǔ)設(shè)施都是采用手動的形式,這樣做的劣勢顯而易見,每次操作的方案隨機(jī)性大,部署的穩(wěn)定性欠缺,大量重復(fù)性操作,復(fù)用性差且方案更新難度大[3]。
AWS CloudFormation服務(wù)用代碼構(gòu)建云中的基礎(chǔ)設(shè)施,支持JSON 或YAML 語言,用戶可以使用堆棧文件包含所有用到的云資源,比如網(wǎng)絡(luò)資源、計算資源、存儲資源等,編輯完成之后運(yùn)行即可在云中直接生成這些基礎(chǔ)設(shè)施。除此之外,AWS CloudFormation服務(wù)還可以對整個堆棧進(jìn)行生命周期管理,這種自動化的部署和管理極大地降低了云中基礎(chǔ)設(shè)施構(gòu)建的難度以及之后堆棧運(yùn)維的復(fù)雜程度,還為將來的升級提供了堆棧更新等簡便易用的功能,可謂一舉多得。
下面以一家中小企業(yè)的云遷移案例為例制定了一套使用AWS CloudFormation服務(wù)部署基礎(chǔ)設(shè)施的方案,方案具體包括網(wǎng)絡(luò)層、應(yīng)用層、更新堆棧三個部分。
對于云中基礎(chǔ)設(shè)施和服務(wù)的部署要遵循合理的順序,才能保障部署任務(wù)順利完成,通常情況下首先要完成的是網(wǎng)絡(luò)層的部署。以下以構(gòu)建VPC和子網(wǎng)為例,介紹使用AWS CloudFor?mation服務(wù)部署網(wǎng)絡(luò)層的實(shí)現(xiàn)方案:


以上建立了一個地址范圍是10.0.0.0/16的VPC,為該VPC關(guān)聯(lián)了一個互聯(lián)網(wǎng)網(wǎng)關(guān),互聯(lián)網(wǎng)網(wǎng)關(guān)是VPC中的云資源通往互聯(lián)網(wǎng)的媒介。然后在VPC中構(gòu)建了一個地址范圍是10.0.0.0/24的公有子網(wǎng),并為該公有子網(wǎng)關(guān)聯(lián)了公有路由表,保證公有子網(wǎng)中的計算資源可以通過公有路由表經(jīng)由互聯(lián)網(wǎng)網(wǎng)關(guān)訪問互聯(lián)網(wǎng)。
在完成了基本的網(wǎng)絡(luò)層部署之后,接下來要部署應(yīng)用層資源,下面以EC2 虛擬機(jī)為例介紹計算資源的具體部署方案,包括虛擬機(jī)鏡像的選擇、初始化安裝的軟件和服務(wù)、公有網(wǎng)絡(luò)地址分配、安全組的定義等,具體方案如下:
AmazonLinuxAMIID:
Type: AWS::SSM::Parameter::Value
Default: /aws/service/ami?amazon?linux?latest/amzn2?ami?hvm?x86_64-gp2
WebServerInstance:
Type: AWS::EC2::Instance
Metadata:
'AWS::CloudFormation::Init':
packages:
yum:
httpd:[]
files:
/var/www/html/index.html
services:
sysvinit:
httpd:
enabled: true
ensureRunning: true
WebServerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId:
Fn::ImportValue:
!Sub ${NetworkStackName}-VPCID
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
以上定義了EC2 是使用linux gp2 類型的鏡像模板,初始化安裝了Apache web 應(yīng)用服務(wù)器軟件,安全組開放了80端口。
初次完成云資源部署之后,如果遇到方案的更新或是部署升級該怎么辦?這就要用到AWS CloudFormation服務(wù)的更新堆棧操作。本例是在2.1 和2.2 的基礎(chǔ)上,更新了原有方案中的安全組開放端口號,啟用更安全的https 協(xié)議來訪問。具體實(shí)現(xiàn)如下:
WebServerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId:
Fn::ImportValue:
!Sub ${NetworkStackName}-VPCID
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
以上安全組進(jìn)行更新只開放了443端口,替代了原有的80 端口,使用https 協(xié)議,通過傳輸加密和身份認(rèn)證增強(qiáng)了信息傳輸?shù)陌踩浴?/p>
復(fù)用性是AWS CloudFormation 服務(wù)的一大優(yōu)勢,一次編寫多次使用,例如某個企業(yè)在某次進(jìn)行云遷移時使用的堆棧文件可以在以后直接使用[4]。但企業(yè)面臨的真實(shí)環(huán)境往往很復(fù)雜,比如兩次遷移間隔了一定的時間,IT 基礎(chǔ)架構(gòu)和業(yè)務(wù)都發(fā)生了變化無法直接使用之前的堆棧文件。此時,可以使用更新堆棧的方法,把更新的部分放在一個新的文件里,在原有堆棧文件執(zhí)行之后,再執(zhí)行一次新的文件就可以了。
當(dāng)用戶構(gòu)建的堆棧不再使用需要刪除時,如何避免磁盤上的數(shù)據(jù)丟失以及故障時修復(fù)?通常的做法是定制堆棧刪除策略,以下策略就是在磁盤刪除時建立磁盤快照,以便今后可以通過快照還原磁盤數(shù)據(jù)。
DiskVolume:
Type: AWS::EC2::Volume
Properties:
Size: 100
AvailabilityZone: !GetAtt WebServerInstance.
AvailabilityZone
Tags:
- Key: Name
Value: Web Data
DeletionPolicy: Snapshot
在我國進(jìn)行數(shù)字化經(jīng)濟(jì)轉(zhuǎn)型的大背景下,云計算已經(jīng)成為新一代的信息基礎(chǔ)設(shè)施,如何讓企業(yè)可以將業(yè)務(wù)平滑地遷移到 “云” 上是亟待解決的問題。本文的研究就是致力于為中小企業(yè)提供高效快捷的較為通用的云中基礎(chǔ)設(shè)施自動化部署方案。