我需要将文件夹上传到S3存储桶。但是当我第一次申请时。它只是上传。但是我这里有两个问题:
terraform apply
时,它显示为Apply complete! Resources: 0 added, 0 changed, 0 destroyed
。我希望在运行terraform apply
并创建新版本时一直上传。我在做什么错?这是我的Terraform配置:
resource "aws_s3_bucket" "my_bucket" {
bucket = "my_bucket_name"
versioning {
enabled = true
}
}
resource "aws_s3_bucket_object" "file_upload" {
bucket = "my_bucket"
key = "my_bucket_key"
source = "my_files.zip"
}
output "my_bucket_file_version" {
value = "${aws_s3_bucket_object.file_upload.version_id}"
}
答案 0 :(得分:1)
您不应该使用Terraform来执行此操作。 Terraform应该用来编排和配置您的基础结构及其配置,而不是文件。就是说,terraform无法识别文件上的更改。除非更改名称,否则terraform不会更新状态。
此外,最好使用shutil.make_archive
来做到这一点。像这样:
local-exec
答案 1 :(得分:1)
Terraform仅在检测到配置和远程对象属性之间的差异时才对远程对象进行更改。到目前为止,在配置中,配置仅包含文件名。它不包含文件内容,因此Terraform无法对文件更改做出反应。
要进行后续更改,有几个选项:
在这种情况下,决赛似乎最接近您想要的。为此,添加etag
参数并将其设置为文件的MD5哈希值:
resource "aws_s3_bucket_object" "file_upload" {
bucket = "my_bucket"
key = "my_bucket_key"
source = "${path.module}/my_files.zip"
etag = "${filemd5("${path.module}/my_files.zip")}"
}
有了该额外的参数,Terraform将检测磁盘上文件的MD5哈希何时与远程存储在S3中的MD5哈希不同,并计划相应地更新该对象。
(我不确定version_id
发生了什么。只要在存储桶中启用了版本控制,它就应该起作用。)