您如何管理您的 EC2 Linux 机箱?

您如何管理您的 EC2 Linux 机箱?

我有一些 EC2 Linux 映像,它们每天晚上都会为我的一个项目执行处理任务。有时,我需要进入,进行一些代码更改,配置一些内容,然后重新捆绑映像。

我用于这些操作的工具集非常稀少(通过 SSH 进入框、在 VIM 中编辑文件、WGET 我需要的远程文件),我怀疑有更好的方法可以做到这一点。我很好奇,想知道处于我这个位置的其他人在做什么。

  • 您是否使用某种形式的窗口系统和远程桌面等同物来访问该框,还是全部都是命令行?管理 EC2 Windows 框很简单,因为您可以简单地远程桌面并通过网络传输文件。Linux 世界中有与此相当的东西吗?

  • 您是否直接在机器上进行配置更改/脚本调整?或者您是否在本地机器上设置了某些东西来远程编辑这些文件?或者您只是远程编辑它们,然后在每次保存时传输它们?

  • 您如何在 EC2 和本地环境之间来回移动文件?FTP?还是通过 VPN 进行某种映射驱动器?

我确实需要制定一些最佳实践来管理这些盒子。任何可以消除一些痛苦的建议都会受到热烈欢迎!

编辑:显然,我上面说得不清楚,因为前两个回复都围绕管理和配置 EC2 实例。我只是想知道如何通过远程桌面进入正在运行的 Linux 服务器,这样移动文件和编辑文件就没那么麻烦了。

答案1

我不再进行太多手动系统管理。我将我的基础设施视为可编程实体,并通过使用自动化配置管理、EC2 节点维护等工具配置系统来对待它。我的工具箱中的工具:

  • Ruby(我最喜欢的脚本/工具语言)
  • Git(版本控制)
  • Opscode 的厨师(用 Ruby 编写)(1)
  • Capistrano(临时大规模维护)
  • 用于实例和图像维护的 Amazon EC2 API 工具。
  • Rightscale 的 AWS gem(EC2 的 Ruby 绑定)

(1) - 披露一下,我为 Opscode 工作。其他工具也填补了这个空白,比如 Reductive Lab 的 Puppet。

当我按照特定功能所需的方式构建节点时,我会捆绑 AMI。例如,如果我正在构建 Rails 应用服务器,我会安装所有必备软件包以节省构建时间。

当所有其他方法都失败时,我会使用 SSH 登录系统。我从事手动系统管理很多年了,这已经是老生常谈了。

您是否使用某种形式的窗口系统和远程桌面等效物来访问该框,还是全部使用命令行?

除非某个包具有依赖关系并且自动安装,否则我不会在服务器上安装任何 GUI。

Linux 世界中是否存在与此相当的东西?(传输文件)

我通常进行两种类型的文件传输/文件维护。

  • 软件包安装
  • 配置文件

对于平台原生的软件包,我使用标准软件包管理工具,如 APT 或 YUM。对于源安装(something.tar.gz),我通常通过 wget 下载。

配置文件通常是 Chef 管理的 ERB 模板。

我使用 SSH 和 SCP/SFTP 手动传输文件。

您是否直接在机器上进行配置更改/脚本调整?或者您是否在本地机器上设置了某些东西来远程编辑这些文件?或者您只是远程编辑它们,然后在每次保存时传输它们?

我将与管理系统相关的所有内容保存在软件控制存储库中。这是我在更新一个或多个系统上的配置时的典型工作流程。我从本地工作站开始。

  • 从主 Git 存储库中提取其他人的更改。
  • 在本地编辑文件(例如,更新配置文件)。
  • 提交更改,推送至 master。
  • 在 Chef 服务器上(通过 SSH 登录),提取我刚刚提交的最新更改。
  • 将配置部署到 Chef 服务器上的适当位置(我为此使用 Rake)。
  • Chef 客户端会按间隔运行,因此它们每 30 分钟会获取一次更改。如果我需要立即执行某些操作,我会手动运行 chef-client。
  • 确认变更!

您如何在 EC2 和本地环境之间来回移动文件?FTP?还是通过 VPN 进行某种映射驱动器?

我在 EC2 节点上使用的文件可能存储在几个位置。

  • Chef 服务器。主要配置模板,还有一些小包。
  • GitHub。我们将代码(开源项目)存储在 GitHub 上。EC2 节点可以轻松访问它(例如,用于检出某个项目的最新版本)。
  • Amazon S3 存储桶。有些内容存储在存储桶中。

我在 EC2 上做了很多工作,主要是测试环境和更改。由于我的工具和工作流程,我花更多时间处理我真正关心的事情,而不是处理单个文件和思考具体配置。

答案2

我们的所有软件都是通过 RPM 部署的。每个 EC2 实例类型都由一个 kickstart 文件描述(该文件列出了要安装的 RPM...)。kickstart 设置意味着可以在大约 10 分钟内从头开始构建每个实例类型的工作机器。

然后,我们有一个程序调用 anaconda(Red Hat 安装程序)来获取 kickstart 文件,将系统安装到目录中,然后捆绑目录并将其作为 Amazon Machine Image 推送到 S3。这都是一步,所以我只需输入:

kickstart2ami webserver.ks

由于一台机器可以在大约 40 分钟内完全重建、上传并运行,因此构建新的机器映像比在实际(一次性)EC2 实例上执行系统管理更容易。因此,实际上无需在 EC2 实例上执行任何系统管理。

答案3

我喜欢NX用于远程 GUI 访问。文档也很齐全。

答案4

我认为您不需要远程桌面来完成这些任务。

正如其他人提到的,您可以使用 SFTP 在框之间传输文件。使用WinSCP 客户端通过 sftp 连接,您还可以使用它来编辑 Windows 计算机上的文件(通过双击它们),就像在本地计算机上一样。您还可以使用它来远程复制/移动文件。

您还可以考虑在 ssh 控制台上使用 Midnight Commander (mc),它可以加快文件操作速度。要安装,请使用yum install mcapt-get install mc命令。之后,您可以通过在终端上输入来启动它mc。它还有一个内置的查看器和编辑器,比 vim 更直接。

如果您确实想要 GUI(我们通常在服务器上没有 GUI),则必须安装 X 环境并使用 VNC 连接到它。在这种情况下,我们通过 ssh 隧道连接到 VNC 服务器,这会增加更多安全性。

相关内容