背景
現如今,越來越多的人開始使用雲産品,建立各種各樣的雲資源。随着使用雲資源種類和數量的增多,我們越來越需要對它們進行分類管理,而标簽就是一種很好的分類方式。
作為個人使用者,以手動方式給每個雲資源打标簽倒在能接受的範圍。但如果作為企業使用者,要管理成百上千的雲資源,每次建立一批雲資源都需要手動挨個打标簽實在是難以忍受。哪怕是寫代碼,也需要依次調用各個雲産品的标簽接口,或者是調用标簽服務的統一接口來給不同的參數,但不論哪種方式都不夠簡單直接。
資源編排 ROS 為雲産品打标簽
什麼是 ROS
資源編排服務 ROS(Resource Orchestration Service)是阿裡雲提供的一項簡化雲計算資源管理的服務。使用者可以遵循 ROS 定義的
模闆規範編寫資源棧模闆,在模闆中定義所需的雲計算資源(例如 ECS 執行個體、RDS 資料庫執行個體)、資源間的依賴關系等。ROS 的編排引擎将根據模闆自動完成所有資源的建立和配置,實作自動化部署及運維。
點此可以了解更多關于 ROS 的内容。
雲産品中的每個資源實體和 ROS 中的資源一一對應,在 ROS 模闆中通過定義雲産品資源,即可通過 ROS 管理這些資源的完整生命周期(建立、更新、查詢、删除)。
可以了解 ROS 所支援的數百個資源類型。
如何使用 ROS 為雲産品打标簽
當準備好一個模闆後,要這個模闆中的所有資源打上标簽就非常簡單,隻需在使用模闆建立
ROS 資源棧時指定标簽即可。
假設我們需要在地域為杭州,可用區為
cn-hangzhou-h
下建立 VPC 和 VSwitch,并為它們打上内容為
app:test
的标簽。我們可以準備如下模闆:
{
"ROSTemplateFormatVersion": "2015-09-01",
"Resources": {
"VPC": {
"Type": "ALIYUN::ECS::VPC",
"Properties": {
"VpcName": "mytest-vpc"
}
},
"VSwitch": {
"Type": "ALIYUN::ECS::VSwitch",
"Properties": {
"VpcId": { "Ref": "VPC" },
"ZoneId": "cn-hangzhou-h",
"CidrBlock": "172.16.0.0/24",
"VSwitchName": "mytest-vsw-h"
}
}
}
}
然後借助 ROS SDK 或 API 來建立資源棧,并指定标簽(注意替換<>的内容):
# pip install aliyun-python-sdk-ros
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkros.request.v20190910.CreateStackRequest import CreateStackRequest
client = AcsClient(
'<AccessKeId>',
'<AccessKeySecret>',
'cn-hangzhou',
)
template = '''
<Template>
'''
req = CreateStackRequest()
req.set_StackName('vpc-vswitch-test')
req.set_TemplateBody(template)
req.set_TimeoutInMinutes(10)
req.set_Tags([{'Key': 'app', 'Value': 'test'}])
ret = client.do_action_with_exception(req)
print(ret)
當資源棧建立完成後,我們可以在 ROS 和 VPC 控制台上看到 ROS Stack、VPC、VSwitch 都打上了标簽。

标簽融合
有時候,我們并不總是希望所有資源的标簽完全一樣,某些資源我們希望有它獨特的标簽。我們可以在模闆中為某些資源定義指定的标簽,并在建立資源棧時指定公共的标簽,ROS 會自動融合标簽。
比如,我們在如下模闆中為 VSwitch 添加特定标簽
group:test
:
{
"ROSTemplateFormatVersion": "2015-09-01",
"Resources": {
"VPC": {
"Type": "ALIYUN::ECS::VPC",
"Properties": {
"VpcName": "mytest-vpc"
}
},
"VSwitch": {
"Type": "ALIYUN::ECS::VSwitch",
"Properties": {
"VpcId": { "Ref": "VPC" },
"ZoneId": "cn-hangzhou-h",
"CidrBlock": "172.16.0.0/24",
"VSwitchName": "mytest-vsw-h",
"Tags": [{ "Key": "group", "Value": "test" }]
}
}
}
}
在使用此模闆建立資源棧時,指定标簽為
app:test
,那麼 ROS 會将所指定的标簽融合到模闆中的每個資源中,那麼最終各資源的标簽效果如下:
- VPC 的标簽為
app:test
- VSwitch 的标簽為
、app:test
group:test
标簽更新
批量更新标簽也是個常見的需求,通過 ROS 可以非常容易的對所有資源的标簽進行更新。比如我們在一開始通過 ROS 建立了 VPC、VSwitch,其标簽為
app:test
,現在我們想要統一改成
app:normal
,那麼隻需在調用更新資源棧時指定新的标簽即可(注意替換<>的内容,其中模闆仍為第一個示例中的模闆):
# pip install aliyun-python-sdk-ros
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkros.request.v20190910.UpdateStackRequest import UpdateStackRequest
client = AcsClient(
'<AccessKeId>',
'<AccessKeySecret>',
'cn-hangzhou',
)
template = '''
<Template>
'''
req = UpdateStackRequest()
req.set_StackId('<StackId>')
req.set_TemplateBody(template)
req.set_Tags([{'Key': 'app', 'Value': 'normal'}])
ret = client.do_action_with_exception(req)
print(ret)
當資源棧更新完成後,我們可以在 ROS 和 VPC 控制台上看到 ROS Stack、VPC、VSwitch 的标簽均變成了
app:normal
。
總結
通過 ROS,為所有資源批量打标簽、更新标簽變得十分簡單,而标簽融合功能則同時滿足了打标的統一性和特定性。真正地把人從手工運維中解放出來。