批量在多台ECS内执行命令的最佳实践

简介: 阿里云的客户远程在ECS内部执行命令是最常见的运维操作之一了,比如在ECS内安装卸载软件,启动停止某个进程,等等。很多情况下,还需要对一个ECS列表中的多台ECS,统一的执行某个相同的命令并汇聚执行的结果。

背景与痛点

阿里云的客户远程在ECS内部执行命令是最常见的运维操作之一了,比如在ECS内安装卸载软件,启动停止某个进程,等等。很多情况下,还需要对一个ECS列表中的多台ECS,统一的执行某个相同的命令并汇聚执行的结果。

一个可行的方案是利用SSH远程连接到ECS上执行命令,但是开放ECS的SSH端口给internet访问是危险的。客户可以通过自建跳板机来间接访问ECS以解决安全性的问题,但是这带来了复杂度和成本的上升。

Ansible是业界比较流行的开源的运维工具,但是其认证是独立于阿里云的账号体系之外的,无法通过阿里云的官方工具进行权限控制,其操作记录也无法在阿里云上进行审计。

如果用户使用的是Windows版本的ECS,虽然可以利用PowerShell远程执行命令,但是配置和维护过程更加困难。

在此,我们向大家推荐阿里云官方的批量在多台ECS内执行命令的最佳实践:运维编排服务OOS+云助手。云助手提供了在ECS内执行命令的原子能力,运维编排服务OOS则附加了更丰富的批量、定时、事件驱动、自定义模板等能力,两者结合,可以让ECS运维工作变得既安全又简单高效。

准备工作

准备工作只有两个简单步骤。

首先,请访问运维编排OOS的控制台点一下“立即开通”按钮完成服务的开通。这是一个免费服务,请放心开通。

https://oos.console.aliyun.com/

_2019_10_14_6_11_28

开通之后,请确保您已安装和配置了阿里云命令行工具CLI,且版本号大于等于 3.0.19。该CLI在Github上的下载链接为:https://github.com/aliyun/aliyun-cli/releases

开始执行

我们直接先看一个例子,我要针对cn-beijing地域的["i-1234","i-5678"]这两台远程Linux ECS,执行“echo 123”这个shell命令,我只需要在我本地的shell终端里,输入命令:

ali-xxxxxx:~ shengbo$ aliyun oos StartExecution --region cn-beijing --TemplateName ACS-ECS-BulkyRunCommand --Parameters '{"commandType":"RunShellScript", "commandContent":"echo 123",  "targets":{"Type":"ResourceIds", "ResourceIds":["i-1234","i-5678"]}, "rateControl":{"maxErrors":0,"mode":"Concurrency"}, "OOSAssumeRole":"" }'

简单解释一下上面这个命令,它调用了oos的StartExecution的API,启动官方提供的公共模板ACS-ECS-BulkyRunCommand,传入包含了ECS实例列表(ResourceIds)和执行内容(commandContent)的参数。

该命令会返回一个json结构,如果你能找到"ExecutionId": "exec-xxxxx", 那么恭喜你,你指定的命令已经开始在远程执行了。

屏幕快照 2019-10-14 下午7.25.30.png

请记录下ExecutionId,然后作为参数输入到下面的ListExecutions命令查询执行的过程和结果:

ali-6c96cfde303d:~ shengbo$ aliyun oos ListExecutions --region cn-beijing --ExecutionId exec-xxxx

如果命令正在运行中,你会看到类似如下的结果,Status是“running”。TotalTasks是总的命令数,SuccessTasks是已经执行成功的命令数。两个数字的差,就是还待执行的命令数。

_2019_10_14_7_44_04

你可以多次执行同样的ListExecutions命令进行查看,直到看到Outputs表示整个命令的结果,对于本例,为两台ECS上的标准输出:

_2019_10_14_7_39_51

进阶-自定义模板

在上面的例子里,命令的参数有点过于复杂,其实我可以自定义模板把参数固定下来,让执行的命令变得格外简单。

自定义模板的命令如下,你可以根据自己的需要进行改写:

aliyun oos CreateTemplate --region cn-beijing --TemplateName sample123 --Content '{

"FormatVersion": "OOS-2019-06-01",

"Tasks": [

{

"Name": "runCommand",

"Action": "ACS::ECS::RunCommand",

"Properties": {

"commandContent": "echo 1234",

"instanceId": "{{ ACS::TaskLoopItem }}",

"commandType": "RunShellScript"

},

"Loop": {

"Items": [

"i-1234",

"i-5678"

],

"Outputs": {

"commandOutputs": {

"AggregateType": "Fn::ListJoin",

"AggregateField": "commandOutput"

}

}

},

"Outputs": {

"commandOutput": {

"Type": "String",

"ValueSelector": "invocationOutput"

}

}

}

],

"Outputs": {

"commandOutputs": {

"Type": "List",

"Value": "{{ runCommand.commandOutputs }}"

}

}

}'

今后,你只需要执行如下命令就可以完成和前面一样的效果了

ali-6c96cfde303d:~ shengbo$ aliyun oos StartExecution --region cn-beijing --TemplateName sample123 --Parameters '{}'

此命令调用oos的StartExecution这个API,执行sample123这个自定义模板,不需要额外传入参数。

当然,前面用CLI所做的一切操作,都可以在OOS控制台用白屏化的方式执行,链接为:

https://oos.console.aliyun.com/

了解更多

运维编排OOS是阿里云的运维自动化平台,适用于批量、定时、事件驱动、跨区域运维等场景,除了在ECS内执行命令外,还可以完成ECS创建释放,启停,变配,网络带宽升级,挂载云盘等等各种操作。

如果想了解更多,加入钉钉群“运维编排OOS支持群”,群号23330931。我们会有值班人员在线支持。

OOS管理控制台的链接:https://oos.console.aliyun.com
OOS帮助文档的链接 https://help.aliyun.com/product/119529.html

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
安全 Linux Shell
使用SCP命令在CentOS 7上向目标服务器传输文件
以上步骤是在CentOS 7系统上使用SCP命令进行文件传输的基础,操作简洁,易于理解。务必在执行命令前确认好各项参数,尤其是目录路径和文件名,以避免不必要的传输错误。
192 17
|
3月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
357 21
|
5月前
|
JSON API 数据安全/隐私保护
使用curl命令在服务器上执行HTTP请求
总的来说,curl是一个非常强大的工具,它可以让你在命令行中发送各种类型的HTTP请求。通过学习和实践,你可以掌握这个工具,使你的工作更加高效。
346 30
|
6月前
|
弹性计算 人工智能 运维
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
阿里云操作系统控制台提供了便捷的服务器监控与管理功能,简化了运维工作。通过将多台服务器纳入统一监控平台,用户可以快速查看CPU、内存、磁盘和网络等关键资源的使用情况,避免了逐一远程连接查询的繁琐操作。此外,该工具支持自动化数据汇总,极大地方便了日报、周报和月报的编写。测试过程中,系统展示了良好的稳定性和响应速度,尤其在网络抖动和大文件健康状态测试中表现出色。整体体验流畅,显著提升了运维效率。 操作系统控制台地址:[点击访问](https://alinux.console.aliyun.com/)
169 26
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
|
6月前
|
Java 网络安全 Apache
SshClient应用指南:使用org.apache.sshd库在服务器中执行命令。
总结起来,Apache SSHD库是一个强大的工具,甚至可以用于创建你自己的SSH Server。当你需要在服务器中执行命令时,这无疑是非常有用的。希望这个指南能对你有所帮助,并祝你在使用Apache SSHD库中有一个愉快的旅程!
330 29
|
6月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
371 17
|
安全 Ubuntu 应用服务中间件
Web服务器安全最佳实践
【8月更文第28天】随着互联网的发展,Web服务器成为了企业和组织的重要组成部分。然而,这也使得它们成为黑客和恶意软件的目标。为了确保数据的安全性和系统的稳定性,采取适当的安全措施至关重要。本文将探讨一系列保护Web服务器的最佳策略和技术,并提供一些实用的代码示例。
702 1
|
8月前
|
运维
阿里云服务器批量执行命令(系统运维管理oos)
阿里云【系统运维管理oos】批量执行详情
172 5
|
11月前
|
监控 Linux Shell
|
10月前
|
缓存 负载均衡 监控
性能优化:Node.js高效服务器开发技巧与最佳实践
【10月更文挑战第29天】在Node.js服务器开发中,性能优化至关重要。本文介绍了几种高效开发的最佳实践,包括使用缓存策略、采用异步编程、实施负载均衡和性能监控。通过示例代码展示了如何实现这些技术,帮助开发者构建更快、更稳定的Node.js应用。
301 2

热门文章

最新文章