本文以Java語言和Python語言為例介紹如何使用Alibaba Cloud ESS SDK快速建立多可用性區域的伸縮組。
前提條件
背景資訊
建立專用網路伸縮組時,您需要配置伸縮組對應的交換器,伸縮組建立完成後,通過該伸縮組彈性擴張的ECS執行個體也都使用該交換器。由於原Auto Scaling服務限定一個專用網路伸縮組只能配置一個交換器,而一個交換器只歸屬於一個可用性區域,當您配置好伸縮組的交換器以後,如果交換器所在的可用性區域因庫存不足等原因不能建立ECS執行個體,您伸縮組中的伸縮配置、伸縮規則以及伸縮組對應的警示任務等都將失效。
基於上述問題,您可以通過使用Alibaba Cloud ESS SDK快速建立多可用性區域伸縮組(為伸縮組新增多可用性區域參數VSwitchIds.N)來最佳化該問題。建立伸縮組時,您可以使用該參數為伸縮組配置多個交換器,當一個交換器所在可用性區域無法建立ECS執行個體的時候,Auto Scaling服務會為您自動切換到其他交換器所在的可用性區域,從而提高伸縮組的可用性。
注意事項
為了提高伸縮組的可用性,建立伸縮組時,您可以新增多可用性區域參數(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優先順序最高。