弹性伸缩组管理
引导式阅读
Java
弹性伸缩组管理
作者
C***
上架时间
2021-07-02 07:33:27

版本说明

本示例基于华为云SDK V1.0版本开发,高版本示例正在开发中。

功能介绍

伸缩组是具有相同属性和应用场景的云服务器和伸缩策略的集合,是启停伸缩策略和进行伸缩活动的基本单位。您可以使用伸缩策略设定的条件自动增加、减少伸缩组中的实例数量,或维持伸缩组中固定的实例数量。本示例将带您了解如何启停一个伸缩组及其他操作。

准备工作

弹性伸缩组管理

初始化客户端

参数获取可参照准备工作中token认证方式。

String user = "replace-with-your-username"; String password = "replace-with-your-password"; String projectId = "replace-with-your-projectId"; String userDomainId = "replace-with-your-domainId"; String authUrl = "https://iam.example.com/v3"; // endpointUrl OSClientV3 osclient = OSFactory.builderV3().endpoint(authUrl) .credentials(user, password, Identifier.byId(userDomainId)) .scopeToProject(Identifier.byId(projectId)).authenticate();

创建弹性伸缩组

伸缩组内定义了最大实例数、期望实例数、最小实例数、虚拟私有云、子网、负载均衡等信息。

创建所需部分参数

名称 类型 描述
groupName string 伸缩组名称(1-64个字符),只能包含中文、字母、数字、下划线、中划线。
vpcId string VPC信息,通过查询VPC服务VPC列表接口获取,详见《虚拟私有云API参考》的“查询VPC列表”。
networks Array of Networks objects 网络信息,最多支持选择5个子网,传入的第一个子网默认作为云服务器的主网卡。使用vpc_id通过查询VPC服务子网列表接口获取, 查询子网列表”。
configId string 网络信息,最多支持选择5个子网,传入的第一个子网默认作为云服务器的主网卡。使用vpc_id通过查询VPC服务子网列表接口获取, 查询子网列表”。
securityGroups Array of SecurityGroups objects 安全组信息,最多支持选择1个安全组。使用vpc_id通过查询VPC服务安全组列表接口获取,详见《虚拟私有云API参考》的“查询安全组列表”。当伸缩配置和伸缩组同时指定安全组时,将以伸缩配置中的安全组为准;当伸缩配置和伸缩组都没有指定安全组时,将使用默认安全组。为了使用灵活性更高,推荐在伸缩配置中指定安全组。
availabilityZones Array of string 可用分区信息。弹性伸缩活动中自动添加的云服务器会被创建在指定的可用区中。如果没有指定可用分区,会由系统自动指定可用分区。详情请参考地区和终端节点。

代码展示

// Create scalingGroup public String creatGroup() { IdResourceEntity network = new IdResourceEntity(); network.setId("******"); IdResourceEntity securityGroup = new IdResourceEntity(); securityGroup.setId("******"); String availabilityZon = "******"; ASAutoScalingGroupCreate group = ASAutoScalingGroupCreate.builder().groupName("test").vpcId("******") .networks(Lists.newArrayList(network)).configId("******").securityGroups(Lists.newArrayList(securityGroup)) .availabilityZones(com.google.common.collect.Lists.newArrayList(availabilityZon)).build(); String groupId = osclient.autoScaling().groups().create(group); if (null != groupId) { System.out.println("create scalingGroup success, id = " + groupId); return groupId; } else { System.out.println("create scalingGroup failed"); return null; } }

说明

  • 1、默认最多可以创建10个伸缩组。
  • 2、如果伸缩组配置了负载均衡,在添加或移除实例时,会自动为实例绑定或解绑负载均衡监听器。
  • 3、如果伸缩组使用负载均衡健康检查方式,伸缩组中的实例需要启用负载均衡器的监听端口才能通过健康检查。端口启用可在安全组中进行配置,可参考添加安全组规则进行操作。
  • 4、更多信息请参考API Explorer

查询弹性伸缩组详情

根据伸缩组ID查询指定弹性伸缩组详情

// Get scalingGroup public void getGroup(String groupId) { ScalingGroup group = osclient.autoScaling().groups().get(groupId); if (null != group) { System.out.print("get scalingGroup success, id = " + group.toString()); } else { System.out.println("get scalingGroup failed"); } }

说明:更多信息请参考API Explorer

查询弹性伸缩组列表

根据输入条件过滤查询弹性伸缩组列表。查询结果分页显示。若不加过滤条件默认最多查询租户下20条伸缩组信息。

// List all scalingGroups public void listGroups() { List< ? extends ScalingGroup> grouplist = osclient.autoScaling().groups().list(); if (null != grouplist) { System.out.println("List all scalingGroups success, size is = " + grouplist.size()); } else { System.out.println("get scalingGroups failed"); } }

说明:可根据伸缩组名称,伸缩配置ID,伸缩组状态,企业项目ID,起始行号,记录条数进行条件过滤查询。更多信息请参考API Explorer

修改弹性伸缩组

根据ID修改指定弹性伸缩组中的信息

// Update a scalingGroup public void updateGroup(String groupId) { ASAutoScalingGroupUpdate update = ASAutoScalingGroupUpdate.builder().groupName("test1").maxInstanceNumber(10).coolDownTime(800).build(); String group = osclient.autoScaling().groups().update(groupId, update); if (null != group) { System.out.println("Update a scalingGroup success, id = " + group); } else { System.out.println("Update a scalingGroup failed"); } }

说明

  • 1、更换伸缩组的伸缩配置,伸缩组中已经存在的使用之前伸缩配置创建的云服务器不受影响。
  • 2、伸缩组为没有正在进行的伸缩活动时,可以修改伸缩组的子网、可用区和负载均衡配置。
  • 3、当伸缩组的期望实例数改变时,会触发伸缩活动加入或移出实例。期望实例数必须大于或等于最小实例数,必须小于或等于最大实例数。
  • 4、更多信息请参考API Explorer

启用弹性伸缩组

当需要伸缩组实现自动创建或收缩实例时,您可以启用伸缩组。

// Resume a scalingGroup public void resumeGroup(String groupId) { ActionResponse resp = osclient.autoScaling().groups().resume(groupId); if (resp.isSuccess()) { System.out.println("Resume scalingGroup success"); } else { System.out.println("Resume scalingGroup failed"); } }

说明:更多信息请参考API Explorer

停用弹性伸缩组

当您需要对伸缩组中的实例进行关机配置或者升级时,为了避免健康检查将该实例删除,您可以先停用伸缩组,然后对实例进行操作,待实例状态恢复为运行中后再启用伸缩组。

// Pause a scalingGroup public void pauseGroup(String groupId) { ActionResponse resp = osclient.autoScaling().groups().pause(groupId); if (resp.isSuccess()) { System.out.println("Pause scalingGroup success"); } else { System.out.println("Pause scalingGroup failed"); } }

说明:已停用状态的伸缩组,不会自动触发任何伸缩活动。当伸缩组正在进行伸缩活动,即使停用,正在进行的伸缩活动也不会立即停止。更多信息请参考API Explorer

删除弹性伸缩组

当您不再需要某个伸缩组时,可以删除该伸缩组。

// Delete a scalingGroup public void deleteGroup(String groupId) { ActionResponse resp = osclient.autoScaling().groups().delete(groupId); if (resp.isSuccess()) { System.out.println("Delete scalingGroup success"); } else { System.out.println("Delete scalingGroup failed"); } }

说明

  • 1、force_delete属性表示如果伸缩组存在ECS实例或正在进行伸缩活动,是否强制删除伸缩组并移出和释放ECS实例。默认值为no,表示不强制删除伸缩组。
  • 2、如果force_delete的值为no,必须满足以下两个条件,才能删除伸缩组:
    条件一:伸缩组没有正在进行的伸缩活动。
    条件二:伸缩组当前的ECS实例数量(current_instance_number)为0。
  • 3、如果force_delete的值为yes,伸缩组会被置于DELETING状态,拒绝接收新的伸缩活动请求,然后等待已有的伸缩活动完成,最后将伸缩组内所有ECS实例移出伸缩组(用户手动添加的ECS实例会被移出伸缩组,弹性伸缩自动创建的ECS实例会被自动删除)并删除伸缩组。
  • 4、更多信息请参考API Explorer

参考

更多信息请参考弹性伸缩 AS