111 lines
4.9 KiB
Java
111 lines
4.9 KiB
Java
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<String> 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();
|
||
}
|
||
}
|