跳到主要内容

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 如何实现内部多云管理平台!