在上传到 S3 之前替换文件中的字符串

Replace string in file before uploading to S3

我有以下 terraform 脚本可以将一堆文件上传到 AWS S3

resource "aws_s3_bucket_object" "website_files" {
  for_each      = fileset(var.client_upload_directory, "**/*.*")
  bucket        = aws_s3_bucket.ada-website.bucket
  key           = replace(each.value, var.client_upload_directory, "")
  source        = "${var.client_upload_directory}${each.value}"
}

有没有办法在上传前将文件内容中的一个字符串替换为另一个字符串?我确实尝试使用 content 而不是 source - 像这样

resource "aws_s3_bucket_object" "website_files" {
  for_each      = fileset(var.client_upload_directory, "**/*.*")
  bucket        = aws_s3_bucket.ada-website.bucket
  key           = replace(each.value, var.client_upload_directory, "")
  content       = replace(file("${var.client_upload_directory}${each.value}"), "string 1", "string 2"))
}

但缺点是 - planapply 显示整个文件的内容 - 这可能非常大。同样理想情况下,此替换应仅应用于集合中的一个文件,其余文件应按原样上传并跳过该文件。

我最终在 terraform 之外通过 shell 脚本完成了这项工作。