全部產品
Search
文件中心

Auto Scaling:使用Alibaba Cloud ESS SDK快速建立多可用性區域伸縮組

更新時間:Oct 25, 2024

本文以Java語言和Python語言為例介紹如何使用Alibaba Cloud ESS SDK快速建立多可用性區域的伸縮組。

前提條件

  • 使用本教程進行操作前,請確保您已經註冊了阿里雲帳號。如還未註冊,請先完成帳號註冊

  • 已配置Alibaba Cloud Credentials。

    通過配置環境變數(ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET)的方式配置Alibaba Cloud Credentials工具的身分識別驗證,實現以非AK硬式編碼方式訪問阿里雲OpenAPI。更多資訊,請參見預設憑據鏈

背景資訊

建立專用網路伸縮組時,您需要配置伸縮組對應的交換器,伸縮組建立完成後,通過該伸縮組彈性擴張的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建立多可用性區域伸縮組

  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_ess20220222==1.7.4
  2. 使用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優先順序最高。