【问题标题】:Batch replace of files content in Terraform批量替换 Terraform 中的文件内容
【发布时间】:2023-03-23 03:27:02
【问题描述】:

我在某个根目录下有多个文件,我们称之为 module/data/。 我需要将此目录上传到相应的 S3 存储桶。所有这些都按预期工作:

resource "aws_s3_bucket_object" "k8s-state" {
  for_each = fileset("${path.module}/data", "**/*")
  bucket = aws_s3_bucket.kops.bucket
  key    = each.value
  source = "${path.module}/data/${each.value}"
  etag   = filemd5("${path.module}/data/${each.value}")
}

剩下的唯一事情是我需要递归地遍历所有文件并用来自 terraform 模块变量的值替换标记(例如 !S3!)。 与此类似,但跨目录/子目录中的所有文件:

replace(file("${path.module}/launchconfigs/file"), “#S3”, aws_s3_bucket.kops.bucket)

那么一句话的问题:如何循环文件并用terraform中的变量替换其中的一部分?

【问题讨论】:

标签: amazon-web-services amazon-s3 automation terraform devops


【解决方案1】:

一个选项可以使用模板,代码如下所示:

provider "aws" {
  region = "us-west-1"
}

resource "aws_s3_bucket" "sample_bucket2222" {
  bucket = "my-tf-test-bucket2222"
  acl    = "private"
}

resource "aws_s3_bucket_object" "k8s-state" {
  for_each = fileset("${path.module}/data", "**/*")
  bucket   = aws_s3_bucket.sample_bucket2222.bucket
  key      = each.value
  content  = data.template_file.data[each.value].rendered
  etag     = filemd5("${path.module}/data/${each.value}")
}

data "template_file" "data" {
  for_each = fileset("${path.module}/data", "**/*")
  template = "${file("${path.module}/data/${each.value}")}"
  vars = {
    bucket_id  = aws_s3_bucket.sample_bucket2222.id
    bucket_arn = aws_s3_bucket.sample_bucket2222.arn
  }
}

您可以看到我使用content 来使用模板文件,而不是source,这是该资源与您的唯一区别


在您的文件中,变量的使用方式如下:

Hello ${bucket_id}

我所有的测试代码都在这里:
https://github.com/heldersepu/hs-scripts/tree/master/TerraForm/regional

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2018-01-14
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多