本文以Java语言和Python语言为例介绍如何使用Alibaba Cloud ESS SDK快速创建多可用区的伸缩组。

前提条件

  • 使用本教程进行操作前,请确保您已经注册了阿里云账号。如还未注册,请先完成账号注册

  • 已配置Alibaba Cloud Credentials。

    通过配置环境变量(ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET)的方式配置Alibaba Cloud Credentials工具的身份验证,实现以非AK硬编码的方式访问阿里云OpenAPI。更多信息,请参见配置环境变量方案

背景信息

创建专有网络伸缩组时,您需要配置伸缩组对应的交换机,伸缩组创建完成后,通过该伸缩组弹性扩张的ECS实例也都使用该交换机。由于原弹性伸缩服务限定一个专有网络伸缩组只能配置一个交换机,而一个交换机只归属于一个可用区,当您配置好伸缩组的交换机以后,如果交换机所在的可用区因库存不足等原因不能创建ECS实例,您伸缩组中的伸缩配置、伸缩规则以及伸缩组对应的报警任务等都将失效。

基于上述问题,您可以通过使用Alibaba Cloud ESS SDK快速创建多可用区伸缩组(为伸缩组新增多可用区参数VSwitchIds.N)来优化该问题。创建伸缩组时,您可以使用该参数为伸缩组配置多个交换机,当一个交换机所在可用区无法创建ECS实例的时候,弹性伸缩服务会为您自动切换到其他交换机所在的可用区,从而提高伸缩组的可用性。

注意事项

为了提高伸缩组的可用性,创建伸缩组时,您可以新增多可用区参数(VSwitchIds.N)为伸缩组配置多个交换机,使用该参数时需要注意以下几点:

  • 使用VSwitchIds.N多可用区参数时,VSwitchId参数将被忽略。
  • VSwitchIds.N可用区参数中,N代表交换机的优先级(N的取值范围:1~5),编号为1的交换机为创建实例的第一选择,交换机优先级随编号的增大依次降低。

    当优先级较高的交换机所在可用区无法创建实例时,会自动选择下一优先级的交换机来创建实例。在使用多可用区参数时,建议设置同一地域下不同可用区的交换机,降低因单可用区库存不足无法创建ECS实例的概率。

  • VSwitchIds.N可用区参数中,指定的多个交换机必须在同一个专有网络下。

使用Alibaba Cloud ESS SDK for Java创建多可用区伸缩组

  1. 导入Alibaba Cloud ESS SDK for Java。
    使用Maven来管理您Java项目的依赖库,在项目对应的pom.xml文件中加入下面依赖:
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>tea-openapi</artifactId>
      <version>0.2.8</version>
    </dependency>
     <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>ess20220222</artifactId>
          <version>1.0.5</version>
        </dependency>
        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>credentials-java</artifactId>
          <version>0.2.11</version>
        </dependency>
  2. 使用Java SDK创建多可用区伸缩组。
    将Alibaba Cloud ESS SDK for Java导入到Java工程后,您即可以通过SDK编码创建多可用区伸缩组,示例代码如下:
    import com.aliyun.teaopenapi.models.Config;
    import java.util.Arrays;
    import java.util.List;
    
    public class EssSdkDemo {
        public static final String       REGION_ID          = "cn-hangzhou";
        public static final Integer      MAX_SIZE           = 10;
        public static final Integer      MIN_SIZE           = 1;
        public static final String       SCALING_GROUP_NAME = "TestScalingGroup";
    
        //交换机列表,交换机优先级从前往后依次降低,第一位的交换机优先级最高。
        public static final String[]     vswitchIdArray     = { "vsw-id1", "vsw-id2" };
        public static final List<String> vswitchIds         = Arrays.asList(vswitchIdArray);
    
        public static void main(String[] args) throws Exception {
            com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
            com.aliyun.teaopenapi.models.Config config = new Config();
            config.setCredential(credentialClient);
            config.setEndpoint("ess.aliyuncs.com");
            com.aliyun.ess20220222.Client client = new com.aliyun.ess20220222.Client(config);
            createScalingGroup(client);
    
        }
    
        public static String createScalingGroup(com.aliyun.ess20220222.Client client) throws Exception {
            com.aliyun.ess20220222.models.CreateScalingGroupRequest request = new com.aliyun.ess20220222.models.CreateScalingGroupRequest();
            request.setRegionId(REGION_ID);
            request.setMaxSize(MAX_SIZE);
            request.setMinSize(MIN_SIZE);
            request.setScalingGroupName(SCALING_GROUP_NAME);
            request.setVSwitchIds(vswitchIds);
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            com.aliyun.ess20220222.models.CreateScalingGroupResponse scalingGroupWithOptions = client.createScalingGroupWithOptions(request, runtime);
            return scalingGroupWithOptions.getBody().toMap().toString();
        }
    
    }       

    上述代码中,vSwitch的优先级随其在列表中出现的顺序依次降低,排在列表最前面的vSwitch优先级最高。

使用Alibaba Cloud ESS SDK for Python创建多可用区伸缩组

  1. 安装Alibaba Cloud ESS SDK for Python。
    执行以下命令,安装以下两个依赖。
    pip install alibabacloud_credentials
    pip install alibabacloud_ess20220222==1.0.6
  2. 使用Python SDK创建多可用区伸缩组。
    导入Alibaba Cloud ESS SDK for Python依赖库后,您即可通过SDK编码创建多可用区伸缩组,示例代码如下:
    #!/usr/bin/env python
    #coding=utf-8
    
    from aliyunsdkcore.client import AcsClient
    from aliyunsdkcore.request import CommonRequest
    from aliyunsdkcore.auth.credentials import AccessKeyCredential
    from alibabacloud_credentials.client import Client as CredClient
    cred=CredClient()
    accesskeyid = cred.get_access_key_id()
    accesskeysecret = cred.get_access_key_secret()
    credentials = AccessKeyCredential(accesskeyid, accesskeysecret)
    client = AcsClient(region_id='cn-hangzhou', credential=credentials)
    request = CommonRequest()
    request.set_accept_format('json')
    request.set_domain('ess.aliyuncs.com')
    request.set_method('POST')
    request.set_protocol_type('https') # https | http
    request.set_version('2022-02-22')
    request.set_action_name('CreateScalingGroup')
    request.add_query_param('ScalingGroupName', "testname")
    request.add_query_param('MinSize', "1")
    request.add_query_param('MaxSize', "1")
    request.add_query_param('VSwitchIds.1', "vsw-1")
    request.add_query_param('VSwitchIds.2', "vsw-2")
    request.add_query_param('RegionId', "cn-hangzhou")
    
    response = client.do_action(request)
    # python2:  print(response)
    print(str(response, encoding = 'utf-8'))

    上述代码中,以Python 3.9版本为例,其中,vSwitch的优先级随其在列表中出现的顺序依次降低,排在列表最前面的vSwitch优先级最高。