来自TechWorld with Nana[1]的视频[2]
1. 只使用terraform 命令更新状态文件
尽管terraform.tfstate文件是一个json文件,切忌直接编辑,否则会带来各种问题
2. 使用远程共享存储来保存状态文件
在合作环境下,如果任何人都可以执行terraform命令修改状态,那么很快状态文件就会出现不一致给资源管理造成混乱。
所有团队成员应该在同一个文件存储上共享状态文件(terraform.tfstate),例如S3,A Z Blob Storage或者GCS
3. 使用状态锁
哪怕状态文件保存在共享存储上,依然会出现两个人同时修改状态的情况,并造成事故。
解决方案时使用锁,确保任何时刻只有一个人编辑状态文件。
但这需要文件存储服务的支持。例如AWS S3支持通过DynamoDB实现文件锁
4. 备份状态文件
状态文件无比重要,因此需要注意随时备份。
如果使用云文件存储,只需要开启版本管理(versioning)即可随时恢复到任何历史状态
5. 不同的环境使用不同的状态文件
一般我们会有多个系统环境(开发、测试、生产),对于不同的环境,要确保使用不同的状态文件保存对应的状态,以避免造成混乱
6. 引入GitOps的理念
使用git进行terraform文件的管理,实现高效合作和版本管理。通过git进行代码和基础设施管理
7. 持续集成(CI)
在git基础上,实现标准的gitflow代码管理。即任何变更通过Merge Request实现,并进行代码审阅和自动化测试。
8. 通过自动化部署(CD)执行状态更新
禁止任何人手动执行terraform,将terraform的部署操作交给自动管道来执行;这样能让变更更加可靠和顺畅。
[1] https://www.youtube.com/channel/UCdngmbVKX1Tgre699-XLlUA