AWS云編排詳解-Cloud Formation

作者:私語茶館

1.關鍵概念

名詞

說明

軟件:

CloudFormation

描述AWS 資源、配置值和互連關系。借助集成設施即代碼加快云部署

CloudFormation Designer

拖拽式圖形化模板編輯界面。

Amazon Simple Notification Service (SNS) 

SNS可通過電子郵件跟蹤堆棧的創建和刪除進度,以及以編程方式和其他流程集成。

概念:

Stack

實例化模板所產生的資源集合

2. CloudFormation介紹

Cloud Formation使用模板和堆棧簡化資源管理。

CloudFormation的特征:

(1)文件格式:JSON(Javascript 數據元表示法)格式的文本文件。

(2)  管理服務間關系:模板能簡要地獲取資源間的相互關系,例如 EC2 實例必須與 Elastic Load Balancing 負載均衡器相關聯,或者 EBS 卷必須與其連接的實例位于同一 EC2 可用區域內。

(3)反復使用:使用模板參數可使單個模板用于具有不同配置值的多個基礎設施部署,例如要為該應用程序部署多少實例的模板。

(4)獲取幫助反饋:模板還提供輸出屬性,以便向用戶返回部署結果或配置信息。例如,完成實例化后,模板可能向客戶提供 Elastic Load Balancing 終端節點的 URL,用于連接最新實例化的應用程序。

(5)避免沖突:模板中的所有 AWS 資源通過邏輯名稱進行標識,以便在一個模板內創建多個堆棧時 AWS 資源之間不會產生命名沖突。

(6)即寫即用:使用任何方法啟動堆棧,無需提前使用 AWS CloudFormation 注冊模板。

(7)可視化您的堆棧:CloudFormation Designer 讓您能夠以圖表形式顯示模板。您可以輕松地查看 AWS 資源及其之間的關系并安排布局,使圖表更符合您的意圖。您可以借助拖放界面和集成的 JSON 編輯器編輯模板。您對圖表所做的修改會自動反映到模板的 JSON 中。 

(8)查詢資源:AWS CloudFormation 保留堆棧模板的副本,以便您可以使用 AWS 管理控制臺、命令行工具或 API 查詢堆棧創建期間應用的確切資源配置。

(9)自動化:您可以選擇使用編程語言或所選工具自動生成模板。您還可以選擇使用 CloudFormation API、AWS SDK 或 AWS CLI 從模板中自動創建堆棧。

3.CloudFormation模板

資料:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html

3.1. CloudFormation模板格式介紹

格式:

{"AWSTemplateFormatVersion" : "2010-09-09""Description" : "模板使用方法的文本描述","Parameters": { // 用于根據每個部署自定義模板的一組輸入值 },"Resources" : { // 一組 AWS 資源及其相互關系,必選},
“Mappings”:{// 聲明條件值,條件值的求值方式與查找表語句相似}"Outputs" : { // 堆棧創建者可以看到的一組值 }
}

EC2樣例:

{"AWSTemplateFormatVersion" : "2010-09-09""Description" : "創建運行 Amazon Linux 32 位 AMI 的 EC2 實例。","Parameters" : {"KeyPair" : {"Description" : "允許 SSH 訪問此實例的 EC2 密鑰對","Type" : "String"}},"Resources" : {"Ec2Instance" : {"Type" : "AWS::EC2::Instance","Properties" : {"KeyName" : { "Ref" : "KeyPair" },"ImageId" : "ami-3b355a52"}}},"Outputs" : {"InstanceId" : {"Description" : "新創建的 EC2 實例的實例 ID","Value" : {"Ref" : "Ec2Instance"}}}
}  

完整Template見附件:WordPress_Single_Instance_With_RDS.template,下載地址:

詳細語法如下:

  1. AWSTemplateFormatVersion:本模板滿足的AWS CloudFormation模板的版本,目前只有2010-09-09有效。
  2. Parameters:用來指定創建堆棧時,由用戶指定的參數及有效性檢驗規則。
  3. Mapping:相當于Switch Case語句,按照條件確定一個值。
  4. OutPut:描述Stack的屬性。
  5. Description:定義提示。用于在Stack創建Wizard時顯示在“Specify Parameter page”。
  6. 內嵌函數:
    1. 通過Ref和Fn::GetAt 函數可以在模板中引用其他資源的屬性。
    2. 通過Fn::Join函數可以根據parameters、資源屬性和其他字符串構建一個值。
  7. 附加屬性:
    1. DependsOn 屬性:指定資源創建和刪除的依賴關系。例如被依賴的資源需要先創建。
    2. DeletionPolicy 屬性:定義刪除Stack時,如何處理資源,可以同步刪除資源或者備份資源。

元數據:該屬性為資源指定一個結構化數據。

3.1.模板-Resources

Resources用于定義模板中包括的資源。

3.1.1. 資源模板樣例

樣例1:

{"Resources" : {"HelloBucket" : {"Type" : "AWS::S3::Bucket", //資源類型,格式:AWS::ProductIdentifier::ResourceType"Properties" : { //定義資源的屬性,不同的資源類型有不同的屬性。"AccessControl" : "PublicRead","WebsiteConfiguration" : {"IndexDocument" : "index.html", //IndexDocument-WebSiteConfiguration的子屬性,subProperty"ErrorDocument" : "error.html"            }               }}}
}

樣例2(Ref函數):

{"Parameters" : { //定義了KeyName作為創建Instance時必須輸入的參數。"KeyName" : {"Description" : "The EC2 Key Pair to allow SSH access to the instance","Type" : "AWS::EC2::KeyPair::KeyName"}},"Resources" : {"Ec2Instance" : {"Type" : "AWS::EC2::Instance","Properties" : {"SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" }, "MyExistingSecurityGroup" ],// REF指定的安全組來自模板定義,“MyExistingSecurityGroup”則是一個已部署的安全組。"KeyName" : { "Ref" : "KeyName"}, //KeyName通過Ref函數說明是創建Instance時必須輸入的,"ImageId" : "ami-7a11e213"}},"InstanceSecurityGroup" : {"Type" : "AWS::EC2::SecurityGroup","Properties" : {"GroupDescription" : "Enable SSH access via port 22","SecurityGroupIngress" : [ {"IpProtocol" : "tcp","FromPort" : "22","ToPort" : "22","CidrIp" : "0.0.0.0/0"} ]}}}
}

樣例3(GetAtt函數)

"Resources" : {"myBucket" : {"Type" : "AWS::S3::Bucket"},"myDistribution" : {"Type" : "AWS::CloudFront::Distribution", //定義一個CloudFront的CDN"Properties" : {"DistributionConfig" : {"Origins" : [ {"DomainName": {"Fn::GetAtt" : ["myBucket", "DomainName"]}, //提供Bucket的Domain名稱。"Id" : "myS3Origin","S3OriginConfig" : { }} ],"Enabled" : "true","DefaultCacheBehavior" : {"TargetOriginId" : "myS3Origin","ForwardedValues" : {"QueryString" : "false"},"ViewerProtocolPolicy" : "allow-all"}}}}}

3.1.2.關鍵特性:

(1)模板中的資源.name是邏輯名,當CloudFormation創建資源時,會產生資源實例的物理名稱。資源的物理名稱= logical name + stack name + unique ID。

(2)CloudFormation有內嵌函數,例如Ref函數,格式如下:

?
Fn::Ref:The intrinsic function Ref returns the value of the specified parameter or resource.When you specify a parameter's logical name, it returns the value of the parameter.When you specify a resource's logical name, it returns a value that you can typically use to refer to that resource, such as a physical ID.Declaration"Ref" : "logicalName"ParameterslogicalNameThe logical name of the resource or parameter you want to dereference.Return ValueThe physical ID of the resource or the value of the parameter.?

樣例如下:

"MyEIP" : { //定義一個Elastic IP"Type" : "AWS::EC2::EIP","Properties" : {"InstanceId" : { "Ref" : "MyEC2Instance" } //應用到一個MyEC2Instance的實例。}
}

Ref函數適合于其返回的資源恰好是你想要的情況。但有的情況你需要資源的其他屬性,需要使用GetAtt函數,格式如下:

Fn::GetAtt
The intrinsic function Fn::GetAtt returns the value of an attribute from a resource in the template.
Declaration
"Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ]
Parameters:
logicalNameOfResource
The logical name of the resource that contains the attribute you want.
attributeName
The name of the resource-specific attribute whose value you want. See the resource's reference page for details about the attributes available for that resource type.
Return Value
The attribute value.Example
This example returns a string containing the DNS name of the LoadBalancer with the logical name MyLB.
"Fn::GetAtt" : [ "MyLB" , "DNSName" ]

其他參考資料:

1)資源的屬性:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71831.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《PyQt5》——設計Python GUI(圖形用戶界面)實例

PyQt5 PyQt5的配置和基礎使用可以參考這篇文章:《 PyQt5》—— 創建 Python GUI(圖形用戶界面) Python GUI(圖形用戶界面)實例 本實例是設計一個通過玉米和豆粕的價格來預測生豬的價格,并顯示預測價格與實…

kali linux 打開 word

Kali Linux是一款專為網絡安全領域而設計的操作系統,它集成了大量的安全工具,幫助用戶進行網絡滲透測試和安全評估。作為一款功能強大的操作系統,Kali Linux可以滿足用戶在網絡安全領域的各種需求,包括滲透測試、漏洞分析、數字取…

hooks useModule自定義hooks (二次封裝AgGridReact ag-table)自定義表頭,自定義表頭搜索

場景業務: 多次運用AgGridReact的table 列表 思路: 運用自定義hooks進行二次封裝: 通用配置例如:傳參的參數,傳參的url,需要緩存的key這些鍵值類 定制化配置例如:需要對table 的一些定制化傳…

SpringBoot最簡單方式實現自定義異常頁面(404)

最簡單的方式實現所有自定義異常頁面(如 404、500 等)是通過 靜態資源文件 或 模板引擎 來實現。 方法 1:使用靜態資源文件(最簡單) Spring Boot 默認會在 src/main/resources/static 或 src/main/resources/public …

django下防御race condition漏洞(競爭型漏洞)

目錄 競爭型漏洞 概念 常見類型及示例 環境搭建 ?編輯漏洞復現 ucenter/1/ ucenter/2/ ucenter/3/ ucenter/4/ 總結 悲觀鎖 樂觀鎖 競爭型漏洞 概念 競爭型漏洞,也稱為競態條件漏洞(Race Condition Vulnerability),…

用Python寫一個算24點的小程序

一、運行界面 二、顯示答案——遞歸介紹 工作流程&#xff1a; 1. 基本情況&#xff1a;函數首先檢查輸入的數字列表 nums 的長度。如果列表中只剩下一個數字&#xff0c;它會判斷這個數字是否接近 24&#xff08;使用 abs(nums[0] - 24) < 1e-10 來處理浮點數精度問題&…

PostgreSQL 18新特性之虛擬生成列

PostgreSQL 12 提供了生成列&#xff08;GENERATED ALWAYS AS STORED&#xff09;功能&#xff0c;但是只能支持存儲型的生成列&#xff0c;需要占用存儲空間&#xff0c;更新成本高。 為此&#xff0c;PostgreSQL 18 即將引入一個新的增強&#xff1a;虛擬生成列。這種類型的…

GitHub上傳項目

總結&#xff08;有基礎的話直接執行這幾步&#xff0c;就不需要再往下看了&#xff09;&#xff1a; git init 修改git的config文件&#xff1a;添加:[user]:name你的github用戶名 email你注冊github的用戶名 git branch -m master main git remote add origin 你的URL gi…

常見排序算法深度評測:從原理到10萬級數據實戰

常見排序算法深度評測&#xff1a;從原理到10萬級數據實戰 摘要 本文系統解析冒泡排序、選擇排序、插入排序、希爾排序、歸并排序、快速排序、堆排序和基數排序8種經典算法&#xff0c;通過C語言實現10萬隨機數排序并統計耗時。測試顯示&#xff1a;快速排序綜合性能最優&…

動態規劃填表技巧:固定最后一個數 vs 固定倒數第二個數

在動態規劃中&#xff0c;填表時固定最后一個數還是倒數第二個數&#xff0c;取決于問題的定義和狀態轉移方程的設計。 目錄 1. 固定最后一個數 適用場景 特點 示例 2. 固定倒數第二個數 適用場景 特點 示例 3. 固定最后一個數與倒數第二個數的對比 4. 總結 1. 固定最…

【C】鏈式二叉樹算法題2

目錄 1 另一棵樹的子樹 1&#xff09; 題目描述 示例1&#xff1a; 示例2&#xff1a; 2&#xff09; 算法解析 3&#xff09; 代碼 2 二叉樹的遍歷 1&#xff09; 問題描述 2&#xff09; 算法解析 3&#xff09; 代碼 3 總結 1 另一棵樹的子樹 leetcode鏈接…

配置Hadoop集群

Hadoop的運行模式 本地運行&#xff1a;在一臺單機上運行&#xff0c;沒有分布式文件系統&#xff0c;直接讀寫本地操作系統的文件系統。特點&#xff1a;不對配置文件進行修改&#xff0c;Hadoop 不會啟動 偽分布式&#xff1a;也是在一臺單機上運行&#xff0c;但用不同的 …

python辦公自動化--數據可視化(pandas+matplotlib)--生成條形圖和餅狀圖

前言 前幾天我們學習了pandas讀取數據&#xff0c;還學習了如何用patplotlib繪制柱狀圖和折線圖。 今天我們繼續學習&#xff0c;如何繪制條形圖和餅狀圖。 一、課程回顧-pandas讀取數據 1.示例數據文件 這里我們用到的依舊是d盤底下的這個excel工作簿&#xff0c;這個工作簿…

基于大模型的結節性甲狀腺腫診療全流程預測與方案研究報告

目錄 一、引言 1.1 研究背景與目的 1.2 研究意義 1.3 國內外研究現狀 二、大模型預測原理與方法 2.1 相關大模型概述 2.2 數據收集與預處理 2.3 模型訓練與驗證 三、術前預測與評估 3.1 結節性質預測 3.1.1 良惡性判斷 3.1.2 與傳統診斷方法對比 3.2 手術風險預測…

不同開發語言對字符串的操作

一、字符串的訪問 Objective-C: 使用 characterAtIndex: 方法訪問字符。 NSString *str "Hello, World!"; unichar character [str characterAtIndex:0]; // 訪問第一個字符 H NSLog("%C", character); // 輸出: H NSString 內部存儲的是 UTF-16 編…

Java開發者如何接入并使用DeepSeek

目錄 一、準備工作 二、添加DeepSeek SDK依賴 三、初始化DeepSeek客戶端 四、數據上傳與查詢 五、數據處理與分析 六、實際應用案例 七、總結 【博主推薦】&#xff1a;最近發現了一個超棒的人工智能學習網站&#xff0c;內容通俗易懂&#xff0c;風格風趣幽默&#xff…

S19文件格式詳解:汽車ECU軟件升級中的核心鏡像格式

文章目錄 引言一、S19文件格式的起源與概述二、S19文件的核心結構三、S19在汽車ECU升級中的應用場景四、S19與其他格式的對比五、S19文件實例解析六、工具鏈支持與安全考量七、未來趨勢與挑戰結語引言 在汽車電子控制單元(ECU)的軟件升級過程中,S19文件(也稱為Motorola S-…

CTF雜項——[suctf 2019]簽到題

base64轉圖片 可以直接用隨波逐流 得到flag SUCTF{ffffffffT4nk}

【Python】整數除法不正確,少1的問題,以及有關浮點數轉換的精度問題

1. 問題 今天在做leetcode 不同路徑 的時候發現了個問題 對于m53 n4class Solution:def uniquePaths(self, m: int, n: int) -> int:rlt 1for i in range(0, m-1):rlt * (m n - 2 - i)for i in range(0, m-1):rlt / (i 1)return int(rlt)為什么這個結果是 26234class S…

AI無代碼平臺

以下是目前支持快速開發產品的高生產力免費AI無代碼平臺推薦&#xff0c;按功能和適用場景分類&#xff1a; 一、全棧應用開發類 Bolt.DIY DeepSeek-R1 無需編寫代碼即可開發全棧應用&#xff0c;提供免費API和無速率限制&#xff0c;支持AI編碼助手與自動化流程 。 優勢&…