Файл загрузки Terraform S3 не обновляется - PullRequest
0 голосов
/ 24 апреля 2019

Я использую terraform для загрузки файла с содержимым в s3.Однако, когда содержимое изменяется, мне также необходимо обновить файл s3. Но поскольку файл состояния хранит информацию о том, что загрузка s3 была завершена, новый файл не загружается.

resource "local_file" "timestamp" {
  filename = "timestamp"
  content = "${timestamp()}"
}


resource "aws_s3_bucket_object" "upload" {
 bucket = "bucket"
 key = "date"
 source = "timestamp"
}



ожидается:

Обнаружено изменение aws_s3_bucket_object aws_s3_bucket_object.timestamp Создание ...

результат:

aws_s3_bucket_object Обновление состояния ...

1 Ответ

1 голос
/ 24 апреля 2019

Когда вы указываете 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 любое изменение содержимого файла приведет к изменению этого результата хеширования и, следовательно, позволит провайдеру обнаружить, что объект должен быть обновлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...