您可以使用資源編排服務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時,表示操作成功。