Terraform 需要帮助了解地形状态管理吗

Terraform 需要帮助了解地形状态管理吗,terraform,Terraform,这更多的是一组概念性的东西,当涉及到地形是如何工作的时候,我正试图将我的头脑包围起来 1) 下面是一个场景。假设我创建了一个简单的计划,在AWS中创建了两台机器。Init,apply,它构建基础结构并创建本地状态文件。对代码感到满意,我将其推送到github。我的问题是,我是否应该把州档案也推高?如果没有状态文件,任何人只要拆下代码并再次尝试构建实例,就不会拥有状态,因此我假设terraform会尝试构建一组新的机器。但是,状态文件感觉像是残留数据,因此应该忽略 2) 相同的场景,但假设该计划包

这更多的是一组概念性的东西,当涉及到地形是如何工作的时候,我正试图将我的头脑包围起来

1) 下面是一个场景。假设我创建了一个简单的计划,在AWS中创建了两台机器。Init,apply,它构建基础结构并创建本地状态文件。对代码感到满意,我将其推送到github。我的问题是,我是否应该把州档案也推高?如果没有状态文件,任何人只要拆下代码并再次尝试构建实例,就不会拥有状态,因此我假设terraform会尝试构建一组新的机器。但是,状态文件感觉像是残留数据,因此应该忽略

2) 相同的场景,但假设该计划包括一个实现S3后端的安装文件。是否存在相同的问题,或者计划的任何运行是否符合S3后端的状态

3) 现在,让我们假设我希望这个计划在一个更大的计划中作为模块运行,该计划部署整个环境并将其状态文件存储在S3中。该模块已运行,因此已有现有计算机。作为更大模块的一部分运行模块的方式是否与(1)相同,因为它使用伞计划的状态文件,还是使用其现有的s3状态文件

4) 后端设置应该作为一个独立的模块实现吗?我的想法是,如果有人试图运行terraform destroy,他们不会破坏后端,只会破坏基础设施


总的来说,我对Terraform的企业工作流程相当困惑。

我将根据我对Terraform的经验来回答:

1) 使用Terraform执行任何操作都需要更新的Terraform状态。您可以通过文件共享或git共享此状态(不推荐,如果有人忘记使用git pull,您将遇到问题,并且该状态包括应保护的敏感数据)。如果你的身体不舒服的话,最好用一个。正如您所说,如果terraform在没有更新状态的情况下执行,它将重新创建整个基础设施

2) 实际上,问题是通过使用S3(或任何其他)后端解决的。通过后端,Terraform负责在执行任何操作之前提取远程状态

3) 否,如果更改计划,则必须手动更新状态。您可以使用
terraform refresh
terraform import
将现有基础设施导入该州

4) 每个terraform计划必须有一个后端,在模块中配置后端是不可能的。模块是要导出和共享的,因此它必须与后端无关。后端不受terraform的管理(您应该在开始使用terraform之前创建它),因此它在任何情况下都不会被破坏。如果要防止任何其他资源被破坏,可以使用该功能

Terraform有一些团队应该熟悉的警告,其中之一是改变计划的结构意味着需要额外的工作来协调现有基础设施与国家之间的关系


无论如何,使用远程后端,团队在同一个计划中协同工作不会有问题。

About(3),那么导入是否应该在编写计划并初始化后进行?我还没有玩terraform导入/刷新。是的,首先更新terraform代码,然后使用refresh或import导入现有基础设施,最后运行terraform plan以确保一切正常