Korrektur der Warnung "Nur Interpolationsausdrücke sind veraltet" in Terraform

11

Ich habe ein Upgrade auf Terraform v0.12.16 durchgeführt und erhalte jetzt viele Nachrichten, die so aussehen:

Warning: Interpolation-only expressions are deprecated

  on ../modules/test-notifier/test_notifier.tf line 27, in resource "aws_sns_topic_policy" "default":
  27:   arn    = "${aws_sns_topic.default.arn}"

Terraform 0.11 and earlier required all non-constant expressions to be
provided via interpolation syntax, but this pattern is now deprecated. To
silence this warning, remove the "${ sequence from the start and the }"
sequence from the end of this expression, leaving just the inner expression.

Template interpolation syntax is still used to construct strings from
expressions when the template includes multiple interpolation sequences or a
mixture of literal strings and interpolations. This deprecation applies only
to templates that consist entirely of a single interpolation sequence.

Es gibt Hunderte dieser Nachrichten. Gibt es eine automatisierte Möglichkeit, diese zu beheben?

Kevin Burke
quelle

Antworten:

13

Haben Sie den Code zuerst aktualisiert?

Terraform 0.11 ist nicht mit 0.12 kompatibel, daher müssen Sie es zuerst aktualisieren.

terraform init
terraform 0.12upgrade

Wenn Ihr Terraform-Code andere Terraform-Module aufruft, stellen Sie bitte sicher, dass Sie diese Terraform-Module ebenfalls auf 0,12 aktualisiert haben.

BMW
quelle
3
Ja, ich habe den Code aktualisiert. Ich habe immer noch die oben genannten Fehler erhalten.
Kevin Burke
Um dies zu verdeutlichen, bedeutet ein Upgrade der Module, dass dieselben 2 Befehle im Stammverzeichnis des Moduls ausgeführt werden, wie z. B. .terraform / modules / <Modulname>
Kim Sant
4

Martin Atkins ' Terraform-Clean-Syntax- Code kann verwendet werden (danke Kevin Burke für den Hinweis)

Ich habe es schamlos verwendet und in einen Docker-Container gepackt, damit es problemlos auf Nicht-Linux_amd64-Computern ausgeführt werden kann, z. B. MacOS:

https://github.com/NoLedgeTech/terraform-clean-syntax-docker

TL & DR (WARNUNG - Dadurch werden Ihre tf-Dateien aktualisiert):

docker pull pniemiec/terraform-clean-syntax-docker
cd <DIRECTORY_WITH_TF_FILES>
terraform init
terraform plan    # This shows a lot of warnings
docker run --rm -v $(pwd):/code -t pniemiec/terraform-clean-syntax-docker
terraform plan    # This does not show a lot of warnings :sweat_smile:
Pawel Niemiec
quelle
Dieses Tool war hilfreich, aber beachten Sie, dass es die Werte innerhalb von Arrays (z. B. subnet_ids) nicht aufhebt. Dafür musste ich auf eine sorgfältige Anwendung einer Regex-Substitution zurückgreifen: "\$\{([^}"]+)\}"Sie kann aufgrund der Interpolation in den vorliegenden Dokumenten nicht blind angewendet werden.
Trevor Robinson
2

Dieses Tool entfernt automatisch die Anfangs- und Endzitate und Klammern für Sie, wodurch die Warnungen behoben werden: https://github.com/apparentlymart/terraform-clean-syntax

go get github.com/apparentlymart/terraform-clean-syntax
terraform-clean-syntax .
Kevin Burke
quelle
bekommen:panic: didn't find any token of type TokenOBrack
Spanky
0

Ich habe Notepad ++ verwendet, um diese Interpolationssyntax zu entfernen.

Regex:

^(.*)\${(.*)}

ersetzen mit:

\1\2 
Venkatesh
quelle
-2

Oder Sie können ein einfaches sed verwenden:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Dan Rudolph
quelle