Этаг Terraform S3 Bucket Object обновляется при каждом применении - PullRequest
0 голосов
/ 23 января 2019

Я загружаю AWS Lambda-код в корзину S3 в виде zip-файлов.

У меня объявлен ресурс для объекта корзины S3:

resource "aws_s3_bucket_object" "source-code-object" {
  bucket = "${aws_s3_bucket.my-bucket.id}"
  key = "source-code.zip"
  source = "lambda_source_code/source-code.zip"
  etag = "${base64sha256(file("lambda_source_code/source-code.zip"))}"
}

У меня также есть объявление данных длязаархивируйте мой код:

data "archive_file" "source-code-zip" {
  type = "zip"
  source_file = "${path.module}/lambda_source_code/run.py"
  output_path = "${path.module}/lambda_source_code/source-code.zip"
}

Вывод terraform apply постоянно показывает изменение хеша:

  ~ aws_s3_bucket_object.source-code-object
      etag: "old_hash" => "new_hash"

Даже если ничего в моем исходном коде не изменилось.Почему происходит такое поведение?Я видел похожих постов с постоянно меняющимися исходными кодами Lambdas, но мои Lambdas фактически не обновляются каждый раз (проверено в консоли во время последнего обновления).Тем не менее, похоже, что новый объект-контейнер S3 загружается на каждый apply.

1 Ответ

0 голосов
/ 23 января 2019

Zip-архивы по умолчанию содержат метаданные, такие как временные метки, что приводит к тому, что хеш-код отличается, даже если исходные файлы не различаются. При создании архива вручную вы можете избежать этого с помощью флага --no-extra или -X. Я не уверен, поддерживает ли Terraform этот флаг.

со страницы руководства zip:

-X

Не сохранять дополнительные атрибуты файла (расширенные атрибуты в OS / 2, uid / gid и время файлов в Unix). В формате zip используется дополнительная поля для включения дополнительной информации для каждой записи. Некоторые дополнительные поля являются специфическими для определенных систем, в то время как другие применимы для всех систем. Обычно, когда zip читает записи из существующего архив, он читает дополнительные поля, которые он знает, удаляет остальные и добавляет дополнительные поля, применимые к этой системе. С -X все почтовые индексы старые поля и включает только дополнительные поля Unicode и Zip64 (в настоящее время эти два дополнительных поля нельзя отключить).

Отрицание этого параметра, -X-, включает все дополнительные по умолчанию поля, но также копирует любые нераспознанные дополнительные поля.

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