Terraform云 3 – 用Terraform管理Terraform云

复习

在此之前,我已手动通过GitHub设置了Terraform Cloud的工作空间,以便执行。然而,有点遗憾的是,明明使用了Terraform,但Terraform Cloud本身的设置却需要手动操作。既然如此,我们就将Terraform Cloud也纳入Terraform的管理范围吧。

在这篇文章中实现的内容

Terraform Enterprise Providerの実行
Terraform Cloudのコード管理
Terraform CloudのSlack通知

这篇文章的目标读者群

读者群体

    • Terraform Cloudに興味がある人

 

    • Terraform Cloudの運用に課題を抱えている人

 

    いろいろなTerraform Providerに興味がある人

必要技能 (bì jì

    多少のTerraformのコーディング知識

原文: “そもそもTerraformは”

汉语翻译: “首先,Terraform是”

根据Qiita上的文章数量和社区问题,我认为Terraform主要用于公共云基础设施的供应。实际上,从官方网页(提供者-HashiCorp的Terraform)上也可以看出,除了公共云之外,还提供了HW、IdP、数据库等提供者。这些都是由世界各地的志愿者开发的,如果你有兴趣的话,不妨去看看,会很有趣。此外,也开发了很多其他供应商如sakuracloud的野生供应商terraform-provider-sakuracloud等。

スクリーンショット 2020-09-12 9.38.29.png

我打算使用一个名为Terraform Enterprise Provider的官方提供商来管理Terraform Cloud。

准备好

除了已创建的内容之外,还需要以下内容:
* 具有Terraform Cloud组织操作权限的令牌(组织令牌或属于owners团队的用户令牌)
* Slack的Webhook URL

另外,如果您有一个可以在本地运行的环境会很方便,所以请参考以前的文章进行设置。

构建

在中国语中,重写如下:

执行terraform init命令并创建工作空间。

首先,将提供程序和后端配置编写到代码中,然后运行terraform init以创建工作空间。

./main.tf“`
变量 tfc_hostname {
类型 = 字符串
默认值 = “app.terraform.io”
}

变量 tfc_token {
类型 = 字符串
}

terraform {
后端 “remote” {
主机名 = “app.terraform.io” # Terraform Cloud的主机名
组织 = “kuroseets” # 使用的组织

工作区 {
名称 = “tfc-test” # 使用的工作区
}

}
}

Terraform Enterprise提供程序

提供程序 “tfe” {
主机名 = 变量.tfc_hostname
令牌 = 变量.tfc_token
}
“`

当执行terraform init命令时,我认为将会创建一个工作空间,如下所示。

スクリーンショット 2020-09-12 10.43.09.png

Terraform云的工作区设置

スクリーンショット 2020-09-12 11.47.25.png
スクリーンショット 2020-09-12 11.47.36.png

将Organization导入到Terraform管理中

首先,需要准备导入Organization模块。

管理的组织资源 “tfe_organization” “kuroseets” 的管理 { }

$ terraform import tfe_organization.kuroseets kuroseets

tfe_organization.kuroseets: Importing from ID "kuroseets"...
tfe_organization.kuroseets: Import prepared!
  Prepared tfe_organization for import
tfe_organization.kuroseets: Refreshing state... [id=kuroseets]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

如果出现以下错误,请暂时禁用tfe提供程序上的令牌发送:错误:无效的提供程序配置

当完成导入后,参考状态文件来完成资源”tfe_organization”。

スクリーンショット 2020-09-12 12.19.39.png

创建用于测试的工作空间

一旦我们在测试中创建一个工作空间。

./workspaces.tf资源 “tfe_workspace” “test” {
名称 = “测试工作区”
组织 = tfe_organization.kuroseets.name
}

进行土地整治计划

スクリーンショット 2020-09-12 11.46.48.png

当你在本地再次执行terraform plan,你也可以确认代码与差异一致。

将工作区通知发送到Slack。

因为这是一个麻烦的问题,所以让我们在Terraform Cloud的工作区添加一个通知设置,以便在有活动时通知到Slack。

./notifications.tf变量 “slack_hook_url” {
类型 = 字符串
}

数据 “tfe_workspace” “tfc-test” {
名称 = “tfc-test”
组织 = tfe_organization.kuroseets.名称
}

资源 “tfe_notification_configuration” “test_slack” {
名称 = “test-slack”
启用 = true
目标类型 = “slack”
链接 = var.slack_hook_url
工作区ID = data.tfe_workspace.tfc-test.id
触发器 = [
“run:created”,
“run:planning”,
“run:needs_attention”,
“run:applying”,
“run:completed”,
“run:errored”
]
}

スクリーンショット 2020-09-12 13.56.15.png
スクリーンショット 2020-09-12 13.56.52.png
スクリーンショット 2020-09-12 13.59.39.png

可以由Terraform企业提供者进行管理的资源。

根据官方网站所述,目前可以创建的资源如下所示。

    • Organization

 

    • チーム

所属メンバー

メンバー
Workspaces

チームのアクセス権
変数
通知
実行トリガー

VCS

SSH鍵

トークン
共通モジュール

在免费版中无法使用,但似乎已经实现了将Sentinel分配到Workspace的功能。

    • ポリシーセット

変数

总结

在业务中使用Terraform Cloud时,它是一个分离的SaaS,但由于它是一个GUI,我在考虑如何进行版本控制。于是灵机一动,我想到了用代码来进行管理。通过与版本管理系统结合,我能够实现版本控制,并且首先完成了一个目标。另外,由于Terraform Cloud的权限结构相对模糊,代码管理也对于明确界定起到了有效作用。如果有机会再谈这个问题的话,我也想整理一下。现在来谈下一次,我希望在之前的文章中重点讨论如何在Terraform Cloud上使用第三方提供程序。此外,我还计划撰写一篇介绍HashiCorp Sentinel和策略即代码的文章。

相关文章

Terraform Cloud 第一部分 – 从本地执行更改为远程执行
Terraform Cloud 第二部分 – 与Github进行连接(设置VCS和工作目录)
Terraform Cloud 第三部分 – 使用Terraform Cloud来管理Terraform
Terraform Cloud 第四部分 – 关于在工作空间之间共享的封闭空间中使用的模块

广告
将在 10 秒后关闭
bannerAds