全部产品
阿里云办公

使用ESS SDK快速创建多可用区伸缩组

更新时间:2017-12-08 17:07:48

ESS伸缩组分为经典网络伸缩组和专有网络伸缩组。当您在创建专有网络伸缩组的时候,需要配置伸缩组对应的交换机。伸缩组创建出来以后,通过当前的伸缩组弹性创建出来的ECS实例都属于该交换机。

ESS伸缩组多可用区参数介绍

原ESS弹性伸缩服务限定,一个专有网络伸缩组只能配置一个交换机。由于一个交换机只归属于一个可用区,这样存在的问题就是,当您配置好ESS伸缩组的交换机以后,如果交换机所在的可用区由于库存不足等原因无法创建出ECS实例,那么您伸缩组中的伸缩配置、伸缩规则以及伸缩组对应的报警任务等都将生效。

为了优化上述问题,提高伸缩组的可用性,ESS伸缩组新增多可用区参数(VSwitchIds.N),您在创建伸缩组的时候可以使用该参数为您的伸缩组配置多个交换机,当一个交换机所在可用区无法创建实例的时候,ESS弹性伸缩服务会为您自动切换到其它可用区。在使用该参数的时候,您需要注意以下几点:

  • 如果使用了VSwitchIds.N多可用区参数,VSwitchId参数将被忽略。
  • VSwitchIds.N参数中,N的取值范围为[1, 5],即一个伸缩最多可以配置5个交换机。
  • VSwitchIds.N参数中指定的交换机必须在同一个VPC下。
  • VSwitchIds.N参数中N代表交换机的优先级,编号为1的交换机为创建实例的第一选择,交换机优先级随编号的增大依次降低。
  • 当优先级较高的交换机所在可用区无法创建实例时,会自动选择下一优先级的交换机来创建实例。当您在使用多可用区参数来创建伸缩组时,尽可能地设置同一地域下不同可用区的交换机来创建您的伸缩组,这样可以有效地减少单可用区无法创建出实例问题的发生,提高了伸缩组的可用性。

使用SDK创建多可用区伸缩组

本章将介绍如何使用SDK创建多可用区的伸缩组,这里以Java语言和Python语言为例进行介绍。

Java

1. 导入 ESS Java SDK

首先,您需要下载aliyun-java-sdk-core、aliyun-java-sdk-ess这2个依赖,您可以查看maven-central界面,搜索并下载相应的jar包,aliyun-java-sdk-ess对应的jar包的版本号需要是2.1.3及以上版本才能使用多可用区参数,aliyun-java-sdk-core对应的jar包的版本号推荐使用最新版本。

您也可以使用maven来管理您Java项目的依赖库,在您的项目对应的pom.xml文件中加入下面的依赖项:

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-ess</artifactId>
  4. <version>2.1.3</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.aliyun</groupId>
  8. <artifactId>aliyun-java-sdk-core</artifactId>
  9. <version>3.5.0</version>
  10. </dependency>
2. 使用Java SDK创建多可用区伸缩组

导入ESS Java SDK到您的Java工程后,您就可以使用SDK来创建多可用区伸缩组了。使用Java SDK创建多可用区伸缩组的代码如下:

  1. public class EssSdkDemo {
  2. public static final String REGION_ID = "cn-hangzhou";
  3. public static final String AK = "ak";
  4. public static final String AKS = "aks";
  5. public static final Integer MAX_SIZE = 10;
  6. public static final Integer MIN_SIZE = 1;
  7. public static final String SCALING_GROUP_NAME = "TestScalingGroup";
  8. //交换机列表,交换机优先级从前往后依次降低,第一位的交换机优先级最高。
  9. public static final String[] vswitchIdArray = { "vsw-id1", "vsw-id2", "vsw-id3",
  10. "vsw-id4", "vsw-id5" };
  11. public static final List<String> vswitchIds = Arrays.asList(vswitchIdArray);
  12. public static void main(String[] args) throws Exception {
  13. IClientProfile clientProfile = DefaultProfile.getProfile(REGION_ID, AK, AKS);
  14. IAcsClient client = new DefaultAcsClient(clientProfile);
  15. createScalingGroup(client);
  16. }
  17. /**
  18. * 创建多可用区伸缩组。
  19. * @param client
  20. * @return
  21. * @throws Exception
  22. */
  23. public static String createScalingGroup(IAcsClient client) throws Exception {
  24. CreateScalingGroupRequest request = new CreateScalingGroupRequest();
  25. request.setRegionId("cn-beijing");
  26. request.setMaxSize(MAX_SIZE);
  27. request.setMinSize(MIN_SIZE);
  28. request.setScalingGroupName(SCALING_GROUP_NAME);
  29. request.setVSwitchIds(vswitchIds);
  30. CreateScalingGroupResponse response = client.getAcsResponse(request);
  31. return response.getScalingGroupId();
  32. }
  33. }

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

Python

1. 安装ESS Python SDK

同Java语言一样,在使用ESS Python SDK前,您需要先下载aliyun-python-sdk-ess、aliyun-python-sdk-core 两个依赖。本文推荐使用pip的方式来安装Python依赖包,关于pip的安装您可以参考Installation-Pip。 安装好pip以后,您可以使用命令pip install aliyun-java-sdk-ess==2.1.3 pip install aliyun-java-sdk-core==3.5.0安装 2 个所需的依赖。

2. 使用 Python SDK 创建多可用区伸缩组

导入ESS Python SDK依赖库以后,您就可以使用SDK来创建多可用区伸缩组了。使用Python SDK创建多可用区伸缩组的代码如下:

  1. # coding=utf-8
  2. import json
  3. import logging
  4. from aliyunsdkcore import client
  5. from aliyunsdkess.request.v20140828.CreateScalingGroupRequest import CreateScalingGroupRequest
  6. logging.basicConfig(level=logging.INFO,
  7. format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  8. datefmt='%a, %d %b %Y %H:%M:%S')
  9. # 请替换自己的ak信息。
  10. ak = 'ak'
  11. aks = 'aks'
  12. scaling_group_name = 'ScalingGroupTest'
  13. max_size = 10
  14. min_size = 1
  15. vswitch_ids = ["vsw-id1", "vsw-id2", "vsw-id3", "vsw-id4", "vsw-id5"]
  16. region_id = 'cn-beijing'
  17. clt = client.AcsClient(ak, aks, region_id)
  1. def _create_scaling_group():
  2. request = CreateScalingGroupRequest()
  3. request.set_ScalingGroupName(scaling_group_name)
  4. request.set_MaxSize(max_size)
  5. request.set_MinSize(min_size)
  6. request.set_VSwitchIds(vswitch_ids)
  7. response = _send_request(request)
  8. return response.get('ScalingGroupId')
  1. def _send_request(request):
  2. request.set_accept_format('json')
  3. try:
  4. response_str = clt.do_action(request)
  5. logging.info(response_str)
  6. response_detail = json.loads(response_str)
  7. return response_detail
  8. except Exception as e:
  9. logging.error(e)
  10. if __name__ == '__main__':
  11. scaling_group_id = _create_scaling_group()
  12. print '创建伸缩组成功,伸缩组ID:' + str(scaling_group_id)

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

您可以参考创建伸缩组接口获取更多关于伸缩组创建的相关信息。伸缩组创建完以后,您可以参考创建伸缩组接口来创建伸缩组下对应的伸缩配置。关于伸缩组和伸缩配置的创建,您还可以参考让 ESS更灵活的新特性来了解伸缩组和伸缩配置完整的创建过程。

本文导读目录