Когда вы указываете Terraform путь к файлу, а не прямой контент для загрузки, именно имя файла определяет, нужно ли обновлять ресурс, а не содержимое файла.
Для короткого фрагмента данных, как показано в вашем примере, самое простое решение - указать данные непосредственно в конфигурации ресурса:
resource "aws_s3_bucket_object" "upload" {
bucket = "bucket"
key = "date"
content = "${timestamp()}"
}
Если ваш файл на самом деле слишком велик для разумной загрузки в строковую переменную, или если он содержит необработанные двоичные данные, которые не могут быть загружены в строку, вы можете установить etag
объекта в хэш MD5 содержимого чтобы поставщик мог видеть, когда контент изменился:
resource "aws_s3_bucket_object" "upload" {
bucket = "bucket"
key = "date"
source = "${path.module}/timestamp"
etag = "${filemd5("${path.module}/timestamp")}"
}
При установке etag
любое изменение содержимого файла приведет к изменению этого результата хеширования и, следовательно, позволит провайдеру обнаружить, что объект должен быть обновлен.