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

Terraform调用模块创建S3静态网站报找不到index.html文件错误

Terraform自定义模块创建S3静态网站时报文件找不到错误排查

报错信息

Error: Error opening S3 bucket object source (index.html): open index.html: The system cannot find the file specified.

项目目录结构

  • Terraform
    • My-Module
      • main.tf
      • index.html
    • Use-My-Module
      • c1-main.tf

现有配置

My-Module/main.tf

resource "aws_s3_bucket" "mybucket" {
  bucket = "tf-static-web-test"
  force_destroy = true
}

resource "aws_s3_bucket_acl" "bucket-acl" {
  acl = "public-read"
  bucket = aws_s3_bucket.mybucket.id
}

resource "aws_s3_bucket_policy" "bucket-policy" {
  bucket = aws_s3_bucket.mybucket.id
  policy = "..."
}

resource "aws_s3_bucket_object" "s3object" {
  bucket = aws_s3_bucket.mybucket.id
  content_type = "text/html"
  key = "index.html"
  source = "index.html"
}

resource "aws_s3_bucket_website_configuration" "website" {
  bucket = aws_s3_bucket.mybucket.id
  index_document {
    suffix = "index.html"
  }
  error_document {
    key = "error.html"
  }
}

Use-My-Module/c1-main.tf

module "my_static_website" {
  source = "../My-Module"
}

注:Use-My-Module目录下同时存放了provider配置与Terraform基础块配置文件

报错根因

Terraform解析文件相对路径时,默认以执行terraform plan/terraform apply命令的工作目录(即当前执行命令的Use-My-Module目录)为基准,不会以模块文件自身所在的My-Module目录为基准。
配置中写source = "index.html"时,Terraform会去Use-My-Module目录下查找index.html,但该文件实际存放在My-Module目录下,因此触发文件不存在报错。
另外当前配置声明了错误页为error.html,但没有对应的上传资源逻辑,修复完index.html的问题后还会触发同类报错,需要同步处理。

修复方案

修改My-Module/main.tf里aws_s3_bucket_object.s3object资源的source参数,使用Terraform内置的path.module常量——该常量永远指向当前配置文件所属模块的所在目录,和执行命令的工作目录无关:

resource "aws_s3_bucket_object" "s3object" {
  bucket = aws_s3_bucket.mybucket.id
  content_type = "text/html"
  key = "index.html"
  # 替换原有的相对路径写法
  source = "${path.module}/index.html"
}

如果后续需要支持自定义上传的首页、错误页文件,可以把文件路径定义为模块的输入变量,在调用模块时按需传入对应路径即可,不需要把静态文件固定放在模块目录内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:54:14