本文以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_ess20220222==1.7.4
使用Python SDK创建多可用区伸缩组。
导入Alibaba Cloud ESS SDK for Python依赖库后,您即可通过SDK编码创建多可用区伸缩组,示例代码如下:
# -*- coding: utf-8 -*- import os import sys from typing import List from alibabacloud_ess20220222.client import Client as Ess20220222Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_ess20220222 import models as ess_20220222_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class Sample: def __init__(self): pass @staticmethod def create_client() -> Ess20220222Client: """ 使用AK&SK初始化账号Client @return: Client @throws Exception """ # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 config = open_api_models.Config( # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。, access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。, access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] ) config.endpoint = f'ess.aliyuncs.com' return Ess20220222Client(config) @staticmethod def main( args: List[str], ) -> None: client = Sample.create_client() create_scaling_group_request = ess_20220222_models.CreateScalingGroupRequest( region_id='cn-hangzhou', scaling_group_name='py-sdk-create-scaling-group-sample', min_size=1, max_size=1, v_switch_ids=[ 'vsw-bp******g', 'vsw-bp******y' ] ) runtime = util_models.RuntimeOptions() try: # 复制代码运行请自行打印 API 的返回值 client.create_scaling_group_with_options(create_scaling_group_request, runtime) except Exception as error: # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 # 错误 message print(error.message) # 诊断地址 print(error.data.get("Recommend")) UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:])
上述代码中,以Python 3.9版本为例,其中,vSwitch的优先级随其在列表中出现的顺序依次降低,排在列表最前面的vSwitch优先级最高。