ECSUtils.java 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package com.fdkankan.mqcontroller.utils;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.aliyun.ess20220222.Client;
  4. import com.aliyun.ess20220222.models.ExecuteScalingRuleRequest;
  5. import com.aliyun.ess20220222.models.ExecuteScalingRuleResponse;
  6. import com.aliyun.ess20220222.models.RemoveInstancesRequest;
  7. import com.aliyun.ess20220222.models.RemoveInstancesResponse;
  8. import com.aliyun.tea.TeaException;
  9. import com.aliyun.teaopenapi.models.Config;
  10. import lombok.extern.slf4j.Slf4j;
  11. import java.util.Arrays;
  12. import java.util.UUID;
  13. @Slf4j
  14. public class ECSUtils {
  15. public static Client initClient(String accessKey,String accessKeySecret,String endPoint) throws Exception {
  16. Config config = new Config();
  17. config.setAccessKeyId(accessKey);
  18. config.setAccessKeySecret(accessKeySecret);
  19. config.setEndpoint(endPoint);
  20. return new Client(config);
  21. }
  22. public static Boolean executeScalingActivity(Client client, String scalingRuleAri) throws Exception{
  23. ExecuteScalingRuleRequest request = new ExecuteScalingRuleRequest();
  24. request.setScalingRuleAri(scalingRuleAri);
  25. request.setClientToken(UUID.randomUUID().toString()); // 使用UUID生成唯一标识,避免并发冲突
  26. ExecuteScalingRuleResponse response = client.executeScalingRule(request);
  27. log.info("executeScalingActivity-resp:{}",JSONObject.toJSONString(response));
  28. if(response.getStatusCode() == 200){
  29. return true;
  30. }
  31. return false;
  32. }
  33. public static Boolean executeScalingStop(Client client, String groupId,String instanceId) {
  34. try {
  35. RemoveInstancesRequest removeInstancesRequest = new RemoveInstancesRequest();
  36. removeInstancesRequest.setScalingGroupId(groupId);
  37. removeInstancesRequest.setInstanceIds(Arrays.asList(instanceId));
  38. RemoveInstancesResponse removeInstancesResponse = client.removeInstances(removeInstancesRequest);
  39. log.info("executeScalingStop-resp:{}",JSONObject.toJSONString(removeInstancesResponse));
  40. if(removeInstancesResponse.getStatusCode() == 200){
  41. return true;
  42. }
  43. }catch (TeaException e){
  44. //实例不存在视作关闭成功
  45. if(e.getStatusCode().equals(400) && e.getMessage().contains("The specified instance does not exist")){
  46. return true;
  47. }
  48. }catch (Exception e){
  49. log.info("delEcs--error:",e);
  50. }
  51. return false;
  52. }
  53. public static boolean createEcs(String accessKey,String secret,String endpoint,String scalingRuleAri){
  54. try {
  55. Client client = initClient(accessKey,secret,endpoint);
  56. return executeScalingActivity(client, scalingRuleAri);
  57. }catch (Exception e){
  58. log.info("createEcs--error:",e);
  59. }
  60. return false;
  61. }
  62. public static Boolean delEcs(String accessKey,String secret,String endpoint,String scalingGroupId,String instanceId){
  63. try {
  64. Client client = initClient(accessKey,secret,endpoint);
  65. return executeScalingStop(client, scalingGroupId,instanceId);
  66. }catch (Exception e){
  67. log.info("delEcs--error:",e);
  68. }
  69. return false;
  70. }
  71. }