You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform File Provisioner问题:文件未写入指定路径求助

Terraform文件复制问题排查与解决

问题原因

  1. 目标路径的scripts是普通文件而非目录:当指定destination = "/home/ec2-user/scripts/set_aws_profile.sh"时,如果EC2实例上的/home/ec2-user/scripts是一个文件,SSH传输工具无法在文件下创建子文件,会直接将内容写入到scripts文件中,而非预期的子文件。
  2. 目标目录不存在:Terraform的file provisioner默认不会自动创建目标路径的上级目录,若/home/ec2-user/scripts目录不存在,部分场景下会将整个路径当作文件名,导致内容写入到scripts文件。

解决方法

1. 预处理:确保目标目录存在并清理异常文件

在file provisioner之前添加remote-exec provisioner,先删除可能存在的同名文件,再创建目标目录:

provisioner "remote-exec" {
  inline = [
    "rm -f /home/ec2-user/scripts",
    "mkdir -p /home/ec2-user/scripts"
  ]
  connection {
    type        = "ssh"
    user        = "ec2-user"
    host        = aws_instance.deployer_server.public_ip
    private_key = tls_private_key.deployer.private_key_openssh
  }
}

2. 修正后的完整代码

resource "null_resource" "copy-set-aws-profile-script" {
  # 预处理:清理异常文件并创建目标目录
  provisioner "remote-exec" {
    inline = [
      "rm -f /home/ec2-user/scripts",
      "mkdir -p /home/ec2-user/scripts"
    ]
    connection {
      type        = "ssh"
      user        = "ec2-user"
      host        = aws_instance.deployer_server.public_ip
      private_key = tls_private_key.deployer.private_key_openssh
    }
  }

  # 复制本地文件到目标路径
  provisioner "file" {
    source      = "${path.module}/scripts/set_aws_profile.sh"
    destination = "/home/ec2-user/scripts/set_aws_profile.sh"

    connection {
      type        = "ssh"
      user        = "ec2-user"
      host        = aws_instance.deployer_server.public_ip
      private_key = tls_private_key.deployer.private_key_openssh
    }
  }

  depends_on = [
    aws_instance.deployer_server,
    aws_key_pair.endava_deployer_ssh_key,
  ]
}

3. 验证步骤

执行terraform apply后,通过SSH登录EC2实例,执行以下命令验证:

# 检查scripts是否为目录
ls -ld /home/ec2-user/scripts
# 检查目标文件是否存在且内容正确
cat /home/ec2-user/scripts/set_aws_profile.sh

内容的提问来源于stack exchange,提问作者mlorand66

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:53:24