135 lines
4.9 KiB
Java
135 lines
4.9 KiB
Java
package com.muyu.vehicle;
|
||
|
||
import com.alibaba.fastjson.JSONObject;
|
||
import com.aliyun.ecs20140526.Client;
|
||
import com.aliyun.ecs20140526.models.*;
|
||
import com.aliyun.tea.TeaException;
|
||
import com.aliyun.teautil.Common;
|
||
import com.aliyun.teautil.models.RuntimeOptions;
|
||
import com.muyu.common.redis.service.RedisService;
|
||
import com.muyu.vehicle.config.SelectInstance;
|
||
import com.muyu.vehicle.domain.InstanceInfo;
|
||
import com.muyu.vehicle.utils.CreateClient;
|
||
import lombok.extern.log4j.Log4j2;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.boot.ApplicationArguments;
|
||
import org.springframework.boot.ApplicationRunner;
|
||
import org.springframework.stereotype.Component;
|
||
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
|
||
|
||
|
||
@Component
|
||
@Log4j2
|
||
/**
|
||
* 项目启动创建实例
|
||
*/
|
||
public class ManageInstance implements ApplicationRunner {
|
||
@Autowired
|
||
private RedisService redisService;
|
||
|
||
/**
|
||
* 镜像ID
|
||
*/
|
||
public static final String IMAGE_ID = "m-uf6ffgkry85fwu4znr6s";
|
||
|
||
/**
|
||
* 实例类型
|
||
*/
|
||
public static final String INSTANCE_TYPE = "ecs.e-c1m1.large";
|
||
|
||
/**
|
||
* 安全组ID
|
||
*/
|
||
public static final String SECURITY_GROUP_ID = "sg-uf6glo8c4k17szhxu7sk";
|
||
|
||
/**
|
||
*交换机ID
|
||
*/
|
||
public static final String V_SWITCH_ID = "vsw-uf6xy4rbt9ggcz93t6oib";
|
||
|
||
|
||
/**
|
||
* 实例付费类型
|
||
*/
|
||
public static final String INSTANCE_CHARGE_TY = "PostPaid";
|
||
|
||
public static List<String> generateInstance() throws Exception {
|
||
// 创建阿里云ECS客户端
|
||
// 创建ECS客户端对象,用于后续调用ECS相关API
|
||
Client client = CreateClient.createClient();
|
||
// 配置系统盘参数
|
||
RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk =
|
||
new RunInstancesRequest.RunInstancesRequestSystemDisk()
|
||
.setSize("40")
|
||
.setCategory("cloud_essd");
|
||
|
||
// 创建创建实例请求对象并设置参数
|
||
|
||
RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
|
||
.setRegionId("cn-shanghai") // 设置地域ID
|
||
.setImageId(IMAGE_ID) // 设置镜像ID
|
||
.setInstanceType(INSTANCE_TYPE) // 设置实例类型
|
||
.setSecurityGroupId(SECURITY_GROUP_ID) // 设置安全组ID
|
||
.setVSwitchId(V_SWITCH_ID) // 设置虚拟交换机ID
|
||
.setInstanceName("cloud-MQTT") // 设置实例名称
|
||
.setInstanceChargeType(INSTANCE_CHARGE_TY) // 设置实例付费类型为后付费按量付费
|
||
.setSystemDisk(systemDisk) // 设置系统盘配置
|
||
.setHostName("root") // 设置主机名
|
||
.setPassword("2112A-four") // 设置实例密码
|
||
.setAmount(2) // 设置创建实例的数量
|
||
.setInternetChargeType("PayByTraffic")
|
||
.setInternetMaxBandwidthOut(1);
|
||
|
||
|
||
//创建运行时选择对象
|
||
RuntimeOptions runTime =
|
||
new RuntimeOptions();
|
||
// 尝试执行创建实例请求
|
||
try {
|
||
ArrayList<String> list = new ArrayList<>();
|
||
// 复制代码运行请自行打印 API 的返回值
|
||
RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runTime);
|
||
RunInstancesResponseBody body = runInstancesResponse.getBody();
|
||
for (String instance : body.getInstanceIdSets().getInstanceIdSet()) {
|
||
list.add(instance);
|
||
}
|
||
log.info("ESC创建成功,实例ID为:" + list);
|
||
return list;
|
||
} catch (TeaException error) {
|
||
// 错误 message
|
||
log.info(error.getMessage());
|
||
// 诊断地址
|
||
log.info(error.getData().get("Recommend"));
|
||
Common.assertAsString(error.message);
|
||
} catch (Exception _error) {
|
||
TeaException error = new TeaException(_error.getMessage(), _error);
|
||
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
|
||
// 错误 message
|
||
log.info("实例创建失败:" + error.getMessage());
|
||
}
|
||
return null;
|
||
}
|
||
|
||
|
||
|
||
@Override
|
||
public void run(ApplicationArguments args) throws Exception {
|
||
List<String> list = generateInstance();
|
||
log.info("创建实例成功");
|
||
log.info("正在加载实例");
|
||
Thread.sleep(30000);
|
||
List<InstanceInfo> instanceInfos = SelectInstance.selectInstance(list);
|
||
log.info("实例信息查询成功");
|
||
for (InstanceInfo instanceInfo : instanceInfos) {
|
||
redisService.setCacheObject("FourInstanceIdKey:"+instanceInfo.getInstanceId(),instanceInfo);
|
||
}
|
||
System.out.println("实例信息:"+instanceInfos);
|
||
log.info("实例信息:", JSONObject.toJSONString(instanceInfos));
|
||
}
|
||
}
|
||
|
||
|