跳到主要内容

3.terraform使用案例-创建腾讯云资源

安装terraform

要使用Terraform,您需要安装它。HashiCorp将Terraform作为二进制包分发。您还可以使用流行的包管理器安装Terraform。

预编译

通过下载预编译的二进制文件或从源代码编译来检索 terraform 二进制文件。要安装 Terraform,请找到适合您系统的软件包并将其下载为 zip 存档。

下载 Terraform 后,解压缩包。Terraform 作为名为 terraform 的单个二进制文件运行。最后,确保 terraform 二进制文件在您的 PATH 上可用。此过程将因操作系统而异。

  • mac
    • echo $PATH
    • mv ~/Downloads/terraform /usr/local/bin/
  • windows

Homebrew for mac

Homebrew是适用于Mac OS X的免费开源软件包管理系统。 从终端安装官方的Terraform。

首先,安装 HashiCorp tap,这是我们所有自制软件包的存储库。

 brew tap hashicorp/tap

现在,使用 hashicorp/tap/terraform 安装 Terraform。

 brew install hashicorp/tap/terraform

验证安装

通过打开新的终端会话并列出 Terraform 的可用子命令来验证安装是否有效。

 terraform -help
Usage: terraform [-version] [-help] <command> [args]

The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.
#...

实验目标

安装 Terraform 后,您就可以创建第一个基础结构了。在本教程中,您将在腾讯云上安装 cvm 实例。

先决条件

  • 安装 terraform cli
  • 有一个腾讯云 id和key

写入配置

用于描述 Terraform 中的基础结构的文件集称为 Terraform 配置。您将编写第一个配置来定义单个 腾讯云 cvm 实例。

每个 Terraform 配置都必须位于其自己的工作目录中。为您的配置创建一个目录。

mkdir tecentform-tecent
cd tecentform-tecent
touch main.tf

在文本编辑器中打开 main.tf ,粘贴下面的配置,然后保存文件。

terraform {
required_providers {
tencentcloud = {
source = "tencentcloudstack/tencentcloud"
}
}
}

# Configure the TencentCloud Provider
provider "tencentcloud" {
secret_id = "AKI************"
secret_key = "Tl*************"
region = "ap-shanghai"
}

resource "tencentcloud_vpc" "foo" {
name = "ci-temp-test-updated"
cidr_block = "10.0.0.0/16"
dns_servers = ["119.29.29.29", "8.8.8.8"]
is_multicast = false

tags = {
"test" = "test"
}
}
  • terraform {} 块包含 Terraform 设置

    包括 Terraform 将用于预配基础结构的provider。对于每个provider, source 属性定义可选的主机名、命名空间和 provider 类型。默认情况下,Terraform 从 Terraform 注册表安装 provider。在此示例配置中, 腾讯云 provider 的 source 定义为 tencentcloudstack/tencentcloud

  • provider {} 块是 Terraform 用于创建和管理资源的插件

    在本例中为 tencentcloud ,您可以在 Terraform 配置中使用多个 provider 来管理来自不同提供程序的资源

  • resource {} 块定义基础结构的组件。资源可以是物理或虚拟组件(如 cvm 实例),也可以是逻辑资源(如 Heroku 应用程序)。

    资源块前有两个字符串:资源类型和资源名称。在此示例中,资源类型为 aws_instance ,名称为 app_server 。类型的前缀映射到提供程序的名称。在示例配置中,Terraform 使用 aws 提供程序管理 aws_instance 个资源。资源类型和资源名称共同构成资源的唯一 ID。例如,EC2 实例的 ID 为 aws_instance.app_server 。

初始化目录

使用 terraform init 初始化目录,初始化配置目录将下载并安装配置中定义的 provider ,在本例中为 tecent provider

Terraform 下载 tecent provider 并将其安装在当前工作目录的隐藏子目录中,名为 .terraform 。 terraform init 命令打印出安装了哪个版本的提供程序。Terraform 还会创建一个名为 .terraform.lock.hcl 的锁定文件,该文件指定使用的确切提供程序版本,以便您可以控制何时更新用于项目的提供程序。

创建基础设施

现在使用 terraform apply 命令应用配置。Terraform 将打印类似于如下所示的输出。

输出格式类似于 Git 等工具生成的差异格式。输出在+ resource "tencentcloud_vpc" "foo" 旁边有一个 + ,这意味着 Terraform 将创建此资源。在此之下,它显示了将要设置的属性。当显示的值为 (known after apply) 时,表示在创建资源之前不会知道该值。

您现在已经使用 Terraform 创建了基础设施!访问 vpc 控制台并找到您的新 vpc 实例。

接着我们创建 subnet ,在 main.tf 中加入创建 subnet 的声明语句 ,并定义一个常量,指定我们的可用区为上海4区

// main.tf
variable "availability_zone" {
default = "ap-shanghai-4"
}

resource "tencentcloud_subnet" "foo" {
vpc_id = tencentcloud_vpc.foo.id
availability_zone = var.availability_zone
name = "awesome_app_subnet"
cidr_block = "10.0.1.0/24"
}

运行 terraform plan ,类似于 dry run ,我们可以看到变更预览

确认无误后,我们可以再次运行 terraform apply

我们切换到腾讯云控制台,可以看到 terraform 为我们创建了一个 subnet

继续创建云主机 ,在main.tf 中加入创建 cvm 的声明语法

data "tencentcloud_instance_types" "foo" {
availability_zone = "ap-shanghai-4"
cpu_core_count = 2
memory_size = 4
}

// Create 2 CVM instances to host awesome_app
resource "tencentcloud_instance" "my_awesome_app" {
instance_name = "awesome_app"
availability_zone = var.availability_zone
image_id = "img-eb30mz89"
instance_type = data.tencentcloud_instance_types.foo.instance_types.0.instance_type
system_disk_type = "CLOUD_PREMIUM"
system_disk_size = 50
hostname = "user"
project_id = 0
vpc_id = tencentcloud_vpc.foo.id
subnet_id = tencentcloud_subnet.foo.id
count = 2

data_disks {
data_disk_type = "CLOUD_PREMIUM"
data_disk_size = 50
encrypt = false
}

tags = {
tagKey = "tagValue"
}
}

确认无误后,我们可以再次运行 terraform apply

打开腾讯云控制面板,我们可以看到,terraform 为我们创建了两台云主机

清理

运行 terraform destroy 清理之前创建的资源

tencentcloud_instance.my_awesome_app[1]: Destroying... [id=ins-4be0fapt]
tencentcloud_instance.my_awesome_app[1]: Destruction complete after 6s
tencentcloud_subnet.foo: Destroying... [id=subnet-k1ggh31v]
tencentcloud_subnet.foo: Still destroying... [id=subnet-k1ggh31v, 10s elapsed]
tencentcloud_subnet.foo: Still destroying... [id=subnet-k1ggh31v, 20s elapsed]
tencentcloud_subnet.foo: Still destroying... [id=subnet-k1ggh31v, 30s elapsed]
tencentcloud_subnet.foo: Destruction complete after 38s
tencentcloud_vpc.foo: Destroying... [id=vpc-d57wfop8]
tencentcloud_vpc.foo: Destruction complete after 1s

Destroy complete! Resources: 3 destroyed.

总结

使用 terraform 能够让我们很方便的创建云资源,一键开启一键销毁成为现实,且能够自动帮我们协调各资源启动依赖顺序,同学们可以自己去试试啦!我将 main.tf 放到 github.com/mouuii/terraform-example 上了