Hello, 資源編排
資源編排通過一個JSON模板來定義您的需要創建的阿裏雲的資源組合,依據您的配置來完成您的資源配置,創建和一鍵銷毀,快速方便的構建您的應用。更多的信息您可以通過資源編排的幫助中心獲取。
目前資源編排正在公測期間,所以您需要首先申請下公測,我們會盡快通過,通過之後您就可以開始您的ROS之旅了。我們有一個技術支持的旺旺群,1496006086。在這裏您可以得到最及時的反饋。
今天為了在阿裏雲上創建一台ECS虛擬機,您需要首先創建一個安全組(Security Group),您可以通過ECS控製台來生成安全組的定義,您也可以通過資源編排來更加便利的實現。我們從一個安全組開始您的資源編排之旅。
創建一個安全組
創建一個安全組,首先我們需要定義一個JSON模板。從模板之中,我們看到這個模板有兩部分構成:
- 一個是
ROSTemplateFormatVersion
版本號,目前的Stack都使用這個版本。 -
Resources
部分定義創建的資源, 在這個裏麵我們定義一個資源叫SecurityGroup
, 這裏的名字可以自己定義,每個Resource有兩個關鍵的屬性,- Type: 目前ROS支持的資源類型可以通過ROS控製台中的
資源類型
來查看。 - Properties:每個資源類型,有哪些屬性是必填、選填、約束等等也可以在ROS控製台
資源類型
來查看。
- Type: 目前ROS支持的資源類型可以通過ROS控製台中的
{
"ROSTemplateFormatVersion": "2015-09-01",
"Resources": {
"SecurityGroup": {
"Properties": {},
"Type": "ALIYUN::ECS::SecurityGroup"
}
}
}
我們將下麵的模板拷貝到ROS控製台中,選擇一個Region,然後提供一個模板名稱hello_ros
, 點擊創建您就完成了自己的第一個Stack。
創建Stack的關鍵屬性
每個Stack有幾個關鍵的屬性,這些屬性是創建Stack的必要參數
- 名稱: 不可修改的stack標示,1-64個字符,名稱不可重複。
- 超時時間,公測期間的範圍為10-180分鍾
- 失敗回滾,當整個堆棧沒有創建成功之後,如果這個選項設置為True,則開始啟動回滾操作,將會把創建的相關資源支持釋放的釋放掉
- Region,當前堆棧支持在哪個region進行操作。
Stack的幾個重要的輸出構成:
- 概覽:提供這個Stack的基本信息,例如創建時間狀態,返回的數據類型,這個模板在運行時的入參等等
- 資源:Stack在創建的過程中生成的物理資源或者重要的關聯資源信息
- 事件:每個資源在創建的時候都會有狀態,例如創建開始,創建完成,創建失敗,回滾開始,回滾完成,刪除開始,刪除完成。
- 模板:創建模板是提供的Template
安全組創建進階
隻創建一個安全組的話,這個安全組默認是沒有配置安全組的出規則和入規則的話,使用這個安全組創建出的虛擬機是沒有辦法正常的和外部進行通訊,所以需要製定出人規則,可以通過一步步的在ECS控製台來實現,但是通過ROS來創建這個就非常的方便。
相比上麵的模板, 這次的模板多出了一個部分為Parameters
, 這裏聲明了一個新的屬性定義了一個安全組的優先級,通過控製台中我們可以看到創建模板就會多一個參數需要填寫,有一個默認值1
。更多的參數定義請參考幫助文檔。
在Properties
中同樣多了更多的屬性,多了安全組的名稱、描述、以及出入規則的定義。關於安全組的更多屬性可以參考安全組資源定義。
{
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
"SecurityGroupPriority": {
"Default": 1,
"Description": "生成的安全組的優先級,優先級可選範圍為1-100,默認值為1,即最高優先級。",
"Type": "Number",
"MinValue": 1,
"MaxValue": 100
}
},
"Resources": {
"DefaultSecurityGroup": {
"Properties": {
"Description": "生成經典網絡安全組默認開通外網的所有出網和入網訪問權限",
"SecurityGroupEgress": [
{
"DestCidrIp": "0.0.0.0/0",
"IpProtocol": "all",
"NicType": "internet",
"PortRange": "-1/-1",
"Priority": {
"Ref": "SecurityGroupPriority"
}
}
],
"SecurityGroupIngress": [
{
"IpProtocol": "all",
"NicType": "internet",
"PortRange": "-1/-1",
"Priority": {
"Ref": "SecurityGroupPriority"
},
"SourceCidrIp": "0.0.0.0/0"
}
],
"SecurityGroupName": "CreateByROS"
},
"Type": "ALIYUN::ECS::SecurityGroup"
}
}
}
相比傳統的JSON,這裏有一個屬性非常特殊叫"Ref",它指向了Parameters
的參數定義,這樣就可以引用這裏的定義進行賦值。
Actions
- 嚐試著將安全組的名稱也提取到
Parameters
中,而不是Hard Code。需要怎麼做呢?
Stack的輸出
上麵的模板創建出來的Stack可以定製的屬性較少,您可以在堆棧的概述中查看Stack的輸出。隻需要添加一個Outputs
部分即可。
在Outputs
中,定義了一個輸出參數為SecurityGroupId
, 會返回生成的Stack的安全組的Id,使用到了一個函數Fn::GetAtt
, 它的屬性為一個數組,第一個參數為在Resources
中定義的資源名稱,第二個屬性為ALIYUN::ECS::SecurityGroup
中支持的返回屬性, 我們可以發現安全組隻支持一個屬性SecurityGroupId
{
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
"SecurityGroupPriority": {
"Default": 1,
"Description": "生成的安全組的優先級,優先級可選範圍為1-100,默認值為1,即最高優先級。",
"Type": "Number",
"MinValue": 1,
"MaxValue": 100
}
},
"Resources": {
"DefaultSecurityGroup": {
"Properties": {
"Description": "生成經典網絡安全組默認開通外網的所有出網和入網訪問權限",
"SecurityGroupEgress": [
{
"DestCidrIp": "0.0.0.0/0",
"IpProtocol": "all",
"NicType": "internet",
"PortRange": "-1/-1",
"Priority": {
"Ref": "SecurityGroupPriority"
}
}
],
"SecurityGroupIngress": [
{
"IpProtocol": "all",
"NicType": "internet",
"PortRange": "-1/-1",
"Priority": {
"Ref": "SecurityGroupPriority"
},
"SourceCidrIp": "0.0.0.0/0"
}
],
"SecurityGroupName": "CreateByROS"
},
"Type": "ALIYUN::ECS::SecurityGroup"
}
},
"Outputs": {
"SecurityGroupId": {
"Value": {
"Fn::GetAtt": [
"DefaultSecurityGroup",
"SecurityGroupId"
]
}
}
}
}
Stack的刪除
當一個Stack需要被刪除的時候,可以根據需要來選擇,有兩個選項:
- 刪除堆棧同時刪除Stack創建的資源
- 刪除堆棧的時候保留Stack創建的相關資源
下一節,我們將著重介紹資源編排的重要構成部分模板
。
最後更新:2017-04-01 13:44:33