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

从本地迁移至Terraform Cloud遇文件引用错误求助

Terraform Cloud中file()函数找不到同目录文件的解决方案

问题核心

Terraform Cloud完全支持file()引用同目录文件,报错的根本原因是以下两点之一:

  • user-data-server.sh未被提交到GitLab代码库
  • 相对路径引用受执行环境工作目录影响,定位不准确

错误信息

on ../modules/instances/instance.tf line 32, in resource "aws_instance" "server":
user_data = file("user-data-server.sh")
while calling file(path)
Invalid value for "path" parameter: no file exists at "user-data-server.sh"; this function works only with files that are distributed as part of the configuration source code, so if this file will be created by a resource in this configuration you must instead obtain this result from an attribute of that resource.

解决方案

1. 确认文件已提交至GitLab

Terraform Cloud执行时只会拉取GitLab仓库中已提交的代码,本地存在但未加入版本控制的文件不会被同步:

  • 进入模块目录../modules/instances/,执行git status检查user-data-server.sh是否在已追踪文件列表中
  • 如果未追踪,执行git add user-data-server.sh、git commit -m "Add user-data script",再推送到GitLab

2. 使用path.module构建可靠路径

即使文件已提交,相对路径可能因Terraform Cloud的工作目录与本地不同出现定位问题,改用Terraform内置的path.module变量可以确保跨环境路径一致:
修改instance.tf中的user_data字段:

resource "aws_instance" "server" {
  ami           = var.aws_ami_id
  subnet_id     = "${element(var.public_subnet.*.id, 3)}"
  key_name      = var.ec2_key_pair
  instance_type = "t2.micro"
  vpc_security_group_ids = [var.aws_security_group.main-sg.id]
  associate_public_ip_address = true
  # 使用path.module定位同目录文件
  user_data       = file("${path.module}/user-data-server.sh")

  tags = {
    Name = "Server"
  }
}

path.module会自动指向当前Terraform模块的根目录,无论在本地还是Terraform Cloud执行,都能准确找到同目录下的user-data-server.sh

3. 验证步骤

  • 提交修改后的代码到GitLab
  • 在Terraform Cloud重新触发plan/apply操作,确认错误消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:37:17