为什么“ aws_s3_bucket_object”会通过“ TerraForm”从“ s3”存储桶中删除文件夹和文件?

时间:2019-07-23 01:36:18

标签: amazon-s3 terraform

我在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带有时间戳,因此每次运行都不相同。

如何使它们仅在不存在时创建?并避免删除现有文件。

1 个答案:

答案 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}"

}