本教程详细介绍如何使用 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 --&gt;     <dependency&gt;         <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:ProgramDataaliyunassist$(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" }