通过云助手向实例发送小文件

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
对象存储 OSS,20GB 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 背景 下发文件是运维实例过程中最常见的动作之一,在一项对自动化运维工具的使用场景调研中,文件下发按照频繁程度排在前三位。 当前向ECS下发文件主要有以下几种方式: 上传至OSS,再下载到实例中; 通过远程文件拷贝命令scp向实例拷贝文件; 通过第三方软件下发文件。 OSS方式是常见的下发文件方式,但操作稍显繁琐,需要用户开通OSS,产生额外的费用; scp方式只能在通公网的机

背景

下发文件是运维实例过程中最常见的动作之一,在一项对自动化运维工具的使用场景调研中,文件下发按照频繁程度排在前三位。

当前向ECS下发文件主要有以下几种方式:

  • 上传至OSS,再下载到实例中;
  • 通过远程文件拷贝命令scp向实例拷贝文件;
  • 通过第三方软件下发文件。

OSS方式是常见的下发文件方式,但操作稍显繁琐,需要用户开通OSS,产生额外的费用;

scp方式只能在通公网的机器上使用,需要登录,还可能需要跳板机,局限性较大,且难以进行文件的批量下发,自动化程度低;

通过第三方软件下发需要用户自行进行安装和管理,上手难度较高,且第三方软件的安全性不能得到保证。

对于小文件下发的场景,如配置文件、脚本等,云助手提供了一种新的方式。在控制台上,从ECS实例详情页通过下发远程文件功能下发。通过SendFile OpenAPI,可以批量向实例下发文件,更可以通过OOS进行编排,提高运维的自动化程度。当前通过云助手下发的文件大小不能超过32K,对于一般的脚本、配置文件,32K基本满足要求。而对于大文件的下发,仍需借助OSS。

功能介绍

通过远程连接操作ECS实例时,您是否苦于无法方便的传输文件?

在对一批实例进行运维时,您是否还在一台台的拷贝文件?

通过云助手的下发文件功能,这些场景都可以更加便捷!

基于云助手SendFile、DescribeSendFileResults API的组合,可以通过ECS控制台或OpenAPI向实例中指定路径批量下发文件,文件大小在Base64编码后不能超过32KB。如果指定的路径不存在,会自动创建路径。对于Linux实例,可以指定文件的Owner,Group,Mode等参数。

控制台使用

通过ECS管理控制台有两种方式下发文件,一种是在实例详情页向指定实例发送文件,另一种是从云助手控制台批量的发送文件。

从实例详情页发送文件

  1. 进入ECS实例详情页面,进入左侧本实例远程命令

  1. 将待下发的文件通过点击或拖拽的方式上传,或选择粘贴文档内容,下发文本文件。

  1. 点击下发按钮开始下发文件。

从云助手控制台下发文件

云助手控制台发送文件窗口,将待下发的文件通过点击或拖拽的方式上传,或选择粘贴文档内容,进行配置并点击执行进行文件下发。云助手控制台可以批量的向实例下发文件。

相关API

应用举例

通过OpenAPI从本地读取并下发文件到实例

通过SendFile API可以将文件从本地批量发送至实例的目标路径下,实例代码如下:

DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
IAcsClient client = new DefaultAcsClient(profile);

SendFileRequest request = new SendFileRequest();
request.setRegionId("cn-hangzhou");
request.setName("test.sh");
request.setTargetDir("/root");

List<String> instanceIdList = new ArrayList<String>();
instanceIdList.add("i-xxxxxx");
request.setInstanceIds(instanceIdList);

//filePath为本地文件路径,以Base64方式读入
byte[] bytes = Files.readAllBytes(Paths.get(filePath));
request.setContent(Base64.getEncoder().encodeToString(bytes));
request.setContentType("Base64");

try {
    SendFileResponse response = client.getAcsResponse(request);
    System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
    e.printStackTrace();
} catch (ClientException e) {
    System.out.println("ErrCode:" + e.getErrCode());
    System.out.println("ErrMsg:" + e.getErrMsg());
    System.out.println("RequestId:" + e.getRequestId());
}

根据SendFile返回的InvokeId字段,可以通过DescribeSendFileResults查看下发文件任务的状态和结果:

DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
IAcsClient client = new DefaultAcsClient(profile);

DescribeSendFileResultsRequest request = new DescribeSendFileResultsRequest();
request.setRegionId("cn-hangzhou");
request.setInvokeId("t-xxxxxx");

try {
    DescribeSendFileResultsResponse response = client.getAcsResponse(request);
    System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
    e.printStackTrace();
} catch (ClientException e) {
    System.out.println("ErrCode:" + e.getErrCode());
    System.out.println("ErrMsg:" + e.getErrMsg());
    System.out.println("RequestId:" + e.getRequestId());
}

通过阿里云CLI下发文件

还可以通过阿里云CLI向目标实例下发文件。

$ aliyun ecs SendFile --Content your_content --InstanceId.1 i-xxxxxxx --Name test.sh --TargetDir /root
{
	"InvokeId": "f-hz0x8xxxxx",
	"RequestId": "BBEC9000-B0A8-47D9-B105-XXXXX"
}

再通过DescribeSendFileResults轮询文件下发结果。

aliyun ecs DescribeSendFileResults --InvokeId f-hz0x8xxxxx --waiter expr='Invocations.Invocation[0].InvocationStatus' to=Success

展望

由于文件大小有32KB的限制,该功能当前有一定的局限性。SendFile API在未来会借助OSS的能力,完善大文件的下发场景。

发送文件是运维场景中非常基础的能力,通过结合运维编排OOS的编排能力,可以实现非常丰富的功能,提高运维自动化和智能化。

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
克魔助手工具下载、注册和登录指南
克魔助手工具下载、注册和登录指南
|
4月前
|
机器人 API
钉钉里{"code: 400, 错误描述:机器人权限校验不通过;解决方案:请登陆开放平台后台,检查机器人是否归属于token对应的主应用名下 请问场景机器人-发消息-这个报错什么原因导致的啊?
钉钉里{"code: 400, 错误描述:机器人权限校验不通过;解决方案:请登陆开放平台后台,检查机器人是否归属于token对应的主应用名下 请问场景机器人-发消息-这个报错什么原因导致的啊?
153 0
|
13天前
|
自然语言处理 机器人
如何在飞书创建企业ChatGPT智能问答助手应用并实现公网远程访问(1)-3
如何在飞书创建企业ChatGPT智能问答助手应用并实现公网远程访问(1)-3
|
13天前
|
自然语言处理 机器人 Go
如何在飞书创建企业ChatGPT智能问答助手应用并实现公网远程访问(1)-1
如何在飞书创建企业ChatGPT智能问答助手应用并实现公网远程访问(1)-1
|
2月前
|
物联网 Serverless
MQTT常见问题之通过mqtt控制台查询不到设备轨迹如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
11月前
|
安全 开发者
3. 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定
公众号管理员添加开发者时,提醒:该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定
141 0
|
消息中间件 物联网 API
阿里云物联网平台入门-设备消息上传
阿里云物联网平台是一个集成了设备管理、数据安全通信和消息订阅等能力的一体化平台。向下支持连接海量设备,采集设备数据上云;向上提供云端API,服务端可通过调用云端API将指令下发至设备端,实现远程控制。此篇文章按照官方入门实例操作下设备消息的上传
770 0
阿里云物联网平台入门-设备消息上传
|
存储 JSON 小程序
unicloud云函数开发微信客服消息自动回复图片消息(完整步骤)
unicloud云函数开发微信客服消息自动回复图片消息(完整步骤)
358 0
unicloud云函数开发微信客服消息自动回复图片消息(完整步骤)
|
小程序 前端开发 JavaScript
解决微信小程序MQTT通讯真机调试失败的问题附加可用代码
原因:模拟器上测试可以,选中了不校验合法域名,真机调试没能连接服务器,解决思路换了个mqtt.js 可参考 https://unpkg.com/mqtt@2.18.8/dist/mqtt.min.js 废话不多说!上代码 前端部分自己改改就可以用了,我懒得改了 微信小程序index.wxml &lt;view style="width: 750rpx;height:330rpx;"&gt; &lt;image src="https://img-blog.csdnimg.cn/295062b06acc
255 0
|
人工智能 自然语言处理 达摩院
如何解决智能对话机器人主账号创建机器子账号控制台无法管理使用问题
阿里云智能对话机器人(原云小蜜),是阿里巴巴自研的新一代智能人机对话系统,适用于智能客服、智能办公助理、智能售前服务、语音对话交互等场景,能替代人工解决大部分咨询问题。产品基于达摩院核心AI能力构建,具备完善的多模态交互对话能力,企业可通过SaaS控制台可视化配置,也可通过开放API灵活集成定制。在登录RAM用户(子账号)使用主账号创建的智能对话机器人时,需要阿里云账号(主账号)对RAM账号进行相应授权。但是客户在第一次使用过程中往往对于这样的问题不知如果解决,更不懂怎么进行授权操作。本文简单介绍下如何快速解决智能对话机器人中主账号创建的机器子账号控制台无法看见使用的问题。
437 0
如何解决智能对话机器人主账号创建机器子账号控制台无法管理使用问题