terraform简明使用(腾讯云)

terraform简明使用(腾讯云)

Terraform - 一种基础设施即代码工具

Terraform简介

HashiCorp Terraform是一个IT基础架构自动化编排工具,可以用代码来管理维护IT资源。它编写了描述云资源拓扑的配置文件中的基础结构,例如虚拟机、存储账户和网络接口。Terraform的命令行接口(Command Line Interface,CLI)提供一种简单机制,用于将配置文件部署到AWS或其他任意支持的云上,并对其进行版本控制。它的目标是 "Write, Plan, and create Infrastructure as Code", 基础架构即代码。Terraform 几乎可以支持所有市面上能见到的云服务。具体的说就是可以用代码来管理维护 IT 资源,把之前需要手动操作的一部分任务通过程序来自动化的完成,这样的做的结果非常明显:高效、不易出错。1

安装

HashiCorp Terraform在github开源,地址是https://github.com/hashicorp/terraform ,我们可以下载git仓库,从源代码编译安装(需要git、golang环境、和能够下载golang依赖包的网络)。

git version 2.30.2
go version go1.20.6 linux/amd64

编译安装

1
2
3
4
5
6
7
8
# 下载git仓库,此处可按需切换版本
git clone https://github.com/hashicorp/terraform.git
cd terraform
# 可以使用仓库里的构建脚本,会构建各种系统的可执行程序,并自动安装到当前系统GOPATH下的bin下,时间较慢
./scripts/build.sh
# 手动编译,编译完会在当前目录生成当前系统的可执行程序
go build
cp ./terraform /usr/local/bin/

验证是否安装成功

执行以下命令,查看是否安装成功
terraform version
返回信息如下所示(版本号可能存在差异),则表示安装成功。

Terraform v1.6.0-dev
on linux_amd64

Terraform核心工作流2

Terraform核心工作流包括三个阶段:

write:即定义资源(在以.tf配置文件中定义和预编排依赖资源,用于Terraform加载和解析,这个文件称之为“Terraform模板”或者“Configuration”。),这些资源可以是横跨多个云提供商和服务。
init:通过丰富的Providers来管理多种类型的资源,像是插件一样,如GCP、Docker、Kubernetes等。
plan:是Terraform创建的一个执行计划,描述它将基于现有基础设施和配置文件进行创建、更新或销毁基础设施。
apply:在确认执行计划后,Terraform将按照正确的顺序执行预定义操作,并保持任何资源之前的依赖性。例如,如果更新VPC的属性并需要更改该VPC中的虚拟机数量,那么Terraform将在缩放虚拟机之前重新创建VPC。
destroy:销毁资源。

使用Terraform在腾讯云开两台云主机3

Terraform 通过Provider来完成对基础设施资源的管理的。各云提供商可能有所不通,具体可查官方provider手册。
使用Terraform在腾讯云开两台云主机,此步骤可参照

这里贴出我的配置
tree

1
2
3
4
5
.
├── main.tf
└── provider.tf

1 directory, 2 files

cat provider.tf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
terraform {
required_providers {
tencentcloud = {
source = "tencentcloudstack/tencentcloud"
# 通过version指定版本
version = ">=1.81.14"
}
}
}

provider "tencentcloud" {
secret_id = "my-secret-id"
secret_key = "my-secret-key"
region = "ap-guangzhou"
}

cat main.tf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
data "tencentcloud_images" "my_favorite_image" {
image_type = ["PUBLIC_IMAGE"]
os_name = "centos"
}

data "tencentcloud_instance_types" "my_favorite_instance_types" {
filter {
name = "instance-family"
values = ["S2"]
}

cpu_core_count = 2
memory_size = 2
}

data "tencentcloud_availability_zones" "my_favorite_zones" {
}

// Create VPC resource
resource "tencentcloud_vpc" "app" {
cidr_block = "10.0.0.0/16"
name = "awesome_app_vpc"
}

resource "tencentcloud_subnet" "app" {
vpc_id = tencentcloud_vpc.app.id
availability_zone = data.tencentcloud_availability_zones.my_favorite_zones.zones.0.name
name = "awesome_app_subnet"
cidr_block = "10.0.1.0/24"
}


// Create 2 CVM instances to host awesome_app
resource "tencentcloud_instance" "my_awesome_app" {
instance_name = "awesome_app"
availability_zone = data.tencentcloud_availability_zones.my_favorite_zones.zones.0.name
image_id = data.tencentcloud_images.my_favorite_image.images.0.image_id
instance_type = data.tencentcloud_instance_types.my_favorite_instance_types.instance_types.0.instance_type
system_disk_type = "CLOUD_PREMIUM"
system_disk_size = 50
hostname = "user"
project_id = 0
vpc_id = tencentcloud_vpc.app.id
subnet_id = tencentcloud_subnet.app.id
count = 2

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

tags = {
tagKey = "tagValue"
}
}

开始部署

  1. terraform init初始化,下载对应provider
    初始化
  2. terraform plan查看部署计划
  3. terraform apply开始部署
    部署完成
    可以在腾讯云控制台查看创建的资源
    创建的VPC
    创建的CVM
  4. 销毁资源
    销毁完成

参考链接

评论