У меня есть корзина S3, созданная с помощью Terraform, а также политика жизненного цикла, согласно которой срок действия всего ниже athena_results/
истекает через 3 дня. Мой код ниже. Проблема, с которой я столкнулся, заключается в том, что эта политика жизненного цикла не удаляет данные под athena_results/
через 3 дня. Мне интересно, что я делаю. Что-то не так или чего-то не хватает в моей конфигурации? Я проверил документы, Google и SO и не нашел ничего, что могло бы помочь.
Я не понимаю, почему это правило жизненного цикла не очищает мои результаты Athena. Заранее благодарю, если у вас есть идеи!
resource "aws_s3_bucket" "arapbi" {
bucket = "arapbi"
tags = {
Name = "ARAPBI"
}
}
resource "aws_s3_bucket_lifecycle_configuration" "arapbi" {
bucket = aws_s3_bucket.arapbi.id
rule {
id = "Lifecycle"
status = "Enabled"
filter {
object_size_greater_than = "0"
prefix = "athena_results/"
}
expiration {
days = 3
}
noncurrent_version_expiration {
noncurrent_days = 1
}
}
}
Если вы посмотрите на примеры, вам нужно использовать and
для фильтрации по нескольким атрибутам. Это описано в Примерах.
resource "aws_s3_bucket_lifecycle_configuration" "arapbi" {
bucket = aws_s3_bucket.arapbi.id
rule {
id = "Lifecycle"
status = "Enabled"
filter {
and {
prefix = "athena_results/"
object_size_greater_than = "0"
}
}
expiration {
days = 3
}
noncurrent_version_expiration {
noncurrent_days = 1
}
}
}
Как описано в конфигурации блока filter. Вы должны указать ровно один фильтр
Блок конфигурации фильтра должен быть указан как пустой блок конфигурации (фильтр {}) или ровно один из префикса, тега, и указано object_size_greater_than или object_size_less_than.
Из чтения документации: and- (Optional) Configuration block used to apply a logical AND to two or more predicates.
Я предполагаю, что если and
не используется, предикаты в блоке фильтра будут применяться с логикой or
, и будет удалено больше файлов, чем ожидалось...
Я только что проверил это и получил сообщение об ошибке: api error MalformedXML: The XML you provided was not well-formed or did not validate against our published schema
... terraform успешно применяется без and
Кажется, проблема в том, что object_size_greater_than = "0"
если я поменяю 0
на 1
, оно будет применено правильно.
Спасибо за вашу помощь в этом. Предложенные вами изменения развертываются через Terraform. Я жду, удалит ли правило жизненного цикла объекты, как ожидалось. Если это так, я обновлю и приму этот ответ.
Тебе это
object_size_greater_than = "0"
там нужно? Я бы проверил без него, посмотрим, будет ли делать то, что должно