背景
資源編排服務(Resource Orchestration Service, 簡稱ROS)是阿里雲提供的一項簡化雲計算資源管理的服務。您可以遵循ROS定義的模板規範編寫資源棧模板,在模板中定義所需的雲計算資源(例如ECS實例、RDS數據庫實例)、資源間的依賴關係等。ROS的編排引擎將根據模板自動完成所有資源的創建和配置,實現自動化部署及運維。
當您需要更新資源棧時,在實施之前瞭解您的更改會如何影響正在運行的資源可以幫助您充滿自信地更新資源棧。使用更改集,您可以預覽提議對資源棧進行的更改可能會對正在運行的資源造成什麼影響,例如,您的更改是否會刪除或替換任何關鍵資源,只有在您決定執行更改集時,ROS 才會對您的資源棧進行更改,這讓您可以決定是否繼續執行提議的更改,還是通過創建另一個更改集來探索其他更改。您可以使用 ROS 控制檯、ALIYUN CLI 或 ROS API 來創建和管理更改集。
關於更改集的更多功能介紹,可以參考這裡。
功能介紹
更新資源棧
使用更改集更新資源棧,與直接更新資源棧的最大區別是多了一個審核變更的過程。
如下圖所示,用戶有一個資源棧,裡面有三個資源:三角、圓、方塊。用戶更新資源棧時,想知道資源棧到底會發生哪些變更,於是創建了一個更改集。通過查看更改集的內容,發現三角和圓發生了變化,顏色由白變橘,方塊沒有發生變化。如果用戶覺得符合預期,就可以執行更改集,資源棧就會開始更新。用戶如果覺得不符合預期,可以調整模板或參數後,重新創建更改集,直至符合預期。
不使用更改集的更新流程中,用戶在執行更新之前,並不知道資源棧會發生何種變化。這可能會導致一些誤操作,如意外更新或刪除了某些資源。一種避免誤操作的方法是使用資源棧策略,防止意外更新,這是一種防禦措施。主動的辦法是使用更改集,預覽變更內容,一切盡在掌控。當然兩者也可以結合在一起使用。
創建資源棧
更改集不僅可以用來更新資源棧,也可以用來創建資源棧。用來創建資源棧時,可以預覽會創建出哪些資源。目前只有API和CLI支持該功能,控制檯不支持該功能。更推薦的做法是使用資源棧預覽功能,對應的API接口是PreviewStack,控制檯、API和CLI均支持。
示例
創建更改集
我們使用如下模板在ROS控制檯創建一個資源棧。這個資源棧包含三個資源:Handle1、Handle2、Handle3。
ROSTemplateFormatVersion: '2015-09-01'
Resources:
Handle1:
Type: 'ALIYUN::ROS::WaitConditionHandle'
Properties:
Count: 0
Handle2:
Type: 'ALIYUN::ROS::WaitConditionHandle'
Properties:
Count: 1
Handle3:
Type: 'ALIYUN::ROS::WaitConditionHandle'
Properties:
Count: 2
為這個資源棧創建更改集,目的把Handle1的Count修改為100,刪除Handle3,增加一個新資源Handle4。
在選擇模板,使用如下模板。
ROSTemplateFormatVersion: '2015-09-01'
Resources:
Handle1:
Type: 'ALIYUN::ROS::WaitConditionHandle'
Properties:
Count: 100
Handle2:
Type: 'ALIYUN::ROS::WaitConditionHandle'
Properties:
Count: 1
Handle4:
Type: 'ALIYUN::ROS::WaitConditionHandle'
Properties:
Count: 3
按照導航指引,完成剩下的配置,創建更改集。
審核變更
選擇更改集,查看詳情。
查看變更摘要。
查看變更詳情。
變更詳情
下在是JSON更改的具體內容。Changes中的每一項對應於一個資源的變更。
在ResourceChange結構中,Action表示變更類型:
- Add:創建。
- Remove:刪除。
- Modfiy:修改。
可以看到Handle3資源會被刪除,Handle4資源會被創建,而Handle1和Handle2資源發生了修改。
Handle1資源發生修改是因為我們修改了Count屬性,在更改集中ResourceChange.Details部分也有顯示。
Handle2資源並沒有發生修改,為什麼會出現在更改集中。ResourceChange.Details.ChangeSource為System,是因為ALIYUN::ROS::WaitConditionHandle比較特殊,根據特定的條件或內部機制也會觸發更新,一般的資源不存在這個情況。
關於變更詳情的細節可以參見更改集數據結構。
{
"Changes": [
{
"Type": "Resource",
"ResourceChange": {
"Action": "Modify",
"LogicalResourceId": "Handle2",
"Details": [
{
"Evaluation": "Dynamic",
"Target": {
"RequiresRecreation": "Never",
"Attribute": "Properties"
},
"ChangeSource": "System"
}
],
"Scope": [
"Properties"
],
"PhysicalResourceId": "Handle2",
"ResourceType": "ALIYUN::ROS::WaitConditionHandle",
"Replacement": "False"
}
},
{
"Type": "Resource",
"ResourceChange": {
"Action": "Modify",
"LogicalResourceId": "Handle1",
"Details": [
{
"Evaluation": "Static",
"Target": {
"RequiresRecreation": "Never",
"Attribute": "Properties",
"Name": "Count"
},
"ChangeSource": "DirectModification"
}
],
"Scope": [
"Properties"
],
"PhysicalResourceId": "Handle1",
"ResourceType": "ALIYUN::ROS::WaitConditionHandle",
"Replacement": "False"
}
},
{
"Type": "Resource",
"ResourceChange": {
"Action": "Add",
"LogicalResourceId": "Handle4",
"Details": [],
"Scope": [],
"ResourceType": "ALIYUN::ROS::WaitConditionHandle"
}
},
{
"Type": "Resource",
"ResourceChange": {
"Action": "Remove",
"LogicalResourceId": "Handle3",
"Details": [],
"Scope": [],
"PhysicalResourceId": "Handle3",
"ResourceType": "ALIYUN::ROS::WaitConditionHandle"
}
}
]
}
執行更改集
確認變更詳情,如果不符合要求,可以創建新的更改集直到符合要求。如果已經符合要求,可以直接執行更改集。
執行完成後,觀察資源列表,符合預期。