我的目标是使其具有动态性,因此每当我在目录中创建一个文件夹时,terraform会自动将该新文件夹及其内容上传到具有相同键结构的S3存储桶中。
以下是我的做法。
首先,您需要获取一个本地变量,其中包含每个文件夹及其下的文件列表。然后,我们可以循环遍历该列表,将源上传到S3存储桶中。
例如:我有一个名为“Directories”的文件夹,其中包含2个子文件夹“Folder1”和“Folder2”,每个文件夹都有自己的文件。
- Directories
- Folder1
* test_file_1.txt
* test_file_2.txt
- Folder2
* test_file_3.txt
步骤1:获取本地变量。
locals{
folder_files = flatten([for d in flatten(fileset("${path.module}/Directories/*", "*")) : trim( d, "../") ])
}
输出结果如下:
folder_files = [
"Folder1/test_file_1.txt",
"Folder1/test_file_2.txt",
"Folder2/test_file_3.txt",
]
步骤2:动态上传S3对象。
resource "aws_s3_object" "this" {
for_each = { for idx, file in local.folder_files : idx => file }
bucket = aws_s3_bucket.this.bucket
key = "/Directories/${each.value}"
source = "${path.module}/Directories/${each.value}"
etag = "${path.module}/Directories/${each.value}"
}
这段代码循环遍历本地变量。
因此,在您的S3存储桶中,您将以相同的结构上传本地目录及其子目录和文件。
Directory
- Folder1
- test_file_1.txt
- test_file_2.txt
- Folder2
- test_file_3.txt
content_type
:https://registry.terraform.io/modules/hashicorp/dir/template/latest - Flaircontent_type
。你能否引用S3示例代码和链接作为单独的答案,以便更加可见? - meustrus.tf.json
提供了一个更小的片段。 - Flairsource_hash
比etag
更好。 - sdgfsdh