HashiCorp发布了Terraform 0.9,对远程状态的管理方式做了显著的改进,其中包括:状态锁定(State Locking)、状态环境(State Environments)、新的集中式初始化命令“terraform init”、可配置先于资源销毁运行的“销毁供应者”(Destroy Provisioner),以及“资源中断”(Resource Intereupt)方式,允许使用自定义逻辑对选定资源即刻处理操作符的中断。
Terraform 0.9显著地改进了对远程“状态”(State)的管理方式。虽然新版本确保了对当前状态的向后兼容问题,但是还应指出,在Terraform 0.11中,将移除对远程状态遗留配置的支持。首个主要改进是可以对受支持的后端做原生状态锁定,这是为了防止多重并行写入。在Terraform 0.9中,支持状态锁定的后端包括本地、AWS S3和Consul。
在HashiCorp的博客中,介绍了状态锁定是如何通过降低某个团队成员意外覆盖其它成员工作的风险,使Terraform可更安全地用于团队环境。状态锁定在所有具有写入状态的操作上自动执行,在状态锁定失败时,Terraform停止继续运行。对大多数命令而言,可以使用“-lock”标志禁用状态锁定,但是这种做法是不推荐的。Terraform在解锁失败时会给出一个锁ID和元数据,使用这些信息可在必要时实现“强制解锁”。关于状态锁定的更多信息,请参考Terraform文档。
现在远程状态是“后端”(Backend)的一个组成部分。后端是一种Terraform新提出的抽象,它封装了“状态环境(state environments)”等可插拔功能。状态环境是一种状态命名空间,允许一个Terraform配置文件夹管理多个不同的架构资源集合。状态环境类似于版本控制系统中的分支,只是状态环境不能被合并(merge)。按HashiCirp博客的建议,状态环境最有用之处在于隔离一系列资源以测试开发期间的变更,此后其中所有必要的变更将必须重新应用于其他环境中。环境管理使用命令行接口(CLI),如图所示:
在HashiCorp的博客中还指出,状态环境本身并不能单独用于开发、测试机和生产环境中的差异管理。当Terraform的配置逐渐增大后,“将一个大规模配置分割为多个使用“terraform_remote_state”数据资源链接在一起的小型配置,这是更可管理的,也是更加安全的”,因为这种做法允许团队委派所有权,降低了更改所产生的影响。关于状态环境的更多信息,请参考Terraform文档。
Terraform 0.9还引入了一个新命令“terraform init”,实现Terraform配置的初始化和设置。在初始化过程中,Terraform检测后端配置的任何更改,以及任何对现有状态迁移的提议,使得开发人员可以在各个类型的后端间迁移,这一更改是被Terraform自动管理的。按HashiCorp博客的说法,这一新命令应成为所有Terraform工作流的重要组成:
对于每个团队成员可运行的所有Terraform配置,“terraform init”命令应成为一个不可或缺的设置命令。多次运行命令是安全的,这确保后端得到了适当的配置。
无论“terraform plan”这样的主命令,还是“terraform taint”和“terraform console”这样的辅助命令,所有的Terraform命令都可以与远端状态无缝工作。当一个命令从本机运行时,会自动地根据远端状态而非本地状态运行。按HashiCorp的介绍,“这种方式使得用户可以按照自身的习惯使用CLI,同时依然能在团队环境中受益于远程状态存储的优点”。在后端文档的完全版中,对此提供了更多信息。
Terraform 0.9还支持在销毁资源时运行供应者(provisioner)。供应者是一种执行预定措施行为的机制,自最初的0.1版本以来,Terraform的资源创建就支持供应者机制,无论是本地运行命令还是远程运行命令。销毁供应者增强了供应者机制,如果指定了参数“when = 'destroy'”,销毁供应者就会实现资源销毁中同样部分的功能。供应者的运行要先于对所定义资源的销毁。Terraform会在销毁失败时报错,并在下一次运行“terraform apply”时重新运行供应者。由于这一默认行为,多次销毁供应者时应加倍小心。
在0.9版本中还包括了其它一些小改进。例如,中断已可以被检测到,并为使用用户逻辑处理中断提供资源。Terraform 0.9中还添加了对多个新提供者和上百种新资源的支持。对已有资源也做了很大的改进,包括:无需强制销毁就可以重新调整AWS实例的大小、对EC2的完全IPv6支持,以及对DNSimple提供者的更新,使得仅需一个新的认证令牌时就可使用APIv2。
除了在文档“升级指南”中给出禁用和更改,Terraform 0.9核心都是向后兼容的。关于Terraform 0.9版本的更多信息,可以参考HashiCorp的博客。
本文转自d1net(转载)