package com.muyu.vehicle; import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.DeleteInstancesRequest; import com.aliyun.ecs20140526.models.DescribeInstancesRequest; import com.aliyun.ecs20140526.models.DescribeInstancesResponse; import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody; import com.aliyun.tea.TeaException; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.Common; import com.aliyun.teautil.models.RuntimeOptions; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.DisposableBean; import org.springframework.stereotype.Component; import java.util.ArrayList; @Component @Log4j2 public class CloseInstance implements DisposableBean { /** * ACCESS_KEY_ID */ public static final String ALIBABA_CLOUD_ACCESS_KEY_ID="LTAI5tGabdxedjfCh2uXHNrw"; /** *ACCESS_KEY_SECRET */ public static final String ACCESS_KEY_SECRET="NHb7wHVpesLW6Axc0bFBs6ThhuNR10"; public static Client createClient() throws Exception { // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。 Config config = new Config() // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 .setAccessKeyId(ALIBABA_CLOUD_ACCESS_KEY_ID) // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 .setAccessKeySecret(ACCESS_KEY_SECRET); // Endpoint 请参考 https://api.aliyun.com/product/Ecs config.endpoint = "ecs.cn-shanghai.aliyuncs.com"; return new Client(config); } public static void delInstance() throws Exception { // 创建ECS客户端对象,用于后续调用ECS相关API Client client = CloseInstance.createClient(); DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest() .setRegionId("cn-shanghai"); //创建运行时选择对象,用于配置运行时的选项参数 RuntimeOptions runtimeOptions = new RuntimeOptions(); //获取实例列表 DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(describeInstancesRequest, runtimeOptions); //提取实例ID集合 ArrayList list = new ArrayList<>(); DescribeInstancesResponseBody body = describeInstancesResponse.getBody(); for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()) { if (!instance.getInstanceId().equals("i-uf68jwsbbqq4b4xc893s")){ list.add(instance.getInstanceId()); } } log.info("搜索到实例Instance IDs: " + list); // 创建删除实例请求对象,并设置请求参数 DeleteInstancesRequest deleteInstancesRequest = new DeleteInstancesRequest() // 设置地域ID,指定删除实例的地域 .setRegionId("cn-shanghai") // 设置DryRun为true,用于验证请求是否可以成功,但不实际执行删除操作 .setDryRun(false) // 设置Force为true,表示即使实例有正在运行的任务,也强制删除实例 .setForce(true) // 设置TerminateSubscription为true,表示删除按订阅付费的实例时终止订阅 .setTerminateSubscription(true) .setInstanceId(list); // 创建运行时选项对象,用于配置运行时的选项参数 RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 client.deleteInstancesWithOptions(deleteInstancesRequest, runtime); } 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 System.out.println(error.getMessage()); // 诊断地址 log.info(error.getData().get("Recommend")); Common.assertAsString(error.message); } } @Override public void destroy() throws Exception { log.info("开始删除实例"); delInstance(); } }