使用AWS CloudFormation服務(wù)

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ò)程記錄

CloudFormation主界面

2.1 使用設(shè)計(jì)器創(chuàng)建模板

設(shè)計(jì)器界面

構(gòu)造一個(gè)簡(jiǎn)單的Web應(yīng)用棧:


構(gòu)造一個(gè)簡(jiǎn)單的Web應(yīng)用棧

保存并導(dǎo)出:


保存模板到S3存儲(chǔ)桶中
{
    "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"
            ]
        }
    }
}
簡(jiǎn)單的Web應(yīng)用結(jié)構(gòu)圖

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)建堆棧

步驟1

步驟2

在配置堆棧選項(xiàng)的過(guò)程中掐暮,可以看到CloudFormation能夠結(jié)合標(biāo)簽服務(wù)蝎抽、IAM、CloudWatch路克、SNS服務(wù)一起使用樟结。
步驟3-1

步驟3-2

步驟3-3

步驟3-4

步驟3-5

步驟4

開(kāi)始創(chuàng)建

堆棧創(chuàng)建中

堆棧創(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)建堆棧:

堆棧創(chuàng)建成功

驗(yàn)證資源

安全組列表-創(chuàng)建堆棧DemoStack2前

堆棧前安全組列表
安全組列表-創(chuàng)建堆棧DemoStack2后

刪除堆棧

刪除堆棧

刪除堆棧成功

狀態(tài)機(jī)分析

堆棧的狀態(tài)機(jī)

堆棧中的資源的狀態(tài)機(jī)

2.3 創(chuàng)建堆棧集

利用堆棧集前鹅,您可使用一個(gè) AWS CloudFormation 模板在 AWS 賬戶中跨區(qū)域創(chuàng)建堆棧摘悴。每個(gè)堆棧中包含的所有資源由堆棧集的 AWS CloudFormation 模板定義。在創(chuàng)建堆棧集時(shí)舰绘,您可指定要使用的模板以及模板所需的任何參數(shù)和功能蹂喻。

創(chuàng)建堆棧集

步驟1

步驟2

步驟3

步驟4-1

賬號(hào)需要填入賬戶ID
步驟4-2

步驟5

開(kāi)始創(chuàng)建
開(kāi)始創(chuàng)建

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捂寿,隨后出現(xiàn)的幾起案子口四,更是在濱河造成了極大的恐慌,老刑警劉巖秦陋,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔓彩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡驳概,警方通過(guò)查閱死者的電腦和手機(jī)赤嚼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)顺又,“玉大人更卒,你說(shuō)我怎么就攤上這事≈烧眨” “怎么了蹂空?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)果录。 經(jīng)常有香客問(wèn)我腌闯,道長(zhǎng),這世上最難降的妖魔是什么雕憔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任姿骏,我火速辦了婚禮,結(jié)果婚禮上斤彼,老公的妹妹穿的比我還像新娘分瘦。我一直安慰自己蘸泻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布嘲玫。 她就那樣靜靜地躺著悦施,像睡著了一般。 火紅的嫁衣襯著肌膚如雪去团。 梳的紋絲不亂的頭發(fā)上抡诞,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音土陪,去河邊找鬼昼汗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鬼雀,可吹牛的內(nèi)容都是我干的顷窒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼源哩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鞋吉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起励烦,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谓着,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后坛掠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赊锚,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年却音,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了改抡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡系瓢,死狀恐怖阿纤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夷陋,我是刑警寧澤欠拾,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站骗绕,受9級(jí)特大地震影響藐窄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酬土,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一荆忍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦刹枉、人聲如沸叽唱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)棺亭。三九已至,卻和暖如春蟋软,著一層夾襖步出監(jiān)牢的瞬間镶摘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工岳守, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凄敢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓棺耍,卻偏偏與公主長(zhǎng)得像贡未,于是被迫代替她去往敵國(guó)和親种樱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒙袍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容