Terraform基础设施即代码实战:云资源编排与状态管理方案

基础设施即代码IaC)的核心是让云资源像应用代码一样被声明、评审、版本化。Terraform是目前应用最广的IaC工具,通过HCL语言声明资源最终状态,再由provider自动完成创建、更新、销毁。本文从工作流、资源编排、状态文件管理和变更控制四个维度说明落地方法。

Terraform工作流:声明、计划、应用

Terraform的工作流程固定在三个命令:terraform init加载provider插件;terraform plan读取配置并与真实状态比对,生成变更计划,变更清单在apply之前完整展示,这是它比脚本化创建更安全的关键;terraform apply执行变更。销毁使用terraform destroy,但正式环境要设置protect与删除保护,避免误操作清空生产资源。

# 简单的主机声明示例(以阿里云为例)
provider "alicloud" {
  region = "cn-hangzhou"
}

resource "alicloud_instance" "web" {
  instance_name = "prod-web-01"
  instance_type = "ecs.g7.large"
  image_id      = "aliyun_2_1903_x64_20G_alibase"
  vswitch_id    = alicloud_vswitch.main.id
  security_groups = [alicloud_security_group.web.id]
}

resource "alicloud_security_group" "web" {
  name = "prod-web-sg"
  rules = [
    { port = 80,   cidr = "0.0.0.0/0" },
    { port = 22,   cidr = "10.0.0.0/8" }
  ]
}

资源的声明顺序不代表执行顺序,Terraform通过依赖图解析资源间的引用关系,alicloud_instance.web里的vswitch_id与security_groups引用了其他资源的属性,plan阶段会自动排序执行。

状态文件管理:多人协作的安全底座

terraform.state记录资源ID与实际属性的映射,是Terraform的命脉。默认存本地terraform.tfstate文件,多人协作时必须迁移到远程后端,推荐对象存储加版本控制,配合后端自带锁,才能避免两人同时执行导致状态错乱。常见配置:

terraform {
  backend "s3" {
    bucket         = "tf-state-prod"
    key            = "prod/network.tfstate"
    region         = "ap-northeast-1"
    encrypt        = true
    dynamodb_table = "tf-lock"
  }
}

状态文件里的属性可能包含敏感字段,开启加密存储、限制桶策略仅允许运维账号读写,同时配置state校验、必要时用terraform state list、terraform state rm等命令进行状态手术,所有状态操作要遵循变更评审流程。

资源变更与风险控制

生产变更风险集中在两个环节:其一,Terraform删掉手改的资源,一旦资源脱离管理,必须用terraform import把资源纳入状态,直接重写会重建;其二,磁盘、数据库等有状态资源,变更计划会提示销毁重建,此时在resource上配置lifecycle的prevent_destroy属性。

resource "alicloud_db_instance" "db" {
  lifecycle {
    prevent_destroy = true
  }
}

terraform plan生成的变更清单要纳入代码评审,实施变更先在staging环境验证,生产环境apply前用-drive-run预演,配合CI流水线自动化发布,同时保留历史版本以便回滚。

模块化与团队规范落地

规模变大后,把共享资源抽成模块(module),模块内保持输入输出契约稳定。目录结构按环境拆,prod/staging/dev各自独立后端,避免跨环境状态污染。标签规范统一,便于成本分摊。团队内约定provider版本锁定、terraform版本约束,防止不同机器生成不同的变更计划。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/terraform-ji-chu-she-shi-ji-dai-ma-shi-zhan-yun-zi-yuan/

(0)
小编小编
上一篇 1天前
下一篇 1天前

相关推荐