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 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 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 list = generateInstance(); log.info("创建实例成功"); log.info("正在加载实例"); Thread.sleep(30000); List 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)); } }