Ansible - 自动化远程还是本地?

Ansible - Automation remote or local?

如果 运行 像 Ansible 这样的自动化工具可以在云中构建您的基础架构堆栈(例如 AWS),那么在云中单独 regions/VPCs 拥有您的自动化工具和构建堆栈就足够了吗,还是在本地拥有自动化工具和脚本(拥有 datacenter/machine)更有意义?

好像都用过,只是想知道有没有最佳实践标准

我们运行一切都在本地。

  • 我们在本地 Vagrant 盒子中测试所有剧本(和我们的软件),因此无论如何我们都需要它。
  • 我们不需要额外的机器。你也应该用 Ansible 配置它们,所以至少有人需要安装 Ansible。否则你就会遇到先有鸡还是先有蛋的问题。
  • 可能会稍微快一点,因为你少了一个网络跃点。

  • 每个人都需要一个本地的 Ansible 安装,它只适用于 Linux 和 Mac,但不适用于 Windows(只能是目标)。

其他注意事项

  • 对于我们的 Windows 用户,Linux / Mac 用户使用 Ansible 创建一个 VM(所有设置)并将其导出为基础框。然后 Windows 用户可以在 Vagrant 中导入该基础框,只需要启动它——一切都已经安装好了。这包括 Ansible,因此您可以 运行 来自 VM 的所有内容。
  • 起初我们计划将 Ansible 放在我们的 NAT 实例上(用于私有 VPC 子网)。但是我们需要一种配置来设置 VPC、安全组和 NAT 实例,另一种配置用于 运行 NAT 实例并设置其余的基础设施。然而,我们看不到任何真正的好处,所以我们现在在本地拥有一切。

PS:不确定是否有明确的答案,但这些是我们的论据。

xeraa's 相比,我们 运行 尽可能从 AWS 内部进行。

我们从中获得的真正好处是,它允许我们在我们的案例中使用集中式 Jenkins servers that run Ansible (and Terraform 进行实际的 AWS 配置,Ansible 仅用于配置 EC2 实例和 运行 ad-hoc管理任务的剧本)。

然后我们可以通过凭据 and/or 安全性 groups/NACLs.

控制对这些 Jenkins 服务器的访问

这样做意味着我们可以控制拥有某种形式证书的人数,这些证书允许他们建造他们喜欢的任何东西and/or摧毁他们喜欢的任何东西。

理想情况下,我们只会通过 IAM EC2 实例角色向 Jenkins 服务器提供凭据,但我们还没有做到这一点。

其中一个真正的积极因素是我们的前线 line/second 几乎完全使用 Windows 的一线支持人员可以访问一个漂亮的 Web GUI 来在半夜管理事物 运行 Jenkins 作业,他们可以专门访问 运行,这些作业将执行诸如重启 server/service 甚至重建 VPC 的一部分等操作。

我们有一个单独的 "dev" 帐户,开发人员可以从他们自己的机器上访问该帐户,我们在开发 Ansible(和 Terraform)代码库之前先在这里构建内容,然后再使用该代码库在我们的测试和生产环境中。