Terraform вносит изменения в удаленные объекты только тогда, когда обнаруживает разницу между конфигурацией и атрибутами удаленного объекта. В конфигурации, как вы ее написали, конфигурация включает только имя файла. Он не содержит ничего о содержимом файла, поэтому Terraform не может реагировать на изменение файла.
Для внесения последующих изменений есть несколько вариантов:
- Вы можете использовать разные локальные имена файлов для каждой новой версии.
- Вы можете использовать разные пути к удаленным объектам для каждой новой версии.
- Вы можете использовать объект etag, чтобы позволить 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, и планирует соответственно обновить объект.
(Я не уверен, что происходит с version_id
. Он должен работать, пока в корзине включено управление версиями.)