Terraform 给我 Fileset IDENT 错误

Terraform is giving me Fileset IDENT error

我正在尝试将多个文件上传到 S3 存储桶,如此 article 中所示,其中还有一个视频,这是我使用的代码

# Create a bucket
resource "aws_s3_bucket" "b1" {
  bucket = "s3-terraform-bucket-labbb"
  acl    = "private"   # or can be "public-read"
  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

resource "aws_s3_bucket_object" "object1" {
    for_each = fileset("myfiles/", "*")
    bucket = aws_s3_bucket.b1.id
    key = each.value
    source = "myfiles/${each.value}"
    etag = filemd5("myfiles/${each.value}")
}

Buildspec.yml

version: 0.2

phases:

  install:
    commands:
      - "apt install unzip -y"
      - "wget https://releases.hashicorp.com/terraform/0.11.14/terraform_0.11.14_linux_amd64.zip"
      - "unzip terraform_0.11.14_linux_amd64.zip"
      - "mv terraform /usr/local/bin/"
  pre_build:
    commands:
      - terraform init

  build:
    commands:
      - terraform $TF_COMMAND -auto-approve

  post_build:
    commands:
      - echo terraform $TF_COMMAND completed on `date`


当我在 codebuild 中 运行 TF 模板时,我会得到这个错误

Error: Error parsing /codebuild/output/src634819119/src/s3bucket.tf: At 12:16: Unknown token: 12:16 IDENT fileset

有人知道我是否遗漏了什么或者 Terraform 是否有问题吗?谢谢!

您在文件路径中遗漏了 ${path.module}。它被推荐在 Terraform Official docs。它也有一些很好的例子。

resource "aws_s3_bucket_object" "object1" {
    for_each = fileset("${path.module}/myfiles/", "*")
    bucket = aws_s3_bucket.b1.id
    key = each.value
    source = "myfiles/${each.value}"
    etag = filemd5("myfiles/${each.value}")
}

您使用的是非常旧的地形 (0.11.14)。 Current version 是 0.14.7。尽管使用旧版本,但您的 terraform 代码是现代的,因此不适用于 0.11 版本。

您要么必须重新编写您的代码以使其在 0.11 版本中有效,要么升级您的 terraform 版本会更好。