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?

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.


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:

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


0

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

Regex:

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

ersetzen mit:

\1\2 

-2

Oder Sie können ein einfaches sed verwenden:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.