terraform - 是否存在通过不同环境(从开发到生产)推广 Terraform .tfplan 文件的可接受的工作流程方案?
问题描述
我是 Terraform 的新手,所以请耐心等待。这种情况适用于三大云提供商。一位同事想要一个生成 .tfplan 的管道,然后通过 QA、登台、生产“提升” .tfplan 文件。请记住,这些环境根据环境具有不同的资源名称和对象 GUIDS(自然)和标签。
据我所知,这是行不通的,因为计划文件引用可以根据每个环境中需要处理的现有资源变得非常具体。
我知道 TF 中的工作区。目前,我不希望被提及。让我们假设它们不是一个选项,因为更资深的同事认为它们是一个令人头疼的配置。我只是找不到任何记录在案的 TF 工作流,这甚至是可行的.. 但除此之外,它没有任何意义。该范式的另一个问题是,它意味着开发环境需要以您希望最终在生产中扩展资源的方式来扩展资源。从本质上讲......一个人将制定扩展计划,然后将其通过 QA 等转移到生产中......从而将生产中的扩展需求与开发人员联系在一起。我错了吗?
解决方案
在正常的 Terraform 工作流程中,您可能通过各种部署阶段“提升”的工件是配置(包含.tf
文件的模块目录树),而不是计划文件。
Terraform 中的“计划”是提供者提出的一组操作,通过将配置与之前的状态进行比较,使远程系统与新配置匹配。每个部署阶段都有自己的“当前状态”,因此每个部署阶段都需要创建自己的计划,尽管您可以为每个部署阶段使用相同的配置,以便告诉 Terraform所需的状态是相同的,即使步骤如下根据相关对象的配置方式,达到该状态可能会因环境而异。
Terraform 有一些安全检查,旨在当您尝试将保存的计划文件应用于与您创建它的状态快照不同的状态快照时进行捕获,因此在大多数情况下,这样做只会立即返回错误。但是,Terraform 用于检测的启发式方法并不完美(它使用不完整的信息),因此注意仅在预期的上下文中使用已保存的计划文件仍然是一个好主意。
推荐阅读
- javascript - 对 textarea 元素进行模糊和更改事件,是否有相当于 nochange 的模糊?
- php - 如何修复 PHP Post 请求中没有回显的变量?
- python - 扩展类型错误:函数正好采用 0 个参数(给定 1 个)
- c++ - 对这行代码感到困惑,该代码旨在充当将 Class 摄取到 void 指针中
- batch-file - 从注册表键值数据中获取安装位置
- laravel - Laravel 空白项目.. 这么多文件!它可以以某种方式减少吗?
- python - 带有 tesseract 的 OCR,预处理图像
- jquery - div内具有固定高度的多个嵌套元素
- python - 机器人框架中的并行执行(线程)
- nlp - 使用 CreateML MLTextClassifier 训练模型,由 EXC_BAD_ACCESS 停止(代码=1,地址=0x0)