使用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月前
|
弹性计算 安全 Linux
阿里云服务器购买图文教程参考,四种购买阿里云服务器的方式及适用场景分享
阿里云服务器如何购买?目前主要的购买方式有自定义购买、快速购买、通过活动购买、通过云市场镜像页面购买这四种购买方式,每种方式都有主要的适合对象,购买流程也不是完全一样的。例如想要快速购买的用户,一般选择快速购买、通过活动购买最好,如果是想购买的云服务器已经部署好一些自己项目运行所需的各种环境和软件,则选择通过云市场镜像页面购买这种方式更好。本文为以图文形式为大家展示四种购买阿里云服务器的方式及适用场景,以供参考。
阿里云服务器购买图文教程参考,四种购买阿里云服务器的方式及适用场景分享
|
11天前
|
弹性计算 运维 监控
Apsara Clouder云计算专项技能认证:云服务器ECS
Apsara Clouder云计算专项技能认证:云服务器ECS
|
2月前
|
弹性计算
阿里云3M带宽云服务器并发多大?阿里云3M带宽云服务器测评参考
在探讨云服务器3M带宽能支持多大并发这一问题时,我们首先要明白一个关键点:并发量并非仅由带宽决定,还与网站本身的大小密切相关。一般来说,一个优化良好的普通网站页面大小可能只有几K,为便于计算,我们可以暂且假定每个页面大小为50K。
838 1
|
5天前
|
存储 弹性计算 固态存储
阿里云服务器CPU内存配置详细指南,如何选择合适云服务器配置?
阿里云服务器配置选择涉及CPU、内存、公网带宽和磁盘。个人开发者或中小企业推荐使用轻量应用服务器或ECS经济型e实例,如2核2G3M配置,适合低流量网站。企业用户则应选择企业级独享型ECS,如通用算力型u1、计算型c7或通用型g7,至少2核4G配置,公网带宽建议5M,系统盘可选SSD或ESSD云盘。选择时考虑实际应用需求和性能稳定性。
|
1天前
|
弹性计算
阿里云服务器多少钱一年?2024年5月云服务器价格表曝光!
2024年5月,阿里云服务器价格曝光,ECS云服务器2核2G3M带宽低至99元/年,2核4G5M优惠价199元/年。香港轻量服务器24元/月,4核8G服务器700元/年。其他配置如8核32G也有不同优惠。详细价格表及活动信息见阿里云服务器ECS页面
|
11天前
|
存储 小程序 数据库
阿里云学生云服务器申请,阿里云送每个大学生一台云服务器
2024年,阿里云为学生提供免费7个月的学生服务器,包括2核2G配置、1M带宽和独立IP。学生需通过学信网认证,完成任务可额外获得6个月免费时长。申请流程包括注册阿里云账号、实名认证和学生认证。此外,学生可免费领取300元无门槛优惠券,在阿里云高校计划中使用。学生服务器可用于建站、部署等多种场景。详细信息和申请入口见官方链接。
135 0
|
12天前
|
缓存 开发框架 .NET
阿里云服务器经济型e和通用算力型u1实例与轻量应用服务器区别及选择参考
在目前阿里云的活动中,价格比较优惠的云服务器有轻量应用服务器和经济型e和通用算力型u1实例的云服务器,尤其是轻量应用服务器2核2G3M带宽61元1年,经济型e实例2核2G3M带宽99元1年,通用算力型u1实例2核4G5M带宽199元1年,是用户关注度最高的几款云服务器。有的新手用户由于是初次使用阿里云服务器,对于轻量应用服务器和经济型e和通用算力型u1实例的相关性能并不是很清楚,本文为大家做个简单的介绍,以供参考。
阿里云服务器经济型e和通用算力型u1实例与轻量应用服务器区别及选择参考
|
14天前
|
弹性计算 负载均衡 容灾
阿里云服务器地域和可用区是什么关系?云服务器地域和可用区选择参考
在我们选择阿里云服务器地域的时候,不管是选择国内的云服务器还是国外地域的云服务器,都有多个地域及可用区选择,那么什么是地域?什么是可用区?他们之间有何关系?云服务器地域和可用区应该如何选择呢?本文来为大家做个简单的介绍及选择参考。
阿里云服务器地域和可用区是什么关系?云服务器地域和可用区选择参考
|
16天前
|
安全 网络协议 网络安全
云服务器常见端口有哪些?(常见云服务器端口含义)
云服务器常用端口在网络通信中起着至关重要的作用。打个比方,我们将云服务器想象为一座拥有众多建筑物和场所的繁华城市。每个建筑物代表在云服务器上运行的特定应用程序或服务,例如网站、电子邮件服务器或数据库。现在,将端口视为这些建筑物的入口。为了确保城市的顺利运转和安全,您需要有一个规范的系统来管理这些入口。
26 13
|
19天前
|
监控 应用服务中间件 网络安全
购买阿里云服务器后如何将自己的项目部署到服务器并上线?
在阿里云服务器上部署项目涉及准备项目、配置服务器、设置SSH密钥、连接服务器、安装所需软件、部署项目、配置Web服务器(如果需要)、测试项目、监控和维护,最后上线。确保项目完整并测试无误,配置安全组和云盾,使用SSH连接,安装OS、数据库和编程环境。通过Git同步代码,配置Nginx或Apache,测试正常后正式上线。利用阿里云文档和教程辅助操作。
96 3

相关产品

  • 云服务器 ECS