_Ce problème a été initialement ouvert par @josh-padnick sous le nom hashicorp/terraform#9119. Il a été migré ici dans le cadre de la division du
J'ai rencontré un problème où l'ajout d'une configuration de cycle de vie à un compartiment S3 oblige terraform à continuer à détruire et à rajouter le même cycle de vie à chaque terraform apply
.
Terraform v0.7.4
resource "aws_s3_bucket" "cloudtrail" {
bucket = "gruntwork-josh-test-1"
force_destroy = true
versioning {
enabled = true
}
# Automatically delete a log file after X days.
lifecycle_rule {
id = "auto-delete-after-x-days"
prefix = ""
enabled = true
abort_incomplete_multipart_upload_days = 5
expiration {
days = 5
expired_object_delete_marker = true
}
noncurrent_version_expiration {
days = 5
}
}
}
https://gist.github.com/josh-padnick/aea607bd08cc771344e5c9063f30a495
N / A
Après la demande initiale, les terraform apply
ou terraform plan
ne devraient entraîner aucun changement.
Le compartiment S3 est créé avec succès et sans erreur sur le terraform apply
initial. Mais sans aucune modification du modèle, l'exécution de terraform plan
immédiatement après montre ce changement inutile :
~ aws_s3_bucket.cloudtrail
lifecycle_rule.0.expiration.2217964487.date: "" => ""
lifecycle_rule.0.expiration.2217964487.days: "" => "5"
lifecycle_rule.0.expiration.2217964487.expired_object_delete_marker: "" => "true"
lifecycle_rule.0.expiration.4129135488.date: "" => ""
lifecycle_rule.0.expiration.4129135488.days: "5" => "0"
lifecycle_rule.0.expiration.4129135488.expired_object_delete_marker: "false" => "false"
terraform apply
terraform plan
Fait intéressant, j'ai également découvert ce qui est probablement une condition de concurrence en préparant ce numéro. Dans environ 25 % des cas, faire un simple terraform apply
entraînerait l'erreur suivante :
1 error(s) occurred:
* aws_s3_bucket.cloudtrail: Error putting S3 lifecycle: NoSuchBucket: The specified bucket does not exist
status code: 404, request id: 7B9E0FD8D09EAFDC
Ceci n'est pas lié à ce problème, mais justifie probablement un problème distinct s'il n'existe pas déjà.
Ce problème est-il toujours ouvert ?
C'est toujours un problème. La cause du problème est qu'AWS ne prend pas en charge expired_object_delete_marker
lorsque l'expiration a déjà été configurée.
Voir https://github.com/hashicorp/terraform/issues/9119#issuecomment-299182143 pour plus de détails
J'ai rencontré ce même problème en essayant de définir expired_object_delete_marker = true dans la même règle de cycle de vie que je définissais l'expiration de la version actuelle et noncurrent_version_expiration. Terraform s'exécuterait sans erreur mais le plan afficherait la définition de expired_object_delete_marker = false (voir ci-dessous)
expiration {
expiré_object_delete_marker = vrai
}
lifecycle_rule.1.expiration.3591068768.expired_object_delete_marker: "true" => "false"
La solution consiste à créer une deuxième règle de cycle de vie qui définit expired_object_delete_marker = true
lifecycle_rule {
id = "ExpireDeleteMarkers"
prefix = ""
enabled = true
expiration {
expired_object_delete_marker = true
}
}
Commentaire le plus utile
J'ai rencontré ce même problème en essayant de définir expired_object_delete_marker = true dans la même règle de cycle de vie que je définissais l'expiration de la version actuelle et noncurrent_version_expiration. Terraform s'exécuterait sans erreur mais le plan afficherait la définition de expired_object_delete_marker = false (voir ci-dessous)
expiration {
expiré_object_delete_marker = vrai
}
lifecycle_rule.1.expiration.3591068768.expired_object_delete_marker: "true" => "false"
La solution consiste à créer une deuxième règle de cycle de vie qui définit expired_object_delete_marker = true