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中的某个资源移除,但实际上并不真正删除这个资源
行动是绝望的解药!
欢迎转载和引用,但请在明显处保留原文链接和原作者信息!
本博客内容多为个人工作与学习的记录,少数内容来自于网络并略有修改,已尽力标明原文链接和转载说明。如有冒犯,即刻删除!
以所舍,求所得,有所获,方所成。