Commit acd05077 authored by chenchao.deng's avatar chenchao.deng

对接阿里云Ecs Api

parent 9eca9001
...@@ -29,18 +29,13 @@ import com.edgec.browserbackend.common.commons.utils.NotifyUtils; ...@@ -29,18 +29,13 @@ import com.edgec.browserbackend.common.commons.utils.NotifyUtils;
import com.edgec.browserbackend.common.enums.RegionMappingEnum; import com.edgec.browserbackend.common.enums.RegionMappingEnum;
import com.edgec.browserbackend.common.utils.ThreadPoolUtils; import com.edgec.browserbackend.common.utils.ThreadPoolUtils;
import com.edgec.browserbackend.common.utils.Trans; import com.edgec.browserbackend.common.utils.Trans;
import javax.management.ObjectName;
import okhttp3.*; import okhttp3.*;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.DataValidationEvaluator.ValidationEnum;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.cloud.CloudPlatform;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -137,7 +132,7 @@ public class BrowserTask { ...@@ -137,7 +132,7 @@ public class BrowserTask {
log.info("{}, ip resource purchase : {}", logs, ipResource.getId()); log.info("{}, ip resource purchase : {}", logs, ipResource.getId());
try { try {
RegionMappingEnum byRegion = RegionMappingEnum.getByRegion(ipResource.getRegionCn()); RegionMappingEnum byRegion = RegionMappingEnum.getByRegion(ipResource.getRegion());
if(Objects.isNull(byRegion)){ if(Objects.isNull(byRegion)){
log.error("buyIpNewTasks-购买ip error:查询不到地区映射-region:{}",ipResource.getRegion()); log.error("buyIpNewTasks-购买ip error:查询不到地区映射-region:{}",ipResource.getRegion());
return; return;
...@@ -150,29 +145,21 @@ public class BrowserTask { ...@@ -150,29 +145,21 @@ public class BrowserTask {
boolean result = false; boolean result = false;
if(ipResource.getVendorCn().equals("阿里云")){ if(ipResource.getVendorCn().equals("阿里云")){
//获取阿里云服务器region映射 //获取阿里云服务器region映射
String aliResion = null; String aliRegion = RegionMappingEnum.getAliRegion(ipResource.getRegion());
if(ipResource.getRegion().equals("us")){
RegionMappingEnum regionMappingEnum = RegionMappingEnum.getUsRandom(); if(StringUtils.isEmpty(aliRegion)){
aliResion = regionMappingEnum.getAliRegionApi();
}else if(ipResource.getRegion().equals("mainland")){
RegionMappingEnum regionMappingEnum = RegionMappingEnum.getCnRandom();
aliResion = regionMappingEnum.getAliRegionApi();
}else {
aliResion = byRegion.getAliRegionApi();
}
if(StringUtils.isEmpty(aliResion)){
log.error("buyIpNewTasks-购买ip error:查询不到阿里云映射api-region:{}",ipResource.getRegion()); log.error("buyIpNewTasks-购买ip error:查询不到阿里云映射api-region:{}",ipResource.getRegion());
return; return;
} }
RunInstancesResponse response = AliEcsClient.runInstances( RunInstancesResponse response = AliEcsClient.runInstances(
ipResource.getOwner(), ipResource.getUsername(),ipResource.getPassword(), aliResion); ipResource.getOwner(), ipResource.getUsername(),ipResource.getPassword(), aliRegion);
if (null ==response || !response.getStatusCode().equals(200)) { if (null ==response || !response.getStatusCode().equals(200)) {
log.error("{}, fail to buy ip : {}", logs, JSON.toJSON(response.getBody())); log.error("{}, fail to buy ip : {}", logs, JSON.toJSON(response.getBody()));
}else if(Objects.nonNull(response.getBody())){ }else if(Objects.nonNull(response.getBody())){
String instanceId = response.getBody().getInstanceIdSets().getInstanceIdSet().get(0); String instanceId = response.getBody().getInstanceIdSets().getInstanceIdSet().get(0);
cloudPlatformOrder.setPlatformOrderId(instanceId); cloudPlatformOrder.setPlatformOrderId(instanceId);
cloudPlatformOrder.setPlatformType("aliyun"); cloudPlatformOrder.setPlatformType("aliyun");
cloudPlatformOrder.setRegionId(aliResion); cloudPlatformOrder.setRegionId(aliRegion);
ipResource.setStatus(3); ipResource.setStatus(3);
ipResourceRepository.save(ipResource); ipResourceRepository.save(ipResource);
cloudPlatformOrderRepository.save(cloudPlatformOrder); cloudPlatformOrderRepository.save(cloudPlatformOrder);
...@@ -544,8 +531,9 @@ public class BrowserTask { ...@@ -544,8 +531,9 @@ public class BrowserTask {
CloudPlatformOrder cloudPlatformOrder = list.get(0); CloudPlatformOrder cloudPlatformOrder = list.get(0);
Boolean isDelet = false; Boolean isDelet = false;
if("aliyun".equals(cloudPlatformOrder.getPlatformType())){ if("aliyun".equals(cloudPlatformOrder.getPlatformType())){
String aliRegion = RegionMappingEnum.getAliRegion(ipResource.getRegion());
DeleteInstanceResponse response = AliEcsClient.deleteInstance( DeleteInstanceResponse response = AliEcsClient.deleteInstance(
ipResource.getOwner(), cloudPlatformOrder.getPlatformOrderId()); ipResource.getOwner(), cloudPlatformOrder.getPlatformOrderId(), aliRegion);
if(null != response && response.getStatusCode().equals(200)) { if(null != response && response.getStatusCode().equals(200)) {
isDelet = true; isDelet = true;
} }
......
...@@ -20,7 +20,8 @@ import lombok.extern.slf4j.Slf4j; ...@@ -20,7 +20,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
* @Description 阿里云ECS相关api url:https://next.api.aliyun.com/document/Ecs/2014-05-26/overview * @Description 阿里云ECS相关api \
* url:https://next.api.aliyun.com/document/Ecs/2014-05-26/overview
* @Data 2024年7月28日 * @Data 2024年7月28日
**/ **/
...@@ -61,17 +62,18 @@ public class AliEcsClient { ...@@ -61,17 +62,18 @@ public class AliEcsClient {
* @Description //创建链接 * @Description //创建链接
* @Date 2024/7/25 10:32 * @Date 2024/7/25 10:32
**/ **/
private static AsyncClient createClient() { private static AsyncClient createClient(String regionId) {
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder() StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
.accessKeyId(getAccessKeyId()) .accessKeyId(getAccessKeyId())
.accessKeySecret(getAccessKeySecret()) .accessKeySecret(getAccessKeySecret())
.build()); .build());
String endpoint = String.format("ecs.%s.aliyuncs.com", regionId);
return AsyncClient.builder() return AsyncClient.builder()
.region("cn-shenzhen") .region(regionId)
.credentialsProvider(provider) .credentialsProvider(provider)
.overrideConfiguration( .overrideConfiguration(
ClientOverrideConfiguration.create() ClientOverrideConfiguration.create()
.setEndpointOverride("ecs.cn-shenzhen.aliyuncs.com") .setEndpointOverride(endpoint)
) )
.build(); .build();
} }
...@@ -80,7 +82,7 @@ public class AliEcsClient { ...@@ -80,7 +82,7 @@ public class AliEcsClient {
* 创建并运行实例 * 创建并运行实例
*/ */
public static RunInstancesResponse runInstances(String owner,String username, String password, String regionId) { public static RunInstancesResponse runInstances(String owner,String username, String password, String regionId) {
AsyncClient client = createClient(); AsyncClient client = createClient(regionId);
RunInstancesResponse runInstancesResponse = null; RunInstancesResponse runInstancesResponse = null;
String userData = String.format(getUserData(), username, password, username); String userData = String.format(getUserData(), username, password, username);
...@@ -89,7 +91,7 @@ public class AliEcsClient { ...@@ -89,7 +91,7 @@ public class AliEcsClient {
.regionId(regionId) .regionId(regionId)
.launchTemplateId("lt-wz9g4apcsdali7t0lec8") .launchTemplateId("lt-wz9g4apcsdali7t0lec8")
.userData(Aes.base64Encode(userData.getBytes())) .userData(Aes.base64Encode(userData.getBytes()))
.keyPairName("proxy-ip") //.keyPairName("proxy-ip")
.build(); .build();
log.info("调用aliEcs创建并运行实例,入参:owner:{},regionId:{}", owner, regionId); log.info("调用aliEcs创建并运行实例,入参:owner:{},regionId:{}", owner, regionId);
CompletableFuture<RunInstancesResponse> response = client.runInstances( CompletableFuture<RunInstancesResponse> response = client.runInstances(
...@@ -112,7 +114,7 @@ public class AliEcsClient { ...@@ -112,7 +114,7 @@ public class AliEcsClient {
RenewInstanceRequest renewInstanceRequest = RenewInstanceRequest.builder() RenewInstanceRequest renewInstanceRequest = RenewInstanceRequest.builder()
//TODO待确定传参 //TODO待确定传参
.build(); .build();
AsyncClient client = createClient(); AsyncClient client = createClient(regionId);
CompletableFuture<RenewInstanceResponse> response = client.renewInstance( CompletableFuture<RenewInstanceResponse> response = client.renewInstance(
renewInstanceRequest); renewInstanceRequest);
client.close(); client.close();
...@@ -124,7 +126,7 @@ public class AliEcsClient { ...@@ -124,7 +126,7 @@ public class AliEcsClient {
*/ */
public static DescribeInstancesResponse getDescribeInstances(String owner, String instanceId, public static DescribeInstancesResponse getDescribeInstances(String owner, String instanceId,
String regionId) { String regionId) {
AsyncClient client = createClient(); AsyncClient client = createClient(regionId);
DescribeInstancesResponse resp = null; DescribeInstancesResponse resp = null;
try { try {
String instanceIds = String.format("[\"%s\"]", instanceId); String instanceIds = String.format("[\"%s\"]", instanceId);
...@@ -152,16 +154,16 @@ public class AliEcsClient { ...@@ -152,16 +154,16 @@ public class AliEcsClient {
/** /**
* 删除ECS * 删除ECS
*/ */
public static DeleteInstanceResponse deleteInstance(String owner, String instanceId) { public static DeleteInstanceResponse deleteInstance(String owner, String instanceId, String regionId) {
AsyncClient client = createClient(); AsyncClient client = createClient(regionId);
DeleteInstanceResponse resp = null; DeleteInstanceResponse resp = null;
try { try {
DeleteInstanceRequest deleteInstanceRequest = DeleteInstanceRequest.builder() DeleteInstanceRequest deleteInstanceRequest = DeleteInstanceRequest.builder()
.instanceId(instanceId) .instanceId(instanceId)
.force(true) .force(true)
.build(); .build();
log.info("调用aliEcs删除ECS实例,入参:owner:{},instanceId:{}", log.info("调用aliEcs删除ECS实例,入参:owner:{},instanceId:{},regionId{}",
owner, instanceId); owner, instanceId, regionId);
CompletableFuture<DeleteInstanceResponse> response = client.deleteInstance( CompletableFuture<DeleteInstanceResponse> response = client.deleteInstance(
deleteInstanceRequest); deleteInstanceRequest);
resp = response.get(); resp = response.get();
......
...@@ -50,9 +50,9 @@ public enum RegionMappingEnum { ...@@ -50,9 +50,9 @@ public enum RegionMappingEnum {
private final String aliRegionApi;//阿里云地区api private final String aliRegionApi;//阿里云地区api
public static RegionMappingEnum getByRegion(String type) { public static RegionMappingEnum getByRegion(String type) {
return Arrays.stream(RegionMappingEnum.values()) return Arrays.stream(RegionMappingEnum.values())
.filter(item -> Objects.equals(item.getRegionCn(), type)) .filter(item -> Objects.equals(item.getRegion(), type))
.findFirst().orElse(null); .findFirst().orElse(null);
} }
...@@ -75,4 +75,27 @@ public enum RegionMappingEnum { ...@@ -75,4 +75,27 @@ public enum RegionMappingEnum {
return US_VIRGINIA.US_VIRGINIA; return US_VIRGINIA.US_VIRGINIA;
} }
} }
/**
* @author Chen
* @description 获取阿里云映射 region
* @date 2024/7/30 21:40
*/
public static String getAliRegion(String region) {
String aliResion = "";
RegionMappingEnum byRegion = getByRegion(region);
if(Objects.isNull(byRegion)){
return aliResion;
}
if(region.equals("us")){
RegionMappingEnum regionMappingEnum = getUsRandom();
aliResion = regionMappingEnum.getAliRegionApi();
}else if(region.equals("mainland")){
RegionMappingEnum regionMappingEnum = RegionMappingEnum.getCnRandom();
aliResion = regionMappingEnum.getAliRegionApi();
}else {
aliResion = byRegion.getAliRegionApi();
}
return aliResion;
}
} }
...@@ -3,6 +3,7 @@ package com.edgec.browserbackend; ...@@ -3,6 +3,7 @@ package com.edgec.browserbackend;
import com.aliyun.sdk.service.ecs20140526.models.DeleteInstanceResponse; import com.aliyun.sdk.service.ecs20140526.models.DeleteInstanceResponse;
import com.edgec.browserbackend.account.domain.UserBalance; import com.edgec.browserbackend.account.domain.UserBalance;
import com.edgec.browserbackend.account.repository.UserBalanceRepository; import com.edgec.browserbackend.account.repository.UserBalanceRepository;
import com.edgec.browserbackend.browser.task.BrowserTask;
import com.edgec.browserbackend.common.client.AliEcsClient; import com.edgec.browserbackend.common.client.AliEcsClient;
import com.edgec.browserbackend.common.utils.Aes; import com.edgec.browserbackend.common.utils.Aes;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -15,6 +16,9 @@ class BrowserBackendApplicationTests { ...@@ -15,6 +16,9 @@ class BrowserBackendApplicationTests {
@Resource @Resource
private UserBalanceRepository userBalanceRepository; private UserBalanceRepository userBalanceRepository;
@Resource
private BrowserTask browserTask;
@Test @Test
void contextLoads() { void contextLoads() {
UserBalance userBalance = new UserBalance(); UserBalance userBalance = new UserBalance();
...@@ -26,9 +30,11 @@ class BrowserBackendApplicationTests { ...@@ -26,9 +30,11 @@ class BrowserBackendApplicationTests {
@Test @Test
void buyEcsTest() throws Exception { void buyEcsTest() throws Exception {
//browserTask.buyIpNewTasks();
//AliEcsClient.runInstances("11","cn-shenzhen","2222"); //AliEcsClient.runInstances("11","cn-shenzhen","2222");
//AliEcsClient.getDescribeInstances("测试","i-wz9hf0i13xj6h904k14p","cn-shenzhen"); //AliEcsClient.getDescribeInstances("测试","i-wz9hf0i13xj6h904k14p","cn-shenzhen");
//DeleteInstanceResponse response = AliEcsClient.deleteInstance("测试", "i-wz9ebrei1dvowzej6nfn"); DeleteInstanceResponse response = AliEcsClient.deleteInstance("测试", "i-wz91k777e49z85nt5xl3","cn-shenzhen");
} }
@Test @Test
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment