作者 | 何贵民 阿里云开放平台高级开发工程师 主要负责开源生态工具(Terraform,Ansible,Spinnaker)与阿里云的集成,专注于借助主流开源工具帮助企业上阿里云和云上运维提效
导读
INTRODUCTION
生态工具Terraform的资源编排能力在持续提升企业上云效率,降低运维成本方面越来越专业和完善。对于一个企业和团队来讲,如何保证State的安全性和如何实现对同一份资源的协同管理也是必须要关心的问题。本文将详细介绍如何在阿里云上解耦对资源模板与State管理,消除团队协作的障碍。
1 Terraform State简介
Terraform State 是用来存放基础设施资源及其属性和状态的机制。上篇文章《 一分钟部署阿里云ECS集群 》对State做了详细的阐述,本文将在此基础上做一点补充。 Terraform State 从存储形态上分为两种:
- local:本地存储即资源状态存放在本地的一个state文件中,默认为执行目录下的名为
terraform.tfstate
文件。此方式也是Terraform默认的存储形式。 - remote:远端存储即资源状态存放在远端的一个服务中,如阿里云的OSS,Terraform Cloud,HashiCorp Consul等。远端存储带来的好处是实现了与资源定义模板管理的解耦,可以让State脱离本地磁盘而存储,在提升State安全性的同时,团队协作可以不再受制于Terraform的执行环境,执行目录和多人执行时间的限制,提升了管理的灵活性。
Backend
的组件决定的,local state使用的是local backend。除了local backend,其他所有的backend在使用之前都需要在模板中显示定义并通过
terraform init
来实现加载和配置。
2 Terraform Backend简介
Backend
是存储State的机制,它决定了State数据