lyhzzz 3 mēneši atpakaļ
vecāks
revīzija
7c291f072a

+ 6 - 0
pom.xml

@@ -92,6 +92,12 @@
             <artifactId>jasypt-spring-boot-starter</artifactId>
             <version>3.0.5</version>
         </dependency>
+
+        <dependency>
+            <groupId>software.amazon.awssdk</groupId>
+            <artifactId>autoscaling</artifactId>
+            <version>2.20.0</version> <!-- Use latest version -->
+        </dependency>
     </dependencies>
 
 

+ 4 - 0
src/main/java/com/fdkankan/mqcontroller/entity/MqScalingConfig.java

@@ -61,4 +61,8 @@ public class MqScalingConfig implements Serializable {
 
     @TableField("type")
     private String type;
+
+
+    @TableField("service_type")
+    private String serviceType;
 }

+ 11 - 0
src/main/java/com/fdkankan/mqcontroller/task/TaskService.java

@@ -6,6 +6,7 @@ import cn.hutool.log.Log;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.mqcontroller.entity.*;
 import com.fdkankan.mqcontroller.service.*;
+import com.fdkankan.mqcontroller.utils.AwsEcsUtils;
 import com.fdkankan.mqcontroller.utils.ECSUtils;
 import com.fdkankan.mqcontroller.utils.RabbitMqUtils;
 import com.fdkankan.mqcontroller.utils.RedisKey;
@@ -377,6 +378,10 @@ public class TaskService {
 
     public synchronized Boolean createEcs(MqScalingConfig mqScaling){
         try {
+            if("aws".equals(mqScaling.getServiceType())){
+                List<MqEcs> scalingNotStopList = mqEcsService.getScalingNotStopList();
+                return  AwsEcsUtils.setCapacity(mqScaling.getScalingGroupId(), mqScaling.getAccessKey(), mqScaling.getSecret(),scalingNotStopList.size() + 1);
+            }
             return ECSUtils.createEcs(mqScaling.getAccessKey(),mqScaling.getSecret(),mqScaling.getEndpoint(),mqScaling.getScalingRuleAri());
         }catch (Exception e){
             log.info("触发弹性伸缩失败:",e);
@@ -387,6 +392,12 @@ public class TaskService {
 
     public synchronized Boolean delEcs(MqScalingConfig mqScaling, String instanceId){
         try {
+            if("aws".equals(mqScaling.getServiceType())){
+                List<MqEcs> scalingNotStopList = mqEcsService.getScalingNotStopList();
+                AwsEcsUtils.stopEcs( mqScaling.getAccessKey(), mqScaling.getSecret(),instanceId);
+                AwsEcsUtils.setCapacity(mqScaling.getScalingGroupId(), mqScaling.getAccessKey(), mqScaling.getSecret(),scalingNotStopList.size() -1);
+                return  true;
+            }
             return ECSUtils.delEcs(mqScaling.getAccessKey(),mqScaling.getSecret(),mqScaling.getEndpoint(),mqScaling.getScalingGroupId(),instanceId);
         }catch (Exception e){
             log.info("关闭弹性伸缩失败:",e);

+ 91 - 0
src/main/java/com/fdkankan/mqcontroller/utils/AwsEcsUtils.java

@@ -0,0 +1,91 @@
+package com.fdkankan.mqcontroller.utils;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.ess20220222.Client;
+import com.aliyun.ess20220222.models.ExecuteScalingRuleRequest;
+import com.aliyun.ess20220222.models.ExecuteScalingRuleResponse;
+import com.aliyun.ess20220222.models.RemoveInstancesRequest;
+import com.aliyun.ess20220222.models.RemoveInstancesResponse;
+import com.aliyun.tea.TeaException;
+import com.aliyun.teaopenapi.models.Config;
+import lombok.extern.slf4j.Slf4j;
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.http.SdkHttpResponse;
+import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.autoscaling.AutoScalingClient;
+import software.amazon.awssdk.services.autoscaling.model.*;
+
+import java.util.Arrays;
+import java.util.UUID;
+
+
+@Slf4j
+public class AwsEcsUtils {
+
+
+
+    public static Boolean setCapacity(String autoScalingGroupName,String accesskey,String secretkey,Integer desiredCapacity) {
+
+        AwsBasicCredentials awsCreds = AwsBasicCredentials.create(accesskey, secretkey);
+
+        AutoScalingClient autoScalingClient = AutoScalingClient.builder()
+                .region(Region.EU_CENTRAL_1)
+                .credentialsProvider(StaticCredentialsProvider.create(awsCreds))
+                .build();
+        autoScalingClient.describeAutoScalingGroups();
+        try {
+            SetDesiredCapacityRequest request = SetDesiredCapacityRequest.builder()
+                    .autoScalingGroupName(autoScalingGroupName)
+                    .desiredCapacity(desiredCapacity)
+                    .build();
+
+            SetDesiredCapacityResponse setDesiredCapacityResponse = autoScalingClient.setDesiredCapacity(request);
+            SdkHttpResponse sdkHttpResponse = setDesiredCapacityResponse.sdkHttpResponse();
+            //log.info("resp:{}",sdkHttpResponse);
+            return sdkHttpResponse.isSuccessful();
+        } catch (AutoScalingException e) {
+            log.info(e.awsErrorDetails().errorMessage());
+            return false;
+        } finally {
+            autoScalingClient.close();
+        }
+    }
+
+
+    public static Boolean  stopEcs(String accesskey,String secretkey,String instanceId){
+        boolean shouldDecrementDesiredCapacity = false;
+        AwsBasicCredentials awsCreds = AwsBasicCredentials.create(accesskey, secretkey);
+        AutoScalingClient autoScalingClient = AutoScalingClient.builder()
+                .region(Region.EU_CENTRAL_1)
+                .credentialsProvider(StaticCredentialsProvider.create(awsCreds))
+                .build();
+
+        try {
+            TerminateInstanceInAutoScalingGroupRequest request = TerminateInstanceInAutoScalingGroupRequest.builder()
+                    .instanceId(instanceId)
+                    .shouldDecrementDesiredCapacity(shouldDecrementDesiredCapacity)
+                    .build();
+
+            TerminateInstanceInAutoScalingGroupResponse terminateInstanceInAutoScalingGroupResponse = autoScalingClient.terminateInstanceInAutoScalingGroup(request);
+            log.info("resp:{}",terminateInstanceInAutoScalingGroupResponse);
+        } catch (AutoScalingException e) {
+            log.info(e.awsErrorDetails().errorMessage());
+            return false;
+        } finally {
+            autoScalingClient.close();
+        }
+        return true;
+    }
+
+    public static void main(String[] args) {
+        String APPKEY = "AKIAWCV5QFZ3WTRVTJW7";
+        String APPSECRET = "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";
+        String AUTOSCALINGGROUPNAME = "test";
+
+        //stopEcs(APPKEY,APPSECRET,"i-01849da64bd3919d6");
+        System.out.println( setCapacity(AUTOSCALINGGROUPNAME,APPKEY,APPSECRET,0));
+    }
+
+}