Terraform local-exec
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| CI | Continuous Integration | 持续集成 |
用途#
在运行 Terraform 的机器上执行命令。CI 中的“本地”指 runner,远程执行模式下指远程 worker。
示例#
以下配置需要 Terraform 1.4+ 和 Bash。保存为 main.tf。
terraform {
required_version = ">= 1.4.0"
}
variable "release_version" {
type = string
default = "v1"
}
resource "terraform_data" "release" {
triggers_replace = [var.release_version]
provisioner "local-exec" {
working_dir = path.module
interpreter = ["bash", "-c"]
command = "printf 'Release: %s\n' \"$RELEASE_VERSION\""
environment = {
RELEASE_VERSION = var.release_version
}
}
}terraform init
terraform plan
terraform apply
# 修改版本,替换 terraform_data 并重新执行命令。
terraform apply -var='release_version=v2'首次创建时打印版本;输入不变时再次 apply 不执行命令。实际使用时可将 command 改为脚本调用;需要跟踪脚本变更时,将 filesha256("${path.module}/scripts/release.sh") 加入 triggers_replace,文件须提前存在。
注意事项#
- 执行端必须具备命令依赖、认证信息和网络权限,
working_dir指向的目录必须存在。 - 参数通过
environment传递并在 shell 中加引号,避免将不可信输入直接插入command。 - 引用上游资源属性可建立依赖;仅执行顺序有依赖时使用
depends_on。资源创建完成不代表应用已就绪。 - 保留默认
on_failure = fail;continue会忽略错误,可能留下未完成的操作。 - 生成需要由 Terraform 管理的文件时,优先使用 Local provider 的文件资源。