写点什么

使用 Amazon EC2 Run Command 在不使用 SSH 访问的情况下大规模地管理实例

2019 年 11 月 12 日

使用 Amazon EC2 Run Command 在不使用 SSH 访问的情况下大规模地管理实例

以下博文的投稿者为 Ananth Vaidyanathan (EC2 Systems Manager 高级产品经理) 和 Rich Urmston (Pegasystems 公司云架构高级总监),介绍了如何使用 EC2 Run Command 在不使用 SSH 的情况下管理大量 EC2 实例。


-Jeff




企业通常具有若干托管环境和成千上万的 Amazon EC2 实例。安全地管理系统非常重要,同时也要避免棘手的安全外壳 (SSH)。Run CommandAmazon EC2 Systems Manager 的一部分,可以让您以可控制和可审查的方式对实例 (或使用标签的实例组) 运行远程命令。这有效地提升了每天都要依赖 Run Command 服务的 Pega 云操作的效率。


您可以通过标准 IAM 角色和策略控制 Run Command 访问,定义文档以获取输入参数,控制用于返回命令输出的 S3 存储桶。您还可以与其他 AWS 账户共享文档或将文档公开。总而言之,Run Command 提供了一组很有用的远程管理功能。


优于 SSH


Run Command 优于 SSH 且 Pegasystems 已将其作为主要远程管理工具的原因如下:


Run Command 所需时间较短 – 安全地连接到一个实例需要几个步骤,例如要连接的跳转盒或要列入白名单的 IP 地址等。使用 Run Command,云操作工程师可以直接从笔记本电脑调用命令,而不必找到密钥甚至实例 ID。相反,系统安全性依赖于 AWS 身份验证、IAM 角色和策略。


Run Command 操作完全经过审查 – 使用 SSH,无法真正控制他们的操作,也没有审查跟踪。使用 Run Command,每个调用的操作都会在 CloudTrail 中进行审查,包括调用用户的信息、运行命令的实例、参数和操作状态。您拥有完全控制权,能够限制工程师可以在系统上执行的功能。


Run Command 无需管理 SSH 密钥 – Run Command 利用标准 AWS 凭证、API 密钥和 IAM 策略。通过与企业身份验证系统的集成,工程师可以根据其企业凭证和身份与系统进行交互。


Run Command 可以同时管理多个系统 – 使用 SSH 完成某些简单任务会很麻烦,如查看 Linux 服务的状态或在托管实例队列中检索日志文件。Run Command 允许您通过 ID 或标签指定实例列表,并在指定队列中并行调用命令。除非是最小的 Pega 群集,否则这会在进行故障排查或管理时提供巨大的优势。


Run Command 使自动化复杂任务更容易 – 实现操作任务标准化需要详细的程序文档或描述准确命令的脚本。在整个队列中管理或部署这些脚本会很麻烦。Run Command 文档提供了一种封装复杂功能并处理文档管理和访问控制的简单方式。当与 AWS Lambda 结合使用时,文档提供了强大的自动化平台来处理任何复杂任务。


示例 – 重新启动 Docker 容器


下面是一个用于重新启动 Docker 容器的简单文档示例。它包含一个参数,即要重新启动的 Docker 容器的名称。它使用 AWS-RunShellScript 方法调用命令。该服务自动收集输出并将输出返回调用方。有关最新文档架构的示例,请参阅创建 Systems Manager 文档


Json


{  "schemaVersion":"1.2",  "description":"Restart the specified docker container.",  "parameters":{    "param":{      "type":"String",      "description":"(Required) name of the container to restart.",      "maxChars":1024    }  },  "runtimeConfig":{    "aws:runShellScript":{      "properties":[        {          "id":"0.aws:runShellScript",          "runCommand":[            "docker restart {{param}}"          ]        }      ]    }  }}
复制代码


在 Pegasystems 上实际应用 Run Command


Pegasystems 配置系统位于AWS CloudFormation上,后者用于部署和更新 Pega 云资源。在此之上是 Pega Provisioning Engine,这是一个无服务器的基于 Lambda 的服务,它管理着 CloudFormation 模板和 Ansible 操作手册库。配置管理数据库 (CMDB) 跟踪每个部署和更新的所有配置详细信息和历史记录,并使用分层目录命名约定布置其数据。下图显示了不同系统的集成方式:



对于云系统管理,Pega 操作使用名为 cuttysh 的命令行版本和基于 Pega 7 平台的图形版本,名为 Pega Operations Portal。这两种工具都允许您浏览部署环境的 CMDB,查看配置设置,并通过 Run Command 与部署的 EC2 实例进行交互。


CLI 演示


下面是一个 CLI 演示,用于查看客户部署并使用 Run Command 与实例交互。启动 cuttysh 工具可以显示 CMDB 的根目录和配置客户的列表:


Bash


% cuttyshd CUSTAd CUSTBd CUSTCd CUSTD
复制代码


您可以使用标准 Linux shell 命令 (例如 cdlscatgrep) 与 CMDB 进行交互。带有 s 前缀的项目表示可查看其属性的服务。带有 d 前缀的项目表示 CMDB 层次结构中可导航的子目录。在此示例中,将目录更改为 CMDB 层次结构的客户 CUSTB 部分,然后再将其更改为名为 env1 的配置 Pega 环境,位于 Dev 网络下。此工具显示了为该环境配置的项目。这些条目映射到配置的 CloudFormation 模板。


Bash


> cd CUSTB/ROOT/CUSTB/us-east-1 > cd DEV/env1
复制代码


ls –l 命令显示配置资源的版本。这些版本号映射到源代码控制 – CloudFormation、Ansible 和构成 Pega 云版本的其他组件的托管项目。


Bash


/ROOT/CUSTB/us-east-1/DEV/env1 > ls -ls 1.2.5 RDSDatabase s 1.2.5 PegaAppTier s 7.2.1 Pega7
复制代码


现在,使用 Run Command 与部署的环境进行交互。要执行此操作,可使用 attach 命令并指定要进行交互的服务。在以下示例中,可挂载到 Pega Web Tier。使用 CMDB 和实例标签中的信息,CLI 可以找到相应的 EC2 实例,并显示有关它们的一些基本信息。此部署有三个实例。


Bash


/ROOT/CUSTB/us-east-1/DEV/env1 > attach PegaWebTier # ID         State  Public Ip    Private Ip  Launch Time 0 i-0cf0e84 running 52.63.216.42 10.96.15.70 2017-01-16  1 i-0043c1d running 53.47.191.22 10.96.15.43 2017-01-16  2 i-09b879e running 55.93.118.27 10.96.15.19 2017-01-16
复制代码


在这里,您可以使用 run 命令调用 Run Command 文档。在以下示例中,您可以对实例 0 (列表中的第一个实例) 运行 docker-ps 文档。EC2 执行命令并将输出返回到 CLI,CLI 将显示输出。


Bash


/ROOT/CUSTB/us-east-1/DEV/env1 > run 0 docker-ps. . CONTAINER ID IMAGE             CREATED      STATUS        NAMES2f187cc38c1  pega-7.2         10 weeks ago  Up 8 weeks    pega-web
复制代码


使用相同的命令和已定义的其他文档,您可以重新启动 Docker 容器,甚至将文件的内容撤回到本地系统。当您获得文件时,Run Command 还会在 S3 存储桶中留下一个副本,以备您希望将链接传递给同事。


Bash


/ROOT/CUSTB/us-east-1/DEV/env1 > run 0 docker-restart pega-web..pega-web
/ROOT/CUSTB/us-east-1/DEV/env1 > run 0 get-file /var/log/cfn-init-cmd.log. . . . . get-file
Data has been copied locally to: /tmp/get-file/i-0563c9e/dataData is also available in S3 at: s3://my-bucket/CUSTB/cuttysh/get-file/data
复制代码


现在,利用 Run Command 可一次完成多个操作。在以下示例中,您挂载到具有三个正在运行的实例的部署,并希望查看每个实例的正常运行时间。将 par (并行) 选项与 run配合使用,CLI 将指示 Run Command 对所有实例并行执行正常运行时间文档。


Bash


/ROOT/CUSTB/us-east-1/DEV/env1 > run par uptimeOutput for: i-006bdc991385c33 20:39:12 up 15 days, 3:54, 0 users, load average: 0.42, 0.32, 0.30
Output for: i-09390dbff062618 20:39:12 up 15 days, 3:54, 0 users, load average: 0.08, 0.19, 0.22
Output for: i-08367d0114c94f1 20:39:12 up 15 days, 3:54, 0 users, load average: 0.36, 0.40, 0.40
Commands are complete./ROOT/PEGACLOUD/CUSTB/us-east-1/PROD/prod1 >
复制代码


总结


Run Command 通过提供更快的系统访问和跨一组实例运行操作,可以提高工作效率。Pega 云操作将 Run Command 与其他操作工具集成,为管理系统提供了一种简单安全的方法。这大大提高了操作效率,并更好地控制了每个主体在托管部署可以执行的操作。Pega 持续改进过程会定期评估操作者需要访问权限的原因,并将这些操作转换为新的 Run Command 文档以添加到库中。事实上,它们的长期目标是停止在启用 SSH 时部署云系统。如果您有任何问题或建议,请给我们留言!


-Ananth 和 Rich


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/manage-instances-at-scale-without-ssh-access-using-ec2-run-command/


2019 年 11 月 12 日 08:00341

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

开发机直连Docker中的redis容器小案例

麦洛

redis Docker

Flink Weekly | 每周社区动态更新

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

web集群架构

桥哥技术之路

四、Docker 网络原理、分类及容器互联配置

悟尘

Docker Kubernetes 容器 k8s Compose

redis数据结构介绍三-第三部分 整数集合

Nick

redis 源码 数据结构 源码分析 算法

西江月·记游(一)

轩辕御龙

忆秦娥·记游(三)

轩辕御龙

B站、Quora、InfoQ,哪个的阅读/播放量会先到10W+?

赵新龙

写作平台 B站 Quora

我认为“写作平台”还缺少读者

小天同学

产品 反馈 写作平台 建议

六、基于多阶段构建减小镜像体积降低复杂度

悟尘

Docker Kubernetes 容器 k8s Compose

Make Tmux Great Again

ccx

tmux

多人实时互动之各WebRTC流媒体服务器比较

音视频专家-李超

WebRTC 在线教育 音视频会议 mediasoup janus

Java并发编程系列——Fork-Join

孙苏勇

Java Java并发 并发编程 线程

废掉一个人最好的办法是让他忙到没有时间思考

熊斌

程序员人生 职场 思考

八、Kubernetes 入门实践

悟尘

Docker Kubernetes 容器 k8s Compose

没有永恒的技术,只有适合的技术

MavenTalker

技术 个人成长 职业规划

音视频已强势崛起,我们该如何快速入门音视频技术?

音视频专家-李超

音视频 WebRTC ffmpeg 在线教育 音视频会议

程序员陪娃漫画系列——排队问题

孙苏勇

程序员 生活 程序员人生 陪伴 漫画

二、基于 Dockerfile 构建并运行镜像

悟尘

Docker Kubernetes 容器 k8s Compose

七、Docker Compose 入门实践

悟尘

Docker Kubernetes 容器 k8s Compose

记游(四)

轩辕御龙

Istio 1.5:对开发人员有什么帮助?

麦洛

云原生 istio servicemesh

最通俗易懂的H264基本原理

音视频专家-李超

音视频 WebRTC ffmpeg 音视频会议 H264

五、Docker 数据持久化存储与性能调优

悟尘

Docker 容器 k8s Compose kubernet

从翻译到本地化:我在Airbnb做本地化经理的经历

葛仲君

产品 翻译 Airbnb 本地化 全球化

工作时间都去哪儿了?

伯薇

效率 时间管理 个人提升 团队

三、基于 Docker-registry/Nexus3 搭建本地仓库

悟尘

Docker Kubernetes 容器 k8s Compose

如何学习区块链技术

Kaichao

比特币 区块链 以太坊

菩萨蛮·记游(二)

轩辕御龙

Netty系列之源码解析(一)

猿灯塔

Netty

一、Docker基础入门及架构介绍

悟尘

Docker Kubernetes 容器 k8s Compose

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

使用 Amazon EC2 Run Command 在不使用 SSH 访问的情况下大规模地管理实例-InfoQ