使用TAG标签对云服务器ECS的分组和管理

简介: 本篇是使用OpenApi管理云服务器的管理篇第一篇。在这一篇中,主要是利用TAG进行资源分组,只有清晰的分组才可以方便的进行未来的运维和管理。 本篇主要涉及到下面的几个关键API: 绑定标签 查询标签 解绑标签 TAG资源分组 很多的用户在使用云服务器的时候都通过云服务器的名称和描述信息来进行资源分组,这里的弊端是一个云资源只支持一个名称和描述。

本篇是使用OpenApi管理云服务器的管理篇第5篇。在这一篇中,主要是利用TAG进行资源分组,只有清晰的分组才可以方便的进行未来的运维和管理。

TAG资源分组

很多的用户在使用云服务器的时候都通过云服务器的名称和描述信息来进行资源分组,这里的弊端是一个云资源只支持一个名称和描述。批量管理云服务器的时候一个重要的任务就是资源分组。为了方便的资源管理,云服务器有一个重要的概念就是TAG。TAG有下面几个约定:

  • TAG和传统的TAG不太一样,TAG支持的是Key-Value的模式,可以同时指定。
  • TAG支持 ECS 的实例、磁盘、快照、镜像、安全组上。
  • 每个资源最多可以绑定 10 个 Tag。
  • 如果要绑定 Tag 的 Key 在指定的资源上已经存在,则覆盖 Value。

为了体验TAG的功能,您可以在ECS控制台试用体验下。通过OpenApi可以方便的进行TAG的创建和变更。

绑定TAG到云资源上

绑定Tag到资源上,需要指定资源的Id和资源类型,目前支持的image、instance、snapshot、disk、securitygroup。

def add_tag_to_resource(resource_id, resource_type, tag_key, tag_value):
    request = AddTagsRequest()
    request.set_ResourceId(resource_id)
    request.set_ResourceType(resource_type)
    request.set_Tag1Key(tag_key)
    request.set_Tag1Value(tag_value)
    _send_request(request)

如下面的操作就在一个ECS实例上做了两个TAG分组,一个是ecs-console, 一个是 ecs-console-pre.

    instance_id = 'i-1111'
    tag_key = 'ecs-console'
    tag_value = 'product'
    resource_type = 'instance'
    add_tag_to_resource(instance_id, resource_type, tag_key, tag_value)
    add_tag_to_resource(instance_id, resource_type, tag_key + '-pre', tag_value)

对于同一个key,如果设置了两个value,第二个就会覆盖第一个。下面的操作就只会添加成功一组key value。

    instance_id = 'i-1111'
    tag_key = 'ecs-console'
    tag_value = 'product'
    resource_type = 'instance'
    add_tag_to_resource(instance_id, resource_type, tag_key, tag_value)
    add_tag_to_resource(instance_id, resource_type, tag_key, tag_value + '-pre')
查询绑定的TAG

TAG的查询可以直接完成。例如对ECS的实例可以通过查询实例列表来实现。

def describe_instance_tags(instance_id):
    request = DescribeInstancesRequest()
    request.set_InstanceIds(json.dumps([instance_id]))
    response = _send_request(request)
    if response is not None:
        instance_list = response.get('Instances').get('Instance')
        if len(instance_list) > 0:
            instance_detail = instance_list[0]
            if instance_detail.get('Tags') is not None:
                return instance_detail.get('Tags').get('Tag')

通过直接查询Tags可以快速的查询出多个组合维度的资源。可以通过给组合的TAG完成您的应用的高度定制。例如预发环境加上pre的标签,生产环境使用product等等来方便的管理资源。

我们也提供了查询标签的功能方便的进行多维度的搜索。

def describe_tags(tag_key=None, tag_value=None, resource_type=None, resource_id=None):
    request = DescribeTagsRequest()
    if resource_type is not None:
        request.set_ResourceType(resource_type)
    if resource_id is not None:
        request.set_ResourceId(resource_id)
    if tag_key is not None:
        request.set_Tag1Key(tag_key)
    if tag_value is not None:
        request.set_Tag1Value(tag_value)
    response = _send_request(request)
    return response.get('Tags').get('Tag')

查询返回的内容如下:

[{u'TagKey': u'ecs-console-pre', u'TagValue': u'product'}, {u'TagKey': u'ecs-console', u'TagValue': u'product'}]
删除绑定的TAG

除了可以覆盖TAG之外,也可以方便的删除TAG。删除TAG需要指定资源id,资源类型。可以指定TAG,直接删除TAG下面的所有Values。也可以只删除一组的Key,Value.

def remove_tag_from_resource(resource_id, resource_type, tag_key, tag_value=None):
    request = RemoveTagsRequest()
    request.set_ResourceId(resource_id)
    request.set_Tag1Key(tag_key)
    request.set_ResourceType(resource_type)
    if tag_value is not None:
        request.set_Tag1Value(tag_value)
    _send_request(request)

总结

灵活的使用TAG,您可以方便的完成应用分组。通过TAG来区分您的测试、预发、生产、压测以及弹性环境的区分。方便的进行批量的资源操作。

完整代码如下

#  coding=utf-8

# if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'
# if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs'
# make sure the sdk version is 2.1.2, you can use command 'pip show aliyun-python-sdk-ecs' to check

import json
import logging

from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.AddTagsRequest import AddTagsRequest
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.DescribeTagsRequest import DescribeTagsRequest
from aliyunsdkecs.request.v20140526.RemoveTagsRequest import RemoveTagsRequest

# configuration the log output formatter, if you want to save the output to file,
# append ",filename='ecs_invoke.log'" after datefmt.

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S')

clt = client.AcsClient('Your Access Key Id', 'Your Access Key Secrect', 'cn-beijing')

def add_tag_to_resource(resource_id, resource_type, tag_key, tag_value):
    '''
    add tag to resource
    :param resource_id: it can be instance id ,disk id
    :param resource_type: support image、instance、snapshot、disk、securitygroup
    :param tag_key: tag's key
    :param tag_value: tag's value
    :return:
    '''
    '''
    :param resource_id:
    :param resource_type:
    :param tag_key:
    :param tag_value:
    :return:
    '''
    request = AddTagsRequest()
    request.set_ResourceId(resource_id)
    request.set_ResourceType(resource_type)
    request.set_Tag1Key(tag_key)
    request.set_Tag1Value(tag_value)
    _send_request(request)


def remove_tag_from_resource(resource_id, resource_type, tag_key, tag_value=None):
    '''
    remove tag from resource
    :param resource_id: required. it can be instance id ,disk id.
    :param resource_type: support image、instance、snapshot、disk、securitygroup
    :param tag_key: tag key to remove
    :param tag_value: tag value to remove
    :return:
    '''
    request = RemoveTagsRequest()
    request.set_ResourceId(resource_id)
    request.set_Tag1Key(tag_key)
    request.set_ResourceType(resource_type)
    if tag_value is not None:
        request.set_Tag1Value(tag_value)
    _send_request(request)


def describe_tags(tag_key=None, tag_value=None, resource_type=None, resource_id=None):
    '''
    describe resource group according tag query condition.
    :param tag_key: 
    :param tag_value: 
    :param resource_type: 
    :param resource_id: 
    :return:
    '''
    request = DescribeTagsRequest()
    if resource_type is not None:
        request.set_ResourceType(resource_type)
    if resource_id is not None:
        request.set_ResourceId(resource_id)
    if tag_key is not None:
        request.set_Tag1Key(tag_key)
    if tag_value is not None:
        request.set_Tag1Value(tag_value)
    response = _send_request(request)
    return response.get('Tags').get('Tag')


def describe_instance_tags(instance_id):
    request = DescribeInstancesRequest()
    request.set_InstanceIds(json.dumps([instance_id]))
    response = _send_request(request)
    if response is not None:
        instance_list = response.get('Instances').get('Instance')
        if len(instance_list) > 0:
            instance_detail = instance_list[0]
            if instance_detail.get('Tags') is not None:
                return instance_detail.get('Tags').get('Tag')


# send open api request
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action(request)
        logging.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        logging.error(e)


if __name__ == '__main__':
    logging.info("Manager ECS by OpenApi!")
    instance_id = 'i-1111'
    tag_key = 'ecs-console'
    tag_value = 'product'
    resource_type = 'instance'
    add_tag_to_resource(instance_id, resource_type, tag_key, tag_value)
    add_tag_to_resource(instance_id, resource_type, tag_key + '-pre', tag_value)
    logging.info(describe_instance_tags(instance_id))
    remove_tag_from_resource(instance_id, resource_type, tag_key)
    logging.info(describe_instance_tags(instance_id))
    describe_tags(resource_id=instance_id)
相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
13天前
|
存储 缓存 固态存储
阿里云服务器租用价格参考,云服务器收费标准与活动价格表参考
本文为大家展示阿里云服务器最新的收费标准与活动价格情况,以供了解和参考。
阿里云服务器租用价格参考,云服务器收费标准与活动价格表参考
|
20天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
1月前
|
SQL 弹性计算 安全
阿里云服务器产品详情介绍:云服务器是什么、应用场景、租用流程、使用教程参考
对于很多新手用户来说,阿里云服务器是什么、阿里云服务器可以干嘛、阿里云服务器租用价格表、阿里云服务器新手教程是很多用户对于阿里云服务器最为关心的问题。同时,面对琳琅满目的服务器配置和优惠活动,如何选择最适合自己的服务器并充分利用其资源,成为许多用户面临的难题。本文将从阿里云服务器的定义、应用场景、价格、租用流程以及使用技巧等方面进行全面解析,帮助用户更好地了解和应用阿里云服务器。
|
2月前
|
存储 弹性计算 安全
阿里云服务器ECS详解:云服务器是什么,云服务器优势和应用场景及价格参考
云服务器ECS是阿里云众多云产品中,最受用户关注的产品,阿里云服务器提供多样化的计算能力,支持x86、Arm架构,涵盖CPU、GPU等多种服务器类型,满足各种用户需求。本文为大家详细介绍阿里云服务器是什么?云服务器的优势和应用场景,以及最新价格情况,以供大家参考。
|
2月前
|
弹性计算 固态存储 Linux
阿里云服务器、轻量应用服务器、gpu云服务器收费标准与实时活动价格参考
云服务器ECS、轻量应用服务器和gpu云服务器是阿里云的主要云服务器产品,目前轻量应用服务器2核2G收费标准为60元/月,活动价格只要36元/1年或68元1年,云服务器1核1G包月收费标准最低为24.0元/月,GPU云服务器中gn6i实例4核15G配置月付1681.00/1个月起,gn6v实例8核32G配置月付3817.00/1个月起。本文为大家整理汇总了阿里云服务器、轻量应用服务器、gpu云服务器的最新收费标准与活动价格情况,以表格形式展示给大家,以供参考。
|
18天前
|
机器学习/深度学习 人工智能 编解码
阿里云GPU云服务器优惠收费标准,GPU服务器优缺点与适用场景详解
随着人工智能、大数据分析和高性能计算的发展,对计算资源的需求不断增加。GPU凭借强大的并行计算能力和高效的浮点运算性能,逐渐成为处理复杂计算任务的首选工具。阿里云提供了从入门级到旗舰级的多种GPU服务器,涵盖GN5、GN6、GN7、GN8和GN9系列,分别适用于图形渲染、视频编码、深度学习推理、训练和高性能计算等场景。本文详细介绍各系列的规格、价格和适用场景,帮助用户根据实际需求选择最合适的GPU实例。
|
3月前
|
机器学习/深度学习 弹性计算 运维
云计算系列之阿里云ECS服务器管理实战
本文档介绍了阿里云ECS(Elastic Compute Service)的基本概念、实例管理、磁盘操作、快照与镜像功能及其应用场景,最后通过具体案例解析ECS的实际应用。ECS是阿里云提供的高效、可靠的云计算服务,支持多种业务需求,如Web应用、高并发网站、数据库等,帮助企业快速构建稳定安全的应用,提升运维效率,降低IT成本。文档还详细说明了ECS实例的创建方式、连接方法及日常管理操作,帮助用户更好地利用ECS服务。
99 2
云计算系列之阿里云ECS服务器管理实战
|
2月前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
226 6
|
2月前
|
存储 固态存储 安全
阿里云服务器最新收费标准与云服务器活动价格参考
阿里云服务器最新收费标准参考,入门级1核2G配置收费标准最低64.06/月,2核4G收费标准最低68.0/月,4核8G收费标准最低216.0/月,8核16G收费标准最低432.0/月,目前在阿里云的活动中,2核2G最低36元1年,2核4G企业最低199元1年,2核8G活动价格最低652.32元1年,4核8G活动价格最低955.58元1年,8核16G活动价格最低3815.03元1年。更多不同实例规格及配置的阿里云服务器最新收费标准,活动价格如下文所示。
|
2月前
|
存储 弹性计算 数据库
阿里云服务器ECS产品试用、ECS试用攻略、试用宝典及试用产品续用相关活动介绍
阿里云服务器ECS产品免费试用是阿里云为新手用户提供的免费体验的权益,旨在为新手开发者提供 0 成本高质量的上云体验服务,打造开放,敏捷的开发者环境。阿里云为广大用户提供基础版、企业版试用产品服务(二选一),帮您0门槛轻松体验1个月,基础版最高可试用4核 (vCPU) 8 GiB配置,企业版最高可最高可试用8核 (vCPU) 16 GiB。本文为大家介绍云服务器ECS产品试用、试用宝典、ECS试用攻略及试用产品续用相关活动,以供参考。

相关产品

  • 云服务器 ECS