Terraform—基础设施即代码(Iac)

2023-10-23 17:47:25 浏览数 (3)

简介

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"

0 人点赞