1. 前言
本文主要記錄了使用CloudFormation設(shè)計(jì)器創(chuàng)建模板色鸳、使用模板創(chuàng)建堆棧和堆棧集的過(guò)程观挎。CloudFormation是在AWS上實(shí)踐基礎(chǔ)設(shè)施即代碼的重要服務(wù)之一蚣录,其功能類似OpenStack中的Heat服務(wù),使用該服務(wù),我們能夠使用模板定義創(chuàng)建土榴、配置云服務(wù)資源的操作氨菇,利用模板進(jìn)行資源的創(chuàng)建能夠減少重復(fù)的勞動(dòng)儡炼,提高效率,比如:
- 使用一份CloudFormation模板為開(kāi)發(fā)查蓉、測(cè)試乌询、類生產(chǎn)、生產(chǎn)環(huán)境分別創(chuàng)建一致的基礎(chǔ)設(shè)施
- 使用一份CloudFormation模板在新的Region為拓展的業(yè)務(wù)創(chuàng)建與已有Region一致的基礎(chǔ)設(shè)施
AWS關(guān)于CloudFormation的介紹如下:
AWS CloudFormation 是一種讓開(kāi)發(fā)人員和企業(yè)都能輕松創(chuàng)建相關(guān) AWS 資源集合豌研,并按順序和可預(yù)測(cè)的方式對(duì)其進(jìn)行預(yù)配置的服務(wù)妹田。
AWS提供的與基礎(chǔ)設(shè)施自動(dòng)化唬党、自動(dòng)化部署相關(guān)的服務(wù)除了CloudFormation外,還有OpsWorks鬼佣、Elastic Beanstalk驶拱、CodeDeploy等:
服務(wù)名稱 | 功能描述 | 為了方便理解而進(jìn)行的不太恰當(dāng)?shù)墓δ茴惐?/th> |
---|---|---|
CloudFormation | AWS CloudFormation 是一種讓開(kāi)發(fā)人員和企業(yè)都能輕松創(chuàng)建相關(guān) AWS 資源集合,并按順序和可預(yù)測(cè)的方式對(duì)其進(jìn)行預(yù)配置的服務(wù)晶衷。 | OpenStack Heat |
OpsWorks | AWS OpsWorks for Chef Automate 可以提供一個(gè)完全托管的 Chef 服務(wù)器和全套自動(dòng)化工具蓝纲,讓您可以通過(guò)工作流自動(dòng)化來(lái)實(shí)現(xiàn)連續(xù)部署以及合規(guī)性與安全性的自動(dòng)測(cè)試,并能通過(guò)一個(gè)用戶界面查看各種節(jié)點(diǎn)及其狀態(tài)晌纫。Chef 服務(wù)器可以處理軟件與操作系統(tǒng)配置税迷、軟件包安裝和數(shù)據(jù)庫(kù)設(shè)置等多種操作任務(wù),讓您實(shí)現(xiàn)全棧自動(dòng)化锹漱。Chef 服務(wù)器可以集中存儲(chǔ)您的配置任務(wù)箭养,并將其提供給任意規(guī)模的計(jì)算環(huán)境中的每個(gè)節(jié)點(diǎn),節(jié)點(diǎn)數(shù)量既可以是幾個(gè)也可以是數(shù)千個(gè)哥牍。OpsWorks for Chef Automate 與 Chef 社區(qū)中提供的各種工具和說(shuō)明書(shū)完全兼容露懒,并會(huì)將新的節(jié)點(diǎn)自動(dòng)注冊(cè)到您的 Chef 服務(wù)器。 | 結(jié)合CMDB和統(tǒng)一部署工具 |
Elastic Beanstalk | AWS Elastic Beanstalk 讓開(kāi)發(fā)人員能夠更加輕松地在 AWS 云中快速部署和管理應(yīng)用程序砂心。開(kāi)發(fā)人員只需上傳應(yīng)用程序懈词,Elastic Beanstalk 將自動(dòng)處理容量預(yù)配置、負(fù)載均衡辩诞、Auto Scaling 和應(yīng)用程序運(yùn)行狀況監(jiān)控的部署細(xì)節(jié)坎弯。 | OpenStack Murano,看描述感覺(jué)功能很強(qiáng)大译暂,但可能是以加大上傳的應(yīng)用的開(kāi)發(fā)難度為代價(jià)的 |
CodeDeploy | AWS CodeDeploy 是一項(xiàng)可以將代碼自動(dòng)部署到任意實(shí)例中的服務(wù)抠忘,這些實(shí)例包括 Amazon EC2 實(shí)例和在本地運(yùn)行的實(shí)例。AWS CodeDeploy 讓您能夠輕松快速地推出新功能外永,可幫助您避免在部署過(guò)程中停機(jī)崎脉,并解決您應(yīng)用程序更新時(shí)的復(fù)雜性問(wèn)題。您可以使用 AWS CodeDeploy 自動(dòng)執(zhí)行部署伯顶,這樣不必進(jìn)行容易出錯(cuò)的手動(dòng)操作囚灼,該服務(wù)可以隨您的基礎(chǔ)設(shè)施進(jìn)行擴(kuò)展,因此祭衩,您可以輕松地部署一個(gè)或上千個(gè)實(shí)例灶体。 | Jenkins、Pipeline |
2. 使用過(guò)程記錄
2.1 使用設(shè)計(jì)器創(chuàng)建模板
構(gòu)造一個(gè)簡(jiǎn)單的Web應(yīng)用棧:
保存并導(dǎo)出:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Metadata": {
"AWS::CloudFormation::Designer": {
"0424b5f8-3912-41f0-80bf-8364f292c448": {
"size": {
"width": 190,
"height": 140
},
"position": {
"x": 60,
"y": 210
},
"z": 0,
"embeds": [
"57547db9-a9c4-46a1-81df-e4dde281a0f0"
]
},
"57547db9-a9c4-46a1-81df-e4dde281a0f0": {
"size": {
"width": 60,
"height": 60
},
"position": {
"x": 100,
"y": 260
},
"z": 1,
"parent": "0424b5f8-3912-41f0-80bf-8364f292c448",
"dependson": [
"e0171dc3-5d5c-40c5-884b-075abffa1e72",
"0424b5f8-3912-41f0-80bf-8364f292c448"
]
},
"6ac923a1-a7c5-42ff-8ebc-ad2c4941e681": {
"size": {
"width": 60,
"height": 60
},
"position": {
"x": 100,
"y": 70
},
"z": 0,
"isassociatedwith": [
"57547db9-a9c4-46a1-81df-e4dde281a0f0"
]
},
"e0171dc3-5d5c-40c5-884b-075abffa1e72": {
"size": {
"width": 60,
"height": 60
},
"position": {
"x": 310,
"y": 240
},
"z": 0
},
"43d45fa7-f43d-4fe2-a7f2-eab1bc03a302": {
"size": {
"width": 60,
"height": 60
},
"position": {
"x": -190,
"y": 70
},
"z": 0,
"dependson": [
"c9c16990-1a3f-4c67-9bb1-da1ff54e50ee"
]
},
"c9c16990-1a3f-4c67-9bb1-da1ff54e50ee": {
"size": {
"width": 60,
"height": 60
},
"position": {
"x": -40,
"y": 70
},
"z": 0,
"dependson": [
"6ac923a1-a7c5-42ff-8ebc-ad2c4941e681"
]
},
"da946692-7f81-46d9-b0c8-ce5fe80074de": {
"source": {
"id": "6ac923a1-a7c5-42ff-8ebc-ad2c4941e681"
},
"target": {
"id": "57547db9-a9c4-46a1-81df-e4dde281a0f0"
},
"z": 9
}
}
},
"Resources": {
"EC2VPC12APX": {
"Type": "AWS::EC2::VPC",
"Properties": {},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "0424b5f8-3912-41f0-80bf-8364f292c448"
}
}
},
"EC2I2HFKL": {
"Type": "AWS::EC2::Instance",
"Properties": {},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "57547db9-a9c4-46a1-81df-e4dde281a0f0"
}
},
"DependsOn": [
"RDSDBI23JH3",
"EC2VPC12APX"
]
},
"EC2EIP5ABTI": {
"Type": "AWS::EC2::EIP",
"Properties": {
"InstanceId": {
"Ref": "EC2I2HFKL"
}
},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "6ac923a1-a7c5-42ff-8ebc-ad2c4941e681"
}
}
},
"RDSDBI23JH3": {
"Type": "AWS::RDS::DBInstance",
"Properties": {},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "e0171dc3-5d5c-40c5-884b-075abffa1e72"
}
}
},
"R53RRE32JFJ": {
"Type": "AWS::Route53Resolver::ResolverEndpoint",
"Properties": {},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "43d45fa7-f43d-4fe2-a7f2-eab1bc03a302"
}
},
"DependsOn": [
"R53RRR4FTA1"
]
},
"R53RRR4FTA1": {
"Type": "AWS::Route53Resolver::ResolverRule",
"Properties": {},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "c9c16990-1a3f-4c67-9bb1-da1ff54e50ee"
}
},
"DependsOn": [
"EC2EIP5ABTI"
]
}
}
}
2.2 使用模板創(chuàng)建堆棧
使用提前創(chuàng)建好的功能是創(chuàng)建一個(gè)安全組的模板創(chuàng)建堆棧
模板代碼
{
"AWSTemplateFormatVersion": "2010-09-09",
"Metadata": {
"AWS::CloudFormation::Designer": {
"96a17388-3a69-4091-8cce-3ee31e479d13": {
"size": {
"width": 60,
"height": 60
},
"position": {
"x": 180,
"y": 120
},
"z": 0,
"embeds": []
}
}
},
"Resources": {
"EC2SG4OEEM": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"VpcId": "vpc-4bdad223",
"GroupName": "CreatedByCloudFormation",
"GroupDescription": "CreatedByCloudFormation"
},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "96a17388-3a69-4091-8cce-3ee31e479d13"
}
}
}
}
}
創(chuàng)建堆棧
在配置堆棧選項(xiàng)的過(guò)程中掐暮,可以看到CloudFormation能夠結(jié)合標(biāo)簽服務(wù)蝎抽、IAM、CloudWatch路克、SNS服務(wù)一起使用樟结。
開(kāi)始創(chuàng)建
問(wèn)題解決
因?yàn)閯?chuàng)建模板時(shí)沒(méi)有填寫(xiě)一些必要的參數(shù)养交,提交時(shí)系統(tǒng)也沒(méi)有校驗(yàn),因此模板雖然能夠創(chuàng)建成功瓢宦,但是使用模板創(chuàng)建堆棧卻會(huì)失敗碎连。報(bào)錯(cuò)信息提示缺少GroupDescription屬性,需要更新模板刁笙,補(bǔ)充必須的參數(shù)破花,參考官方指南進(jìn)行谦趣。創(chuàng)建安全組疲吸,至少需要指定其名稱和所屬的VPC,更新模板后使用新的模板再次創(chuàng)建堆棧:
驗(yàn)證資源
堆棧前安全組列表
刪除堆棧
狀態(tài)機(jī)分析
2.3 創(chuàng)建堆棧集
利用堆棧集前鹅,您可使用一個(gè) AWS CloudFormation 模板在 AWS 賬戶中跨區(qū)域創(chuàng)建堆棧摘悴。每個(gè)堆棧中包含的所有資源由堆棧集的 AWS CloudFormation 模板定義。在創(chuàng)建堆棧集時(shí)舰绘,您可指定要使用的模板以及模板所需的任何參數(shù)和功能蹂喻。
創(chuàng)建堆棧集
賬號(hào)需要填入賬戶ID
開(kāi)始創(chuàng)建