一键批量为云资源打标签

简介: ## 背景 现如今,越来越多的人开始使用云产品,创建各种各样的云资源。随着使用云资源种类和数量的增多,我们越来越需要对它们进行分类管理,而标签就是一种很好的分类方式。 作为个人用户,以手动方式给每个云资源打标签倒在能接受的范围。但如果作为企业用户,要管理成百上千的云资源,每次创建一批云资源都需要手动挨个打标签实在是难以忍受。哪怕是写代码,也需要依次调用各个云产品的标签接口,或者是调用标

背景

现如今,越来越多的人开始使用云产品,创建各种各样的云资源。随着使用云资源种类和数量的增多,我们越来越需要对它们进行分类管理,而标签就是一种很好的分类方式。

作为个人用户,以手动方式给每个云资源打标签倒在能接受的范围。但如果作为企业用户,要管理成百上千的云资源,每次创建一批云资源都需要手动挨个打标签实在是难以忍受。哪怕是写代码,也需要依次调用各个云产品的标签接口,或者是调用标签服务的统一接口来给不同的参数,但不论哪种方式都不够简单直接。

资源编排 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 都打上了标签。
1.jpg

2.jpg

3.jpg

标签融合

有时候,我们并不总是希望所有资源的标签完全一样,某些资源我们希望有它独特的标签。我们可以在模板中为某些资源定义指定的标签,并在创建资源栈时指定公共的标签,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:testgroup: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,为所有资源批量打标签、更新标签变得十分简单,而标签融合功能则同时满足了打标的统一性和特定性。真正地把人从手工运维中解放出来。

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
缓存 监控 Python
在Python中,如何检测和处理内存泄漏?
【2月更文挑战第7天】【2月更文挑战第18篇】在Python中,如何检测和处理内存泄漏?
767 3
|
数据采集 C# 数据库
数据验证与错误处理:C#中的实践
【10月更文挑战第1天】在软件开发中,数据验证与错误处理至关重要,不仅能提升程序的健壮性和安全性,还能改善用户体验。本文从基础概念入手,详细介绍了C#中的数据验证方法,包括使用自定义属性和静态方法验证数据,以及常见的错误处理技巧,如Try-Catch-Finally结构和自定义异常。通过具体示例,帮助读者掌握最佳实践,构建高质量应用。
354 3
|
消息中间件 存储 缓存
Python之RabbitMQ操作
Python之RabbitMQ操作
|
消息中间件 Serverless 数据安全/隐私保护
开发者如何使用云消息队列 RabbitMQ 版
【10月更文挑战第13天】开发者如何使用云消息队列 RabbitMQ 版
519 115
|
Arthas 测试技术
Arthas下载与启动
Arthas下载与启动
1342 0
|
JSON 自然语言处理 Android开发
Flutter本地化(国际化)之App名称
Flutter本地化(国际化)之App名称
448 1
|
存储 开发工具 对象存储
开发者如何使用对象存储OSS
【10月更文挑战第6天】开发者如何使用对象存储OSS
2277 7
|
11月前
|
存储 Oracle 固态存储
阿里云服务器ESSD云盘性能级别详解
存储性能对于应用的运行效率和用户体验至关重要,阿里云作为领先的云服务提供商,为用户提供了多种存储解决方案,其中ESSD云盘以其高性能和灵活性备受关注。本文将详细介绍阿里云服务器ESSD云盘的四种性能级别——PL0、PL1、PL2和PL3,以及它们各自的单盘IOPS性能上限和容量大小等关键信息,帮助您更好地选择适合自身需求的存储方案。
|
存储 Kubernetes API
k8s学习-ConfigMap(创建、使用、更新、删除等)
k8s学习-ConfigMap(创建、使用、更新、删除等)
3697 0
|
Shell 网络安全 Python
SSL 证书过期巡检脚本 (Python 版)
SSL 证书过期巡检脚本 (Python 版)