Patcher,一种保持更新基础设施即代码的工具

208 阅读2分钟

Gruntwork宣布了Patcher 的测试版可用性,这是一种自动保持基础设施作为代码更新的工具,即使在中断更改之后也是如此。

在撰写本文时,Patcher 允许将参考架构从CIS AWS Foundation Benchmark的 1.4 版升级到 1.5 版,引入了 200 多项更改并修复了三个重大更改。参考架构是一系列建议和最佳实践,用于将来自 Gruntwork的基础设施即代码库组装到 AWS 上的端到端技术堆栈中。Patcher 的目标是让用户管理 Gruntwork Infrastructure as Code Library 的所有升级,并自动执行一系列操作。

可以从 GitHub 存储库轻松安装 Patcher(在撰写本文时,需要向 Gruntwork 请求存储库访问权限)。Patcher 使用 Docker 在沙盒环境中执行升级。

安装后,为了升级 IaC 存储库,Patcher 执行以下步骤:

  • 发现依赖的更新
  • 应用补丁以进行重大更改
  • 查看更改
  • 部署

Patcher 使用以下命令发现并更新依赖项:

patcher upgrade

该工具分析源代码并自动发现依赖项、每个依赖项的版本以及是否有新版本。在下面的例子中,Patcher 发现了一些需要升级的依赖。

                    How to Patcher 显示需要更新的依赖项

Patcher 允许维护者定义一个补丁,指定如何转换代码以管理重大更改。应用于代码的补丁由 YAML 文件描述。Patcher 执行 YAML 代码中定义的步骤,可以是任意命令。例如, tflint的补丁(一种强制执行与安全组相关的新建议的方法)可以指定为:

name: "Add tflint hook to Terragrunt configuration for CIS compliance checks"
author: Gruntwork <gruntwork.io>
image: gruntwork/patcher_bash_env:v0.0.12
steps:
  - name: "Create tflint configuration"
    run: create_tf_lint_config.sh
  - name: "Add to the root terragrunt.hcl a hook for tflint"
    run: add_hook.sh

Patcher 在定义的 Docker 镜像中执行升级,这使得代码可移植,并通过限制镜像可以看到和执行的操作来保证用户安全。当 Patcher 完成时,将显示应用的所有补丁的摘要。这样,用户可以查看更改并应用它们。

使用 git diff 可以轻松完成审查,因为 Patcher 将所有更改保存在本地存储库中。然后用户可以决定提交所有更改或进行一些更改。

                    Patcher 升级后的 Git diff

在之前的屏幕截图中,Patcher 在从 CIS 1.4 升级到 1.5 的过程中做了一些更改,应用了一些补丁。

Patcher 的第一个版本专注于支持 CIS 从 1.4 到 1.5 的迁移,但 Gruntwork 的愿景是将 Gruntwork Infrastructure as Code and Reference Architecture 的所有更新自动化。