Terraform - 状态

Terraform State

Terraform可以根据state跟踪托管资源,默认文件存储在本地(local),可以使用backend定义远程的存储(remote)。
状态文件:terraform.tfstate、terraform.tfstate.backup

State文件

terraform.tfstate文件保存Terraform创建和管理的所有资源信息默认存放在执行Terraform命令的本地目录下。
执行Terraform命令时,Terraform将会利用该文件与当前目录下的配置文件做Diff比较。
如果出现不一致,Terraform将按照配置文件中的定义重新创建或者修改已有资源,直到没有Diff。
如果这个state文件损坏,Terraform 将认为已创建的资源被破坏或者需要重建(实际的云资源通常不会受到影响)。

本地state存在的问题

  • 缺乏灵活性:状态文件存储在本地,本地多人协作时不仅需要拷贝模板,还需要拷贝state文件,不便于团队成员协同;
  • 缺乏安全性:state存在敏感数据,缺乏数据的保护;当多人同时变更时,存在状态不一致导致基础设施风险;文件系统损坏会导致状态文件丢失;

Backend

Backend是存放State文件的载体,可以存放在本地(local)或远程(remote),默认为本地。

  • state文件放到远端的存储服务上可以实现state文件和模板代码的分离
  • 远程Backend具有lock机制,可以降低多人协作时对state的维护成本,同时保护敏感数据

有关State的命令

  • terraform refresh: 刷新当前State的内容,用于检测不一致的内容并更新状态文件,也就是再次拉取最新的数据写入到state文件中。
  • terraform import :用于将资源导入到terraform state中,进而加入到Terraform的管理
  • terraform state : 用来操作状态文件
terraform state list  按照 <资源类型>.<资源名称> 的格式列出当前state中存在的所有资源
terraform state show  按照Key-Value的格式展示出特定资源的所有属性及其值,格式为 terraformstate show <资源类型>.<资源名称>
terraform state pull  获取当前state内容并展示
terraform state rm  将state中的某个资源移除,但实际上并不真正删除这个资源
posted @ 2024-08-23 11:23  Anliven  阅读(31)  评论(0编辑  收藏  举报