跳到主要内容

6.terraform-cloud

什么是 terraform​

Terraform 是一种基础结构即代码工具,可让您通过人类可读的配置文件定义和管理基础结构资源。Terraform 允许您在基础结构生命周期内使用一致的工作流,而不管资源提供程序如何。基础结构即代码工作流允许您以声明方式管理各种服务并自动更改,从而通过手动操作降低人为错误的风险。

什么是 terraform-cloud​

Terraform Cloud是一个云平台,旨在帮助团队协同使用Terraform。它使 Terraform 在一致且可靠的环境中运行,包括轻松访问共享的状态和机密数据、用于批准基础结构更改的访问控制、用于共享 Terraform 模块的私有注册表、用于管理 Terraform 配置内容的详细策略控制等。

简单来说,Terraform Cloud 是一个多人协作基础设施管理平台。可帮助团队在基础架构开发过程的每个步骤上进行协作。例如,每次计划新更改时,您的团队都可以在您应用计划之前查看并批准该计划。它还会在操作期间自动锁定状态,以防止可能损坏状态文件的并发修改。

工作方式​

Terraform Cloud 为您的 Terraform 运行支持三个工作流

  • CLI 驱动,使用 Terraform 的标准 CLI 工具在 Terraform Cloud 中执行运行。
  • UI/版本控制系统 (VCS) 驱动,其中推送到版本控制存储库触发器的更改在关联的工作区中运行。
  • API 驱动,允许您创建工具以编程方式与 Terraform Cloud API 进行交互。

本文主要介绍以 VCS 驱动的工作方式,也就是常说的 GitInfras。

对于 VCS 驱动的工作流,您必须配置 VCS 访问权限并创建工作区,然后将其与包含 Terraform 配置的存储库相关联。然后,可以将工作区配置为为任何拉取请求创建推测计划,从而使您的团队能够查看更改将如何修改基础结构。任何合并到主分支都会触发 Terraform 运行来实现您的更改。

快速上手​

1.创建一个帐户​

访问 https://app.terraform.io/signup/account 并按照提示创建一个免费的Terraform Cloud帐户。

2.创建组织​

创建最多 5 个用户的组织是免费的,您添加到组织的成员将能够在您的工作区上进行协作并共享 private modules 和 providers

3.创建工作区​

创建 Terraform Cloud 帐户并创建或加入组织后,您就可以开始使用 Terraform Cloud 管理基础架构。工作区可以与代码仓相关联,是执行任务的工作台,我们可以在一个组织下创建多个工作区。

4.配置新的 GitHub 存储库​

为了触发 Terraform Cloud 从对 VCS 的更改运行,您首先需要在个人 GitHub 帐户中创建一个新的存储库。

在 GitHub UI 中,创建一个新的存储库。将存储库命名为 learn-terraform-cloud ,然后将其余选项留空并单击创建存储库。

若要将工作区与新的 GitHub 存储库连接,请转到工作区的“设置”,然后选择“版本控制”。

在下一页上,单击“连接到版本控制”。

从下拉菜单中显示的选项中选择 Github.com。

将打开一个新窗口,要求您授权Terraform Cloud使用您的GitHub帐户。单击绿色的“授权”按钮以授权连接。

系统可能会要求您为 GitHub 帐户或组织安装 Terraform Cloud。如果出现提示,请选择您的帐户或组织。

接下来,搜索并选择新的 learn-terraform-cloud 存储库。

5.在代码仓库上传 main.tf​

下面示例演示在 腾讯云上创建一个 vpc,可以看到我们并没有配置 secretKey 和 secretId, 我们会在变量设置中存储这些机密信息


// 创建一个 main.tf 文件并上传到我们上一步创建的代码仓库
terraform {
required_providers {
tencentcloud = {
source = "tencentcloudstack/tencentcloud"
}
}
}

# Configure the TencentCloud Provider
provider "tencentcloud" {
region = "ap-shanghai"
}


resource "tencentcloud_vpc" "foo" {
name = "vpc-sandload-terraform-test"
cidr_block = "10.0.0.0/16"
dns_servers = ["183.60.83.19", "183.60.82.98"]
is_multicast = false
tags = {
"test" = "testassdd"
}
}

6.配置机密变量​

点击下图 variable 设置,选择环境变量方式。注意查看 腾讯云 regsitry 文档,当使用环境变量的方式存储 secretKey 和 secretID时候,key 名必须如下图所示,否则腾讯云无法找到变量,导致 初始化 privoder 失败。

7.开始我们的 gitops​

一切准备就绪,当我们改变代码仓库的 main.tf 时候,我们的terraform cloud 会接收 webhook 回调,从而自动运行 terraform plan,我们要做的就是查看 将要变更的基础设施差异是否符合预期,如果符合预期,我们可以点击 approve ,这样 terraform 才会执行 apply。

8.销毁资源和工作区​

当我们想要销毁这个工作区所生成的远端资源时候,我们点击下图红色按钮。

总结​

使用 terraform cloud ,我们能够很方便的集成 git 代码仓库,能够安全的存储机密变量,能够管理大型多个团队的协作,能够记录每一次基础设施的变更。有了这些很好用的功能,我们才能在公司级别使用 terraform 来管理基础设施,才能够践行基础设施即代码这个理念。当然,国内很多公司包括 bilibili,阿里,腾讯都有自己的基础设施管理平台,最终目标都是更好的管理公司资产,减少运维操作复杂度,下一讲,我们来具体介绍下 bilibili 如何实现内部多云管理平台!