gpt4 book ai didi

terraform - 遍历 map 以获取文件功能

转载 作者:行者123 更新时间:2023-12-05 08:51:58 26 4
gpt4 key购买 nike

我有一个使用 terraform 将多个文件上传到 s3 的用例。我想使用计数函数上传多个对象。为此,需要使用文件 ("${path.module}/path/to/file") 遍历源。

有没有办法使文件函数成为一个利用 count.index 的映射变量?

最佳答案

Terraform 0.12.8 引入了一个新函数 fileset它可以返回一组与特定基目录中的特定模式匹配的文件路径。

我们可以将其与资源 for_each(而不是 count)结合起来,将匹配的文件上传到 S3,如下所示:

resource "aws_s3_bucket_object" "example" {
for_each = fileset("${path.module}/files", "*") # could use ** instead for a recursive search

bucket = "example"
key = each.value
source = "${path.module}/${each.value.source_path}"

# Unless the bucket has encryption enabled, the ETag of each object is an
# MD5 hash of that object.
etag = filemd5("${path.module}/${each.value.source_path}")
}

在这里使用 for_each 而不是 count 意味着 Terraform 将通过其 S3 路径而不是其在列表中的位置来识别资源的每个实例,因此您可以添加和删​​除文件而不影响其他文件。例如,如果您有一个名为 example.txt 的文件,那么 Terraform 会将其实例跟踪为 aws_s3_bucket_object.example["example.txt"],而不是像 aws_s3_bucket_object.example[3] 其中 3 是它在文件列表中的位置。


我已经编写了一个基于 fileset 的 Terraform 模块,它还支持基于文件名后缀的模板渲染和检测文件类型,这可能会使一些更复杂的情况下的生活变得更轻松:apparentlymart/dir/template .您可以按照与上述类似的方式将其结果与 aws_s3_bucket_object 一起使用,如其 README 中所示。

关于terraform - 遍历 map 以获取文件功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com