Terraform remote-exec
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| ID | Identifier | 标识符 |
| SCP | Secure Copy Protocol | 安全复制协议,用于远程传输文件 |
| SSH | Secure Shell | 安全远程登录协议 |
| WinRM | Windows Remote Management | Windows 远程管理 |
用途#
通过 SSH 或 WinRM 在目标机器执行命令。适用于无法通过镜像、cloud-init 或配置管理工具完成的少量初始化操作。
示例#
以下配置需要 Terraform 1.4+、可访问的 Linux 主机和已加载密钥的 SSH agent。远端需支持 SCP、允许上传并执行临时脚本。保存为 main.tf。
terraform {
required_version = ">= 1.4.0"
}
variable "host" {
type = string
}
variable "ssh_user" {
type = string
}
variable "ssh_host_key" {
type = string
description = "Trusted SSH host public key or signing CA public key"
}
variable "bootstrap_revision" {
type = string
default = "v1"
}
resource "terraform_data" "bootstrap" {
triggers_replace = [var.host, var.bootstrap_revision]
connection {
type = "ssh"
host = var.host
user = var.ssh_user
agent = true
host_key = var.ssh_host_key
timeout = "5m"
}
provisioner "remote-exec" {
inline = [
"set -eu",
"mkdir -p \"$HOME/app\"",
"touch \"$HOME/app/.initialized\"",
]
}
}在 terraform.tfvars 中设置 host、ssh_user、ssh_host_key 后运行:
terraform init
terraform plan
terraform apply首次创建时执行命令;主机地址或 bootstrap_revision 变化时重跑。如果主机由同一配置创建,应引用其地址属性,并把主机资源 ID 加入 triggers_replace,确保主机替换后重新初始化。
注意事项#
inline、script、scripts三选一;后两者指定执行端的脚本路径,Terraform 上传后执行。inline合并为一个脚本;示例的set -eu使普通命令失败时及时退出。- SSH 默认不校验主机密钥;示例显式设置
host_key,其值应从可信渠道取得。 timeout控制连接等待时间,不是远程命令的执行超时。- 连接成功不代表 cloud-init 或应用已就绪;命令需按目标服务增加就绪检查。
- 修改命令本身不会自动重跑,应更新
bootstrap_revision或用脚本哈希作为触发条件。