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

Terraform在RDS执行SQL脚本时提示文件不存在如何配置路径

修复方案

你当前配置有两处问题,分别对应路径报错和后续命令执行错误:

1. local_file路径拼接错误

${path.module}返回当前Terraform配置文件所在目录的绝对路径,末尾不会自带路径分隔符/,你当前写的"${path.module}../infra-main/db.sql"会被解析为类似/your/project/path../infra-main/db.sql的非法路径,自然会提示文件不存在。
正确写法需要补全路径分隔符:

data "local_file" "sql_script" {
  filename = "${path.module}/../infra-main/db.sql"
}

路径校验技巧:可以临时加一个输出字段打印解析后的完整路径,执行terraform plan即可看到结果,和实际文件存放路径比对即可快速定位路径问题:

output "debug_sql_path" {
  value = "${path.module}/../infra-main/db.sql"
}

2. mysql执行命令写法错误

shell中<重定向符后面要求传入文件路径,你当前写的${data.local_file.sql_script.content}是读取到的SQL文件文本内容,不是路径,即使路径修对了,这里执行也会报错。
两种修复方式可选:

  • 优先选:直接传文件路径,不需要额外读取文件内容,规避长文本、特殊字符转义问题
resource "null_resource" "setup_db" {
  depends_on = [aws_db_instance.grafana-db]
  provisioner "local-exec" {
    command = "mysql -u ${var.username} -p${var.password} -h ${aws_db_instance.grafana-db.address} < ${path.module}/../infra-main/db.sql"
  }
}
  • 如果确实需要读取文件内容传入,用-e参数接收SQL文本,不要用重定向
data "local_file" "sql_script" {
  filename = "${path.module}/../infra-main/db.sql"
}

resource "null_resource" "setup_db" {
  depends_on = [aws_db_instance.grafana-db]
  provisioner "local-exec" {
    command = "mysql -u ${var.username} -p${var.password} -h ${aws_db_instance.grafana-db.address} -e \"${data.local_file.sql_script.content}\""
  }
}

项目目录结构参考:
项目目录截图


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 21:01:02