云上存量资源管理

1. 为什么要"导入"云上资源? 很多团队都有这样的经历:最开始用控制台点几下、或者用 CLI 脚本把资源建好了,等资源越攒越多、想标准化管理时,发现这些资源"游离"在 Terraform 之外。 Terraform 的管理逻辑很简单:它只认自己 state 文件里记录的资源。你在控制台创建的资源,Terraform 根本"看不见",也不会去动它们。所以要把存量资源管起来,第一步就是"导入"(import)——把云上已有的资源登记进 Terraform 的 state,再补上对应的配置代码。 导入成功后,这些资源和 Terraform 新建的资源享受完全一样的待遇:能 plan、能 apply、能 diff、能进 CI/CD。 2. 先搞清楚两个概念:config 和 state 这是最容易绕晕的地方,务必先分清: 概念 是什么 谁来写 .tf 配置(config) 声明"想要什么",是给人看的声明式代码 手写,或工具自动生成 terraform.tfstate(state) 记录"现在实际是什么",含真实属性(可能有敏感信息) 由 apply / import 自动生成 关键点: 导入只会写 state,不会自动写 config(除非你用 -generate-config-out 或 Terraformer)。 所以完整流程 = 导入进 state + 补齐 config + plan 核对一致,三步缺一不可。 state 含敏感信息,永远不要提交到 git(后面最佳实践会讲远程存储)。 整体流程可以先看这张图: flowchart TD A[盘点存量资源: 类型 / ID / 地域] --> B[环境准备: Terraform + provider + RAM 凭证] B --> C{资源量多少?} C -->|少| D[import block / terraform import] C -->|多| E[aliterraformer 批量导入] D --> F[生成 config + state] E --> F F --> G[terraform plan 核对无漂移] G --> H[清理只读属性 + 纳入 git + OSS 远程 state] 3. 三种导入方式怎么选 阿里云官方文档提供了三种方式,直接放对比表: ...

September 3, 2026

内置函数

写 Terraform 配置的时候,你肯定遇到过这些场景: 想把几个字符串拼起来 想从一个列表里取第一个元素 想根据条件选不同的值 想读取一个 JSON 配置文件 Terraform 内置了 100+ 个函数,覆盖了字符串处理、集合操作、类型转换、编码解码等各种需求。掌握它们,你的 HCL 代码会从"能跑"变成"优雅"。 本文挑出最常用的 20 个函数,每个都配上可直接运行的 demo,最后附上最佳实践。 1. 字符串函数 1.1. format() — 格式化字符串 类似其他语言的 sprintf,用占位符拼接字符串。 locals { env = "prod" region = "cn-hangzhou" # 输出: "prod-cn-hangzhou-01" name = format("%s-%s-01", local.env, local.region) } 1.2. join() — 用分隔符拼接列表 locals { tags = ["web", "nginx", "frontend"] # 输出: "web,nginx,frontend" csv = join(",", local.tags) } 1.3. split() — 按分隔符拆分字符串 locals { str = "10.0.0.1,10.0.0.2,10.0.0.3" # 输出: ["10.0.0.1", "10.0.0.2", "10.0.0.3"] ips = split(",", local.str) } 1.4. replace() — 替换子串 locals { name = "my-project-dev" # 输出: "my-project-prod" new = replace(local.name, "dev", "prod") } 1.5. trimprefix() / trimsuffix() — 去掉前缀/后缀 locals { domain = "www.example.com" # 输出: "example.com" base = trimprefix(local.domain, "www.") } 1.6. upper() / lower() / title() — 大小写转换 locals { env = "production" # 输出: "PRODUCTION" tag = upper(local.env) } 2. 集合函数(列表 / 映射 / 集合) 2.1. length() — 获取长度 locals { zones = ["cn-hangzhou-a", "cn-hangzhou-b", "cn-hangzhou-c"] count = length(local.zones) # 输出: 3 } 2.2. element() — 按索引取值(会循环) locals { zones = ["a", "b"] # 索引 2 超出长度,自动取模 → 回到索引 0 # 输出: "a" zone = element(local.zones, 2) } 💡 和直接 local.zones[2] 不同,element() 不会报错,适合循环创建资源时分配可用区。 ...

September 3, 2026

Terrafrom 基础篇

1. 简介 Terraform 是一款开源的“基础设施即代码(Infrastructure as Code,IaC)”工具,由 HashiCorp 公司开发(创始人为 Mitchell Hashimoto)。它的核心作用是用人类可读的配置文件来安全、高效地构建、变更和版本化管理云上和本地的各类基础设施。 它的主要特点包括: 基础设施即代码:用高阶配置语法描述基础设施,便于版本控制、复用和共享。 声明式语言:用户只需描述期望的基础设施最终状态,工具自动处理依赖关系和部署顺序;配置语言使用 HCL(也支持 JSON)。 执行计划:在真正执行前会生成操作计划,避免意外变更。 资源图:构建资源依赖图并并行处理相互独立的资源。 多云支持:可与 AWS、Azure、Google Cloud、阿里云等主流云平台集成。 典型的工作流程包括初始化(terraform init)、生成计划(terraform plan)和应用(terraform apply)三个阶段。Terraform 侧重于定义和管理基础设施结构,常与 Ansible 等侧重于配置管理的工具搭配使用。 2. 核心概念 2.1. 基础架构即代码 (IaC) Terraform 允许使用配置文件(而非手动操作或脚本)来定义和管理基础设施。这使基础设施可以像应用程序代码一样进行版本控制、测试和协作。 2.2 HCL HCL 全称 HashiCorp Configuration Language,是 Terraform 使用的一种特定于域的专用语言,专为基础设施管理设计: 语法简单易学,比 JSON 和 ARM 模板更直观 支持变量、条件表达式和函数 提供类型安全和 IntelliSense 支持(在 VS Code 等编辑器中) 2.3. Providers Provider 是云厂商提供并维护的一个能与云厂商 API 进行交互的插件,其中包含相关资源和数据源对象。Terraform 可以通过 Provider 来管理基础设施。常用的 Providers 有: AzureRM:管理 Azure 资源 AWS:管理 AWS 服务 Kind:使用 Kind 管理 kubernetes 集群 Docker:管理容器资源 其他支持的云平台和 SaaS 服务 2.4. 状态文件 (State File) Terraform 会跟踪基础设施的当前状态,包括,组件配置,资源之间的依赖关系等,通过比对配置文件与状态文件,确定需要实施哪些变更。 ...

September 3, 2026