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

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

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

本篇主要涉及到下面的几个关键API:

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)
相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
弹性计算 运维 监控
ECS监控与管理
ECS监控与管理
35 5
|
1月前
|
弹性计算 Linux 网络安全
连接并管理ECS
连接并管理ECS
61 4
|
1月前
|
弹性计算
阿里云3M带宽云服务器并发多大?阿里云3M带宽云服务器测评参考
在探讨云服务器3M带宽能支持多大并发这一问题时,我们首先要明白一个关键点:并发量并非仅由带宽决定,还与网站本身的大小密切相关。一般来说,一个优化良好的普通网站页面大小可能只有几K,为便于计算,我们可以暂且假定每个页面大小为50K。
819 1
|
1月前
|
存储 弹性计算 缓存
阿里云服务器价格表参考,不同实例规格云服务器月付及年付活动价格(2024更新)
阿里云租服务器一年多少钱?不同时期阿里云服务器的租用价格不同,进入2024年,阿里云继续推出各种云服务器优惠政策,轻量应用服务器2核2G 61元1年,2核4G 165元1年;云服务器2核2G3M只要99元1年,2核4G5M只要199元1年;4核16G月付只要26.52元1个月。本文为大家整理汇总了目前阿里云的活动中,所有云服务器的月付及年付价格情况,以表格形式展示给大家,以供参考。
阿里云服务器价格表参考,不同实例规格云服务器月付及年付活动价格(2024更新)
|
12天前
|
弹性计算 应用服务中间件 Linux
阿里云ECS服务器上从零开始搭建nginx服务器
阿里云ECS服务器上从零开始搭建nginx服务器
|
30天前
|
存储 弹性计算 Serverless
什么是阿里云FPGA云服务器?FPGA云服务器产品优势及应用场景介绍
FPGA云服务器是阿里云提供的实例规格,融合现场可编程门阵列的低延迟硬件加速与弹性资源。FaaS平台简化了FPGA开发,提供统一硬件、开发环境和丰富的IP生态。特性包括硬件虚拟化、联合仿真和动态互联配置。产品计费与ECS一致,支持多种计费模式。优势在于分钟级交付、高性能加速、经济性价比和设计复用。应用广泛,如视频转码、人工智能、基因测序等。FPGA云服务器通过FPGA镜像、OSS服务等工具进行管理。
什么是阿里云FPGA云服务器?FPGA云服务器产品优势及应用场景介绍
|
1月前
|
Shell Linux 网络安全
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
30 0
|
1月前
|
Shell Linux Apache
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
162 1
|
1月前
|
弹性计算 小程序 开发者
阿里云服务器性能测评:25M带宽阿里云云服务器支持多少人访问?
在深入探讨25M带宽云服务器的性能时,我们首先要明确一个核心概念:带宽与服务器能够支持的同时访问量之间存在着直接的关联。那么,大家可能会好奇,带宽为25M的云服务器究竟能够支持多少用户同时访问呢?
127 0
|
1月前
|
存储 弹性计算 运维
阿里云轻量应用服务器与标准型阿里云服务器ECS全面对比(配置、价格)
随着云计算技术的蓬勃发展,阿里云作为业界的佼佼者,推出了多样化的云服务器产品以满足不同用户群体的需求。在这些产品中,阿里云轻量应用服务器与标准云服务器(ECS)因其各自的特点而备受关注。下面,我们将从多个角度对这两款产品进行深入剖析,以帮助您更好地选择适合自身需求的云服务器。
653 2

相关产品

  • 云服务器 ECS