Тег перезаписи Terraform и информация о версии при использовании aws_s3_bucket - PullRequest
0 голосов
/ 10 января 2019

Я столкнулся с проблемой, когда Terraform удаляет тег и информацию о версии корзины S3. Что может быть причиной этого? Как я могу предотвратить это?

main.tf:

resource "aws_s3_bucket" "bucket" {
  bucket = "bucket-${var.accountName}"
  acl    = "private"

  versioning {
    enabled = true
  }

  lifecycle {
    prevent_destroy = true
  }
}

вывод плана:

module.s3.aws_s3_bucket.bucket
tags.%: "1" => "0"
tags.Versioning: "Yes" =>

1 Ответ

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

План говорит вам, что он хочет удалить тег Versioning из корзины S3, но обратите внимание, что он не говорит вам, что он отменяет фактическое управление версиями корзины S3, которое вместо этого будет выглядеть примерно так:

  versioning.0.enabled:        "true" => "false"

Вы не определили никаких тегов для корзины S3 в своем коде Terraform, поэтому Terraform пытается принудительно вернуть корзину S3 к конфигурации, которую вы определили после обнаружения дрейфа на этапе обновления.

Вы можете либо добавить теги к ресурсу aws_s3_bucket вашего кода Terraform, прекратить изменять управляемые ресурсы Terraform вне Terraform, либо вы можете использовать ignore_changes, чтобы сообщить Terraform, что вы ожидаете дрейфа по тегам.

Первый вариант, на мой взгляд, является лучшим, и вы бы достигли этого, используя что-то вроде:

resource "aws_s3_bucket" "bucket" {
  bucket = "bucket-${var.accountName}"
  acl    = "private"

  versioning {
    enabled = true
  }

  lifecycle {
    prevent_destroy = true
  }

  tags = {
    Versioning = "Yes"
  }
}

Если вы по какой-то причине хотите добавить теги за пределы Terraform, но не хотите, чтобы Terraform отменял ваши изменения, вы можете указать ему игнорировать изменения тегов, используя ignore_changes жизненный цикл :

resource "aws_s3_bucket" "bucket" {
  bucket = "bucket-${var.accountName}"
  acl    = "private"

  versioning {
    enabled = true
  }

  lifecycle {
    prevent_destroy = true
    ignore_changes = ["tag"]
  }
}
...