Terraform null_resource
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| ID | Identifier | 标识符 |
用途#
Null provider 的 null_resource 不创建真实基础设施,常见于旧项目,用于承载 provisioner。Terraform 1.4+ 的新配置通常优先使用 terraform_data。
示例#
运行环境需要 Bash;修改 revision 会替换资源并重新执行命令。
terraform {
required_providers {
null = {
source = "hashicorp/null"
version = "~> 3.0"
}
}
}
variable "revision" {
type = string
default = "v1"
}
resource "null_resource" "release" {
triggers = {
revision = var.revision
}
provisioner "local-exec" {
interpreter = ["bash", "-c"]
command = "printf 'Release: %s\n' \"$REVISION\""
environment = {
REVISION = self.triggers.revision
}
}
}与 terraform_data 对照#
| 项目 | null_resource | terraform_data |
|---|---|---|
| Provider | 安装 hashicorp/null |
内置,无需下载 |
| 替换触发参数 | triggers,字符串 map |
triggers_replace,支持任意值类型 |
| 保存业务数据 | 通常借用 triggers,变化就替换 |
input / output,可单独更新 |
注意事项#
triggers变化会替换资源;命令文本变化本身不会触发重跑。- 不使用
timestamp()强制每次运行;以版本号、脚本哈希或资源 ID 表达触发条件。 - Terraform 不追踪脚本造成的外部变化,销毁此资源也不会自动撤销脚本操作。
- 现有资源迁移不能只改类型名称;需结合 Terraform 版本处理 state,并检查 plan 是否会再次执行命令。