Жизненный цикл Terraform и S3: Как истечь срок действия определенных объектов?

#amazon-web-services #amazon-s3 #terraform #terraform-provider-aws #amazon-s3-bucket

Вопрос:

Я пишу это правило жизненного цикла корзины S3:

 lifecycle_rules = [  {  id = "log"  enabled = true  prefix = "log/"   tags = {  "rule" = "log"  "autoclean" = "true"  }  expiration = {  days = 365  }  }  ]  

Макет ASCII-схемы корзины представлен ниже: Журналы динамически записываются каждый день в эту корзину. Некоторые в папке logs/ , некоторые во вложенной failed_logs/ папке, а некоторые в корневой папке корзины.

 BUCKET/ |  nonlogfile.exe  log_file_that_i_DONT_wanna_delete.log  logs/   |  file1 (Created 2021-01-01)  file2 (Created 2021-01-02)  failed_logs/  |  file3 (Created 2021-01-03)   file4 (Created 2021-01-04)   

Моя цель-истечь срок действия каждого файла в log/ папке (и ее подпапки failed_logs через 365 дней.

 `file1` would expire at 2022-01-01 `file2` would expire at 2022-01-02 `file3` would expire at 2022-01-03 `file4` would expire at 2022-01-04  

в то время как

 nonlogfile.exe log_file_that_i_DONT_wanna_delete.log  

никогда не истечет.

Документация aws_s3_bucket Terraform гласит, что:

lifecycle_rule Объект поддерживает следующее:

prefix — (Необязательно) Префикс ключа объекта, идентифицирующий один или несколько объектов, к которым применяется правило.

tags — (Необязательно) Указывает ключ и значение тегов объекта.

  • Я не понимаю этого prefix атрибута
  • Мои файлы не помечены

Как я могу нацелить их, как описано выше, на основе их местоположения в корзине?

Комментарии:

1. Вы хотите сказать, что префикс, который вы используете, не работает?

2. Я говорю, что не могу понять, что должен делать этот атрибут. Что такое префикс ключа объекта? Применимо ли это к папкам? Например, будет ли добавление prefix = 'log' нацелено на все файлы в папке журнала и все файлы во всех вложенных папках папки журнала?

3. Префикс log не будет применяться ко всем файлам рекурсивно в каталоге, он будет искать файл с именем log и применяться только к этому файлу. Однако значение префикса log/ будет рекурсивно применяться ко всем файлам в этом «каталоге» и «подкаталогах» ( я заключил слово «каталог» в кавычки, потому что на самом деле это не каталоги, а префиксы ). log/ является ли правильным префиксом, предполагающим, что каталог журнала находится в корне вашего ведра

4. Спасибо тебе, Крис. Это очень полезно, если вы хотите опубликовать это в качестве ответа, я приму его.

Ответ №1:

Структура S3 Объяснена

Атрибут префикса-это просто путь к вашему объекту s3 за вычетом имени корзины. Если бы у вас был следующий «каталог» S3 s3://ec-integration-files/logs/ , значение префикса было бы просто logs/ .

Атрибут называется префиксом, а не путем, потому что, хотя s3 выглядит как древовидная структура каталогов, технически это плоское хранилище. Однако Консоль управления отображает объекты так, как если бы они хранились в структуре каталогов, и для этого использует префиксы.

Еще один момент прояснения: у вас могут быть два объекта в корне ( или на любой глубине ) с именем logs и logs/ . Один из них будет отображаться в виде каталога в консоли управления, а другой-в виде объекта file, но на самом деле это всего лишь два объекта с разными именами