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 clone https://github.com/hashicorp/terraform.git cd terraform./scripts/build.sh go build cp ./terraform /usr/local/bin/
验证是否安装成功 执行以下命令,查看是否安装成功terraform version 返回信息如下所示(版本号可能存在差异),则表示安装成功。
Terraform v1.6.0-dev on linux_amd64
Terraform核心工作流包括三个阶段:
write:即定义资源(在以.tf配置文件中定义和预编排依赖资源,用于Terraform加载和解析,这个文件称之为“Terraform模板”或者“Configuration”。),这些资源可以是横跨多个云提供商和服务。 init:通过丰富的Providers来管理多种类型的资源,像是插件一样,如GCP、Docker、Kubernetes等。 plan:是Terraform创建的一个执行计划,描述它将基于现有基础设施和配置文件进行创建、更新或销毁基础设施。 apply:在确认执行计划后,Terraform将按照正确的顺序执行预定义操作,并保持任何资源之前的依赖性。例如,如果更新VPC的属性并需要更改该VPC中的虚拟机数量,那么Terraform将在缩放虚拟机之前重新创建VPC。 destroy:销毁资源。
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" } }
开始部署
terraform init初始化,下载对应provider
terraform plan查看部署计划
terraform apply开始部署 可以在腾讯云控制台查看创建的资源
销毁资源
参考链接