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

简介: ESS 弹性伸缩服务中的伸缩组是具有相同应用场景的 ECS 实例的集合。伸缩组定义了组内 ECS 实例数的最大值、最小值及其相关联的负载均衡实例和 RDS 实例等属性。

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

导入 ESS Java SDK

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

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

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-ess</artifactId>
    <version>2.1.3</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>3.5.0</version>
</dependency>

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

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

public class EssSdkDemo {

    public static final String       REGION_ID          = "cn-hangzhou";

    public static final String       AK                 = "ak";

    public static final String       AKS                = "aks";

    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", "vsw-id3",
            "vsw-id4", "vsw-id5" };

    public static final List<String> vswitchIds         = Arrays.asList(vswitchIdArray);

    public static void main(String[] args) throws Exception {
        IClientProfile clientProfile = DefaultProfile.getProfile(REGION_ID, AK, AKS);
        IAcsClient client = new DefaultAcsClient(clientProfile);
        createScalingGroup(client);
    }

    /**
     * 创建多可用区伸缩组
     * @param client
     * @return
     * @throws Exception
     */
    public static String createScalingGroup(IAcsClient client) throws Exception {
        CreateScalingGroupRequest request = new CreateScalingGroupRequest();
        request.setRegionId("cn-beijing");
        request.setMaxSize(MAX_SIZE);
        request.setMinSize(MIN_SIZE);
        request.setScalingGroupName(SCALING_GROUP_NAME);
        request.setVSwitchIds(vswitchIds);
        CreateScalingGroupResponse response = client.getAcsResponse(request);
        return response.getScalingGroupId();
    }
}

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

Python

安装 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 安装两个所需的依赖。

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

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

#  coding=utf-8
import json
import logging

from aliyunsdkcore import client
from aliyunsdkess.request.v20140828.CreateScalingGroupRequest import CreateScalingGroupRequest

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S')
# 请替换自己的ak信息
ak = 'ak'
aks = 'aks'

scaling_group_name = 'ScalingGroupTest'
max_size = 10
min_size = 1
vswitch_ids = ["vsw-id1", "vsw-id2", "vsw-id3", "vsw-id4", "vsw-id5"]

region_id = 'cn-beijing'

clt = client.AcsClient(ak, aks, region_id)
def _create_scaling_group():
    request = CreateScalingGroupRequest()
    request.set_ScalingGroupName(scaling_group_name)
    request.set_MaxSize(max_size)
    request.set_MinSize(min_size)
    request.set_VSwitchIds(vswitch_ids)
    response = _send_request(request)
    return response.get('ScalingGroupId')
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action(request)
        logging.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        logging.error(e)

if __name__ == '__main__':
    scaling_group_id = _create_scaling_group()
    print '创建伸缩组成功,伸缩组ID:' + str(scaling_group_id)

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

您可以参考 [创建伸缩组
接口](https://help.aliyun.com/document_detail/25936.html?spm=5176.doc25944.6.613.4LKtNg) 获取更多关于伸缩组创建的相关信息。伸缩组创建完以后,您可以参考 创建伸缩配置接口 来创建伸缩组下对应的伸缩配置。关于伸缩组和伸缩配置的创建,您还可以参考 让 ESS 更灵活的新特性:UserData & KeyPair & RamRole & Tags 来了解伸缩组和伸缩配置完整的创建过程。

写在最后

ESS 伸缩组多可用区参数目前可通过 OpenApi 的方式来使用,弹性伸缩服务控制台近期也会开放多可用区功能。弹性伸缩服务正在快速发展,后续会有更多的新特性推出,以便更好地满足您的需求,同时,弹性伸缩服务也在不断地优化中,在改进您的使用体验的同时也会不断提高弹性伸缩服务的可靠性,感谢您的一路陪伴。

相关文章
|
监控 算法 开发工具
5.2 芯片SDK开发:算法工程原理及创建|学习笔记
快速学习5.2 芯片SDK开发:算法工程原理及创建
5.2 芯片SDK开发:算法工程原理及创建|学习笔记
|
算法 开发工具 芯片
5.1 芯片SDK开发:创建初始SDK|学习笔记
快速学习5.1 芯片SDK开发:创建初始SDK
5.1 芯片SDK开发:创建初始SDK|学习笔记
|
弹性计算 开发者
通过伸缩规则创建弹性伸缩方案-操作演示|学习笔记
快速学习通过伸缩规则创建弹性伸缩方案-操作演示
通过伸缩规则创建弹性伸缩方案-操作演示|学习笔记
|
弹性计算 运维 Kubernetes
Kubernetes弹性伸缩全场景解读(八) - 定时伸缩组件支持运维模式
## 前言 定时伸缩(cronhpa)是很多开发者在解决负载周期性时最常用的方法,通过类似crontab的语法可以在一个时间点定时触发伸缩活动。crontab的语义表达是很强大的,但是也存在语法复杂,执行计划容易被打断等问题。为了解决上述的问题,定时伸缩(cronhpa)提供了运维模式,支持通过运维页面来查看底层排队的定时任务,同时也提供了API接口用于开发者自研的平台接入与集成。 #
728 0
Kubernetes弹性伸缩全场景解读(八) - 定时伸缩组件支持运维模式
使用 SDK 创建跟踪并配置日志服务报表
本文主要介绍如何通过 SDK 创建跟踪,将操作事件投递到日志服务,并配置日志服务报表。
使用 SDK 创建跟踪并配置日志服务报表
|
弹性计算 Kubernetes 监控
Kubernetes弹性伸缩全场景解读(八) - 定时伸缩组件支持HPA兼容
在之前的文章中,我们介绍了kubernetes-cronhpa-controller是如何通过设置定时的方式触发容器的水平副本伸缩,但是在实际的场景下,虽然定时伸缩对于负载有规律的应用比较友好,但是应用为了防止突发的流量冲击,还是会配置HPA来做最后的保障的。
4272 0
|
机器人 开发工具
阿里云RPA(机器人流程自动化)干货系列之十二:创建自定义SDK函数
导读:本文是阿里云RPA(机器人流程自动化)干货系列之十二,上篇介绍了采用编码模式开发了一个简单的RPA应用,如果自带的SDK函数不满足开发需求的话可以自行创建一个,本篇就介绍如何创建一个自定义SDK函数。 1)打开Studio客户端,点击”新建编码模式应用”,在弹出来的对话框中选择“自定义SDK” 2)编写一段应用代码,我们就直接打印一
6984 0
|
容器 Kubernetes 弹性计算
Kubernetes弹性伸缩全场景解读(七) - 定时伸缩组件发布日期过滤等功能
kubernetes-cronhpa-controller是容器服务开源的一款面向Pod水平定时伸缩场景的CRD controller。在本系列的之前文章中已经向大家介绍了kubernetes-cronhpa-controller的基本用法了,今天我们来看下近期kubernetes-cronhpa-controller又增加了哪些新的功能。
2861 0

相关产品

  • 弹性伸缩