您可以使用资源编排服务ROS(Resource Orchestration Service)创建资源栈,在资源栈中创建资源,并同时为资源绑定标签,方便日后的运维管理。支持为多个云资源批量绑定或更新标签,提升运维效率。

背景信息

本文将使用ROS Python SDK创建资源栈。更多信息,请参见Python SDK使用示例

为多个云资源绑定相同标签

如下将提供一个示例,使用资源栈创建专有网络VPCmytest-vpc和交换机vSwitchmytest-vsw-h,并同时为VPC和vSwitch绑定app:test标签。

  1. 编写模板。
    {
      "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"
          }
        }
      }
    }

    模板说明:创建一个VPC和一个vSwitch。

  2. 创建资源栈,并为VPC和vSwitch绑定标签app:test
    # pip install alibabacloud_ros20190910
    from alibabacloud_ros20190910.client import Client as ROS20190910Client
    from alibabacloud_tea_openapi import models as open_api_models
    from alibabacloud_ros20190910 import models as ros20190910_models
    
    AK = '<AccessKeyId>'
    SECRET = '<AccessKeySecret>'
    REGION = '<RegionId>'  # 例如:'cn-beijing'、'cn-hangzhou'。
    template = '''
    <Template>
    '''
    
    
    def create_client(
            access_key_id: str,
            access_key_secret: str,
    ) -> ROS20190910Client:
        """
        使用AccessKey初始化账号Client。
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            # 您的AccessKey ID。
            access_key_id=access_key_id,
            # 您的AccessKey Secret。
            access_key_secret=access_key_secret,
        )
        # 访问的域名。
        config.endpoint = 'ros.aliyuncs.com'
        return ROS20190910Client(config)
    
    
    def create_stack(region_id, stack_name, template_body, timeout_in_minutes=40, parameters=[], tags=[]):
        """create stack"""
        create_stack_request = ros20190910_models.CreateStackRequest(
            region_id=region_id,
            stack_name=stack_name,
            # 若模板较大,建议使用TemplateURL参数,避免URL过长,调用失败。
            # 您也可以使用Body Param + HTTP POST的方式传递模板内容。
            template_body=template_body,
            timeout_in_minutes=timeout_in_minutes,
            parameters=parameters,
            tags=tags,
            disable_rollback=True
        )
        response = client.create_stack(create_stack_request)
    
        return response.body
    
    
    client = create_client(AK, SECRET)
    tags = [
            ros20190910_models.CreateStackRequestTags(
                key='app',
                value='test'
            )
        ]
    
    print(create_stack(REGION, 'MyStack', template, tags=tags, timeout_in_minutes=60))
                            

    参数说明:

    • <AccessKeyId>和<AccessKeySecret>请替换为您实际的AccessKey ID 和AccessKey Secret。
    • <Template>请替换为步骤1中的模板。
  3. 可选:登录专有网络管理控制台,查看VPC和vSwitch绑定的标签。

    当VPC和vSwitch都绑定了标签app:test,表示操作成功。

为多个云资源绑定不同标签

如下将提供一个示例,使用资源栈创建专有网络VPCmytest-vpc和交换机vSwitchmytest-vsw-h,为VPC和vSwitch绑定通用标签app:test,除此之外还要为vSwitch绑定特定标签group:test。最终效果为:
  • VPCmytest-vpc绑定的标签:app:test
  • vSwitchmytest-vsw-h绑定的标签:app:testgroup:test
  1. 编写模板。
    {
      "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" }]
          }
        }
      }
    }

    模板说明:创建一个VPC和一个vSwitch,并为vSwitch绑定特定标签group:test

  2. 创建资源栈,并为VPC和vSwitch绑定通用标签app:test
    # pip install alibabacloud_ros20190910
    from alibabacloud_ros20190910.client import Client as ROS20190910Client
    from alibabacloud_tea_openapi import models as open_api_models
    from alibabacloud_ros20190910 import models as ros20190910_models
    
    AK = '<AccessKeyId>'
    SECRET = '<AccessKeySecret>'
    REGION = '<RegionId>'  # 例如:'cn-beijing'、'cn-hangzhou'。
    template = '''
    <Template>
    '''
    
    
    def create_client(
            access_key_id: str,
            access_key_secret: str,
    ) -> ROS20190910Client:
        """
        使用AccessKey初始化账号Client。
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            # 您的AccessKey ID。
            access_key_id=access_key_id,
            # 您的AccessKey Secret。
            access_key_secret=access_key_secret,
        )
        # 访问的域名。
        config.endpoint = 'ros.aliyuncs.com'
        return ROS20190910Client(config)
    
    
    def create_stack(region_id, stack_name, template_body, timeout_in_minutes=40, parameters=[], tags=[]):
        """create stack"""
        create_stack_request = ros20190910_models.CreateStackRequest(
            region_id=region_id,
            stack_name=stack_name,
            # 若模板较大,建议使用TemplateURL参数,避免URL过长,调用失败。
            # 您也可以使用Body Param + HTTP POST的方式传递模板内容。
            template_body=template_body,
            timeout_in_minutes=timeout_in_minutes,
            parameters=parameters,
            tags=tags,
            disable_rollback=True
        )
        response = client.create_stack(create_stack_request)
    
        return response.body
    
    
    client = create_client(AK, SECRET)
    tags = [
            ros20190910_models.CreateStackRequestTags(
                key='app',
                value='test'
            )
        ]
    
    print(create_stack(REGION, 'MyStack', template, tags=tags, timeout_in_minutes=60))

    参数说明:

    • <AccessKeyId>和<AccessKeySecret>请替换为您实际的AccessKey ID 和AccessKey Secret。
    • <Template>请替换为步骤1中的模板。
  3. 可选:登录专有网络管理控制台,查询VPC和vSwitch绑定的标签。

    当VPC绑定的标签为app:test,vSwitch绑定的标签为app:testgroup:test时,表示操作成功。

为多个云资源更新标签

如下将提供一个示例,在为多个云资源绑定相同标签的基础上,将VPCmytest-vpc和vSwitchmytest-vsw-h已绑定的标签app:test更新为app:normal

  1. 创建资源栈,并为VPC和vSwitch绑定新标签app:normal
    # pip install alibabacloud_ros20190910
    from alibabacloud_ros20190910.client import Client as ROS20190910Client
    from alibabacloud_tea_openapi import models as open_api_models
    from alibabacloud_ros20190910 import models as ros20190910_models
    
    AK = '<AccessKeyId>'
    SECRET = '<AccessKeySecret>'
    REGION = '<RegionId>'  # 例如:'cn-beijing'、'cn-hangzhou'。
    template = '''
    <Template>
    '''
    
    
    def create_client(
            access_key_id: str,
            access_key_secret: str,
    ) -> ROS20190910Client:
        """
        使用AccessKey初始化账号Client。
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            # 您的AccessKey ID。
            access_key_id=access_key_id,
            # 您的AccessKey Secret。
            access_key_secret=access_key_secret,
        )
        # 访问的域名。
        config.endpoint = 'ros.aliyuncs.com'
        return ROS20190910Client(config)
    
    
    def create_stack(region_id, stack_name, template_body, timeout_in_minutes=40, parameters=[], tags=[]):
        """create stack"""
        create_stack_request = ros20190910_models.CreateStackRequest(
            region_id=region_id,
            stack_name=stack_name,
            # 若模板较大,建议使用TemplateURL参数,避免URL过长,调用失败。
            # 您也可以使用Body Param + HTTP POST的方式传递模板内容。
            template_body=template_body,
            timeout_in_minutes=timeout_in_minutes,
            parameters=parameters,
            tags=tags,
            disable_rollback=True
        )
        response = client.create_stack(create_stack_request)
    
        return response.body
    
    
    client = create_client(AK, SECRET)
    tags = [
            ros20190910_models.CreateStackRequestTags(
                key='app',
                value='normal'
            )
        ]
    
    print(create_stack(REGION, 'MyStack', template, tags=tags, timeout_in_minutes=60))

    参数说明:

  2. 可选:登录专有网络管理控制台,查询VPC和vSwitch绑定的标签。

    当VPC和vSwitch都绑定了新标签app:normal时,表示操作成功。