介绍Terraform Cloud - 免费远程状态管理

2019-08-22 18:30:20 浏览数 (1)

Terraform Cloud

在阅读了前几篇生态产品的文章以后,希望大家对基础架构即代码在腾讯云上应用的基础概念和步骤有了了解:

  • 1.使用packer在腾讯云进行镜像创建
  • 2.安装、配置terraform
  • 3.用terraform管理腾讯云云资源
  • 4.用terraform管理现有资源

在Terraform的几个基础概念文中,我们了解到状态管理是terraform每一次对资源进行管理以后,所保存的最近一次操作的时间、各资源的相关属性、各变量的当前值、状态文件的版本、等等。下一次再操作的时候,terraform首先会把当前状态文件与云服务商上的状态进行一次更新,找出是否后有被删除或者更改了的资源,然后再根据.tf文件,决定那些资源需要删除、更新、创建。操作完成后,会重新生成一个状态文件。状态文件的完整性对terraform的正常运行至关重要,如果它的状态不对,那有可能会造成terraform对所管理的云资源状态造成误判,并据此进行误操作。

对于terraform开源版的现有用户来说,状态文件缺省是在本地目录保存的。这意味着多个团队成员使用terraform管理通一套云资源时,需要很小心的管理该文件的读写状态,以免多个团队成员对同一文件进行操作。这个问题在同一个团队管理多套云资源的时候就更加复杂了,如果没有几个自动化机制来保证,那就很难避免人工误操作。

这个问题的解决方式是引入远程状态管理。远程状态管理支持多种后台,本文介绍的是如何通过Terraform Cloud实现远程状态管理。通过Terraform Cloud进行远程状态管理后,单个用户再也不需要在本地管理状态文件,团队之间也不再需要关心共享的问题,Terraform Cloud会自动处理这些事情。

Terraform Cloud是Hashicorp Terraform的SaaS版本。为了方便广大开源用户,2019年5月Hashicorp决定将Terraform Cloud的远程状态管理功能免费开放给开源版用户。本文会对如何使用该功能进行详细介绍。本文假设读者已经知道terraform的基本用法,并有一个最基础的源代码。如果没有的话,可以在这里下载一份。

第一步-注册一个Terraform Cloud免费账号

注册免费的Terraform Cloud账号很容易,点击这里注册即可。注册完成后,可以通过这里登录。

登录成功以后第一步是创建一个新的组织:

创建新组织创建新组织

组织创建完成后,生成一个用户token:

创建新用户Token创建新用户Token

请把这个token保存下来在下一步使用。

第二步-配置Terraform Cloud远程后台

首先,把刚才生成的用户token放在~/.terraformrc文件里,比如:

代码语言:txt复制
➜  tf-cloud-artical cat ~/.terraformrc
credentials "app.terraform.io" {
  token = "3zbZAeyntgEFPQ.atlasv1.zGJNv57HAnqgTN6D4RfsdQM6Xh1oyyWy7PVcqCRz4hQfwKMTaiTw6xIY2SYo1fyxo9E"
}

在terraform源文件的当前目录里,创建一个新的.tf文件来定义后台,例如:

代码语言:txt复制
➜  tf-cloud-artical cat tf-cloud.tf
terraform {
  backend "remote" {
    hostname = "app.terraform.io"
    organization = "yulei-first"
    workspaces {
      name = "first-example"
    }
  }
}

注意这里的organization是已经手工创建了,而workspace还没有。

第三步-迁移

现在在当前目录运行terraform init,terraform会发现有了新的后台定义,然后会问用户是否需要迁移:

代码语言:txt复制
first-example git:(master) ✗ terraform init

Initializing the backend...
Do you want to copy existing state to the new backend?
  Pre-existing state was found while migrating the previous "local" backend to the
  newly configured "remote" backend. No existing state was found in the newly
  configured "remote" backend. Do you want to copy this state to the new "remote"
  backend? Enter "yes" to copy and "no" to start with an empty state.

  Enter a value: yes


Successfully configured the backend "remote"! Terraform will automatically
use this backend unless the backend configuration changes.

Initializing provider plugins...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.tencentcloud: version = "~> 1.16"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

迁移成功后,Terraform Cloud的界面里会出现一个新的workspace:

迁移成功的workspace迁移成功的workspace

如果在命令行上对这个项目多进行几次terraform 操作,workspace里边会出现多个statefile:

同一个workspace中的多个状态文件同一个workspace中的多个状态文件

使用者可以看到每次变动statefile的变化情况:

状态文件变化追踪状态文件变化追踪

第四步-邀请其它用户一起管理workspace

有了这个基础以后,你可以开始邀请其他人加入你的团队(team),他们也需要各自生成自己的Terraform Cloud token,然后就可以共享workspace了。

邀请其它团队成员加入team邀请其它团队成员加入team

如果有多个人同时试图操作,terraform命令行会发现无法获得状态文件锁,进而无法操作,这保证了状态文件的完整性。

结语

Terraform Cloud免费的状态文件管理可以帮助团队的多个成员共同管理一套云资源,并避免损坏状态文件的完整性。Terraform Cloud会逐步引入新功能,并在适当的时候将一些功能免费开放。希望大家能够更多的使用Terraform Cloud。

0 人点赞