Terraform file Provisioner

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
ID Identifier 标识符
SCP Secure Copy Protocol 安全复制协议,用于远程传输文件
SSH Secure Shell 安全远程登录协议
WinRM Windows Remote Management Windows 远程管理

用途#

通过 SSH / WinRM 将执行端的文件或目录上传到目标机器。与管理本地文件的 Local provider 不同。

示例#

需要 Terraform 1.4+、可访问的 Linux 主机和已加载密钥的 SSH agent。远端需支持 SCP,连接用户需有 /tmp 写权限。将待上传文件保存为 app.conf,与 main.tf 放在同一目录。

terraform {
  required_version = ">= 1.4.0"
}

variable "host" {
  type = string
}

variable "ssh_user" {
  type = string
}

variable "ssh_host_key" {
  type = string
}

resource "terraform_data" "config" {
  triggers_replace = [var.host, filesha256("${path.module}/app.conf")]

  connection {
    type     = "ssh"
    host     = var.host
    user     = var.ssh_user
    agent    = true
    host_key = var.ssh_host_key
    timeout  = "5m"
  }

  provisioner "file" {
    source      = "${path.module}/app.conf"
    destination = "/tmp/app.conf"
  }
}

在 terraform.tfvars 设置 host、ssh_user、可信渠道取得的 ssh_host_key,执行 terraform init、terraform plan,审查后 terraform apply。文件内容变化会触发资源替换并重新上传。

注意事项#

  • source 与 content 二选一:前者传文件或目录,后者直接传字符串。
  • SSH 目录上传前需确保目标目录存在;source = "conf" 会复制目录本身,source = "conf/" 复制目录内的内容。
  • 上传不会自动获得 sudo 权限;受限目录可先上传到临时位置,再由后续 remote-exec 安装并设置权限。
  • 主机由 Terraform 创建时,应引用其地址,并将主机 ID 加入触发条件,覆盖地址不变的主机替换。
  • 不持续检查远端文件漂移;销毁 terraform_data 也不会自动删除上传的文件。

参考#

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭