本教程详细介绍如何使用 Alibaba Cloud SDK for Java 创建并执行云助手命令。
前提条件
在使用本教程之前,请确保已完成以下操作:
- 使用Alibaba Cloud SDK for Java,您需要一个阿里云账号和访问密钥(AccessKey)。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey。
- 确保您已经安装了Alibaba Cloud SDK for Java,准确的SDK版本号,请参见 阿里云开发工具包(SDK)。
<dependencies> <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.4.3</version> </dependency> <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-ecs--> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-ecs</artifactId> <version>4.17.4</version> </dependency> </dependencies>
代码示例
本文操作示例主要以代码形式体现,具体代码如下:
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.ecs.model.v20140526.CreateCommandRequest;
import com.aliyuncs.ecs.model.v20140526.CreateCommandResponse;
import com.aliyuncs.ecs.model.v20140526.InvokeCommandRequest;
import com.aliyuncs.ecs.model.v20140526.InvokeCommandResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
/**
* CreateCommand 新建一条云助手命令
* InvokeCommand 为一台或多台ECS实例触发一条云助手命令
*/
public class InvokeCommand {
private static String command = "cd /usr/local&&pwd";
// 实例ID集合 需要您按照实际情况来进行定义或传入
// private static List<String> instanceIds = new ArrayList<String>();
public static void main(String[] args) throws UnsupportedEncodingException {
IAcsClient client = Initialization();
// 对需要新建的云助手命令进行base64编码
String CommandContent = Base64CommandContent(command);
// 新建一条云助手命令
String commandId = CreateCommand(client, CommandContent);
// 为一台或多台ECS实例触发一条云助手命令
TestInvokeCommand(client, commandId);
}
/**
* InvokeCommand 为一台或多台ECS实例触发一条云助手命令
*/
private static void TestInvokeCommand(IAcsClient client, String commandId) {
InvokeCommandRequest request = new InvokeCommandRequest();
request.setCommandId(commandId);
// 实例ID集合
List<String> instanceIds = new ArrayList<>();
instanceIds.add("i-bp1cu83ktXXXXXXX");
request.setInstanceIds(instanceIds);
request.setTimed(false);
try {
InvokeCommandResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* CreateCommand 新建一条云助手命令
*/
private static String CreateCommand(IAcsClient client, String CommandContent) {
CreateCommandRequest request = new CreateCommandRequest();
// 命令名称,支持全字符集。长度不得超过128个字符
request.setName("test");
// 创建的命令是否使用自定义参数。默认值:false
request.setEnableParameter(true);
// 命令的类型。取值范围:
// RunBatScript:创建一个在Windows实例中运行的 Bat 脚本
// RunPowerShellScript:创建一个在Windows实例中运行的PowerShell脚本
// RunShellScript:创建一个在Linux实例中运行的Shell脚本
request.setType("RunShellScript");
// 命令描述,支持全字符集。长度不得超过512个字符
request.setDescription("Test1");
// 您创建的命令在ECS实例中执行时最大的超时时间,单位为秒。当因为某种原因无法运行您创建的命令时,会出现超时现象。超时后,会强制终止命令进程,即取消命令的PID。
// 默认值:3600
request.setTimeout(3600L);
// 您创建的命令在ECS实例中运行的目录。默认值:
// 对于Linux实例,默认在管理员root用户的home目录下,具体为/root目录
// 对于Windows实例,默认在云助手客户端进程所在目录,例如,C:\ProgramData\aliyun\assist\$(version)
request.setWorkingDir("/home/");
// 命令Base64编码后的内容。
// 该参数的值必须使用Base64编码后传输,且脚本内容的大小在Base64编码之后不能超过16KB
// 命令内容支持使用自定义参数形式,具体通过指定参数EnableParameter=true启用自定义参数功能:
// 自定义参数用{{}}包含的方式定义,在{{}}内参数名前后的空格以及换行符会被忽略
// 自定义参数个数不能超过20个
// 自定义参数名允许a-zA-Z0-9-_的组合,不支持其余字符,参数名不区分大小写
// 单个参数名不能超过64字节
request.setCommandContent(CommandContent);
try {
CreateCommandResponse response = client.getAcsResponse(request);
System.out.println("--------------------新建云助手命令--------------------");
System.out.println(new Gson().toJson(response));
return response.getCommandId();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
throw new RuntimeException();
}
}
/**
* Initialization 初始化公共请求参数
*/
private static IAcsClient Initialization() {
// 初始化请求参数
DefaultProfile profile = DefaultProfile.getProfile(
"<your-region-id>", // 您的可用区ID
"<your-access-key-id>", // 您的AccessKey ID
"<your-access-key-secret>"); // 您的AccessKey Secret
return new DefaultAcsClient(profile);
}
/**
* base64 编码
*/
private static String Base64CommandContent(String command) throws UnsupportedEncodingException {
byte[] strByte = command.getBytes("UTF-8");
// 编码
return Base64.getEncoder().encodeToString(strByte);
// 解码
// return new String(Base64.getDecoder().decode(strByte), "UTF-8");
}
}
执行结果
正确的返回结果类似如下:
--------------------新建云助手命令--------------------
{
"requestId": "027AA594-D878-41A2-A94B-CB26634490D9",
"commandId": "c-dd5e470aa3e44XXXXXXXX"
}
--------------------触发云助手命令--------------------
{
"requestId": "CDCC2045-F951-4A7F-923C-E045044CC443",
"invokeId": "t-27f4fdbdeb7XXXXXXXX"
}
在文档使用中是否遇到以下问题
更多建议
匿名提交