简介
IAC(基础设施即代码),是指通过编写代码来进行基础设施的定义,部署,更新与销毁。让基础设施的变更同代码一样,具有版本控制的能力,同时可以通过codeReview 进行审阅,保障其可靠性与一致性。只需要做好基础设施可变与不可变部分的划分,即可通过流水线工具及相关策略对可变部分进行动态调整,完成基础设施的自动化编排与管理。
Terraform 是 Hashicorp 公司开源的一种多云资源编排工具。使用者通过一种特定的配置语言(HCL, Hashicorp Configuration Language)来描述基础设施, 由 Terraform 工具统一解析,构建资源之间的关系,生成执行计划,调用各家云厂商的具体实现来完成整个基础设施生命周期的管理。
原理
Terraform 通过插件( Plugin = Provider Provisioner ) 进行多种基础设施资源的管理与编排,其中每个 provider 都是独立进程, 可以保证多云场景下的相互隔离。Terraform 通过自研的 go - plugin 调用 providers, provider 通过 https 调用各平台 sdk 实现资源的创建, 更新与销毁 。插件隐藏了 API 调用细节,以便直接使用 terraform 命令完成平台资源的 curd 操作。
Terraform 目前支持超过 1900 种 provider ,包括熟知的 Tencent Cloud,Alibaba Cloud,Kubernetes 等,可通过 Browse Provider 进行查询,且大多数云平台的 Provider 均维护了详细的 Terraform 资源文档,提供 HCL 编写范例, 降低了引入 Terraform 带来的 HCL 语言学习成本。
使用
常见的 terraform 命令有初始化(init)、 静态检查(validate)、资源状态同步(refresh)、生成执行计划(plan)、执行编排(apply)等。
Terraform 使用 HCL 语言进行声明,同时兼容 JSON 格式。因此 Terraform 可识别的文件类型必须是 .tf 或 .tf.json ,详见 HCL 语法文档。
Terraform会将整个资源部署情况更新在 *.tf.state 文件中,让用户在前端控制台和后端平台都清晰的把控自己的云资源。
示例
在新目录下创建 provider.tf 文件,填入秘钥和区域信息
代码语言:javascript复制terraform {
required_providers {
tencentcloud = {
source = "tencentcloudstack/tencentcloud"
version = "1.60.5"
}
}
}
provider "tencentcloud" {
secret_id = "*******"
secret_key = "*******"
region = "*******"
}
保存该文件,执行 terraform init 初始化Terraform。
此步骤,Terraform会自动检测 provider.tf 文件中的 provider 字段,发送请求到Terraform官方GitHub下载最新版本腾讯云资源的模块和插件
同时,可以通过 terraform plan 预览将要完成的操作,准备好创建资源后,可以通过 terraform apply 进行资源部署。
下面提供一个创建腾讯云对象存储(COS)存储桶的实际用例。
创建实例资源文件
代码语言:javascript复制resource "tencentcloud_cos_bucket" "mycos" {
bucket = "mycos-1251762279"
acl = "private"
}
resource "tencentcloud_cos_bucket_object" "myobject" {
bucket = tencentcloud_cos_bucket.mycos.bucket
key = "new_object_key"
content = "the content that you want to upload."
}
这里可以看到,上传文件至存储桶没有直接填写具体参数信息,而是引用 "tencentcloud_cos_bucket.mycos.bucket"
。