本文以Java语言和Python语言为例介绍如何使用Alibaba Cloud ESS SDK快速创建多可用区的伸缩组。
前提条件
背景信息
创建专有网络伸缩组时,您需要配置伸缩组对应的交换机,伸缩组创建完成后,通过该伸缩组弹性扩张的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创建多可用区伸缩组
- 导入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>
- 使用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创建多可用区伸缩组
- 安装Alibaba Cloud ESS SDK for Python。执行以下命令,安装以下两个依赖。
pip install alibabacloud_credentials pip install alibabacloud_ess20220222==1.0.6
- 使用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优先级最高。