2. Terraform环境搭建与云厂商认证
在真正开始用 Terraform 编排云数据库与中间件之前,必须先让 Terraform 具备“能连上云、能操作云”的能力。这一节要完成四件事:安装 Terraform、配置云厂商的 AccessKey/SecretKey、初始化 Provider、验证账号权限与区域可用性。四者缺一不可——Terraform 本身只是执行引擎,真正干活的是它调用的云厂商 Provider,而 Provider 又依赖凭证才能访问云 API。
一、安装 Terraform 与版本约束
Terraform 是单文件二进制工具,安装方式取决于操作系统。以 Linux 为例,最稳妥的做法是下载官方压缩包并放入 PATH:
# 下载并解压(示例版本号,请按需替换)
wget https://releases.hashicorp.com/terraform/1.7.5/terraform_1.7.5_linux_amd64.zip
unzip terraform_1.7.5_linux_amd64.zip -d /usr/local/bin/
# 验证
terraform version
# Terraform v1.7.5
# on linux_amd64
macOS 可用 brew install terraform,Windows 可用 Chocolatey 或直接下载 exe。安装完成后,建议在项目里用 required_version 锁定版本,避免团队协作时因版本差异导致状态文件不兼容:
terraform {
required_version = ">= 1.5.0, < 2.0.0"
}
这里要理解一个关键点:Terraform 核心版本和 Provider 版本是两套独立的版本体系。核心版本决定语法与状态格式,Provider 版本决定能调用哪些云 API、支持哪些资源属性。两者都要约束。
二、配置云厂商 AccessKey / SecretKey
云厂商通过 AccessKey ID 和 AccessKey Secret 识别调用者身份。以阿里云为例,登录 RAM 控制台创建子账号,授予最小必要权限(如 RDS、Redis、Kafka 相关权限),生成一对密钥。绝对不要用主账号密钥,也不要把密钥硬编码进 .tf 文件或提交到 Git。
推荐三种凭证注入方式,按安全性从高到低:
- 环境变量:
export ALICLOUD_ACCESS_KEY="xxx"、export ALICLOUD_SECRET_KEY="yyy",Terraform 会自动读取。 - 共享凭证文件:写入
~/.aliyun/config.json或使用aliyun configure生成 profile。 - 临时 STS Token:适合 CI/CD,配合
ALICLOUD_SECURITY_TOKEN使用,有效期短、风险低。
三、初始化 Provider
Provider 是 Terraform 与云 API 之间的适配层。在配置文件中声明:
terraform {
required_providers {
alicloud = {
source = "aliyun/alicloud"
version = "~> 1.220"
}
}
}
provider "alicloud" {
region = "cn-hangzhou"
}
然后执行 terraform init。这个命令会做三件事:下载 Provider 插件到 .terraform/providers/、初始化后端(本地或远程 state)、生成 .terraform.lock.hcl 锁定 Provider 版本。看到 “Terraform has been successfully initialized!” 才算完成。如果网络受限,可配置 Provider 镜像源加速下载。
四、验证账号权限与区域可用性
初始化成功不代表权限正确。最直接的验证方式是写一个只读的 data source,例如查询可用区:
data "alicloud_zones" "example" {
available_resource_creation = "RDS"
}
output "zones" {
value = data.alicloud_zones.example.zones[*].id
}
执行 terraform plan 和 terraform apply,若返回类似 ["cn-hangzhou-b", "cn-hangzhou-e"] 的列表,说明凭证有效、区域可达、且具备查询权限。若报 InvalidAccessKeyId,是密钥错误;报 Forbidden,是权限不足;报 connect timeout,是网络或区域端点问题。这一步是后续所有数据库与中间件编排的前置门槛。
五、常见问题与排查思路
实际搭建中最容易卡住的不是安装,而是认证。以下是一份可直接对照的排查清单:
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| terraform init 卡住或超时 | Provider 下载源不可达 | 配置镜像源或代理 |
| InvalidAccessKeyId | 密钥拼写错误或已禁用 | 核对 RAM 控制台密钥状态 |
| Forbidden / NoPermission | 子账号缺少对应 Action | 补充 RAM 策略后重试 |
| 区域不存在或不可用 | region 参数写错 | 改为有效区域如 cn-hangzhou |
| state 锁冲突 | 多人同时操作 | 使用远程后端 + 锁机制 |
terraform init、terraform validate、terraform plan 作为每次改动后的固定动作,形成“改配置 → 验证 → 预览 → 应用”的节奏,能大幅降低误操作风险。