我在terraform
中具有以下配置,可以将文件上传到s3
存储桶中。
resource "aws_s3_bucket_object" "file_upload" {
bucket = "${var.s3_bucket}"
key = "deploy/${var.file_name}"
source = "${data.archive_file.zipit.output_path}"
}
它确实将文件上传到配置中指定的存储桶。但是错误的是,每次它从s3
存储桶中删除文件夹和文件,然后重新创建它们。因此,它会从存储桶中删除文件夹deploy
,然后重新创建它,然后将文件上传到该文件夹。请注意,file_name
带有时间戳,因此每次运行都不相同。
如何使它们仅在不存在时创建?并避免删除现有文件。
答案 0 :(得分:0)
我相信deploy
文件夹将与文件一起删除,因为它们都是通过相同的资源进行管理的,并且terraform认为都需要替换两者,因为它认为不能对其进行修改。
您可以尝试仅为文件夹创建第二个资源,然后将其用于对象上载。例如:
resource "aws_s3_bucket_object" "folder" {
bucket = "${var.s3_bucket}"
key = "deploy/"
source = "/dev/null"
}
resource "aws_s3_bucket_object" "file_upload" {
bucket = "${var.s3_bucket}"
key = "${aws_s3_bucket_object.folder.key}${var.file_name}"
source = "${data.archive_file.zipit.output_path}"
}