Fix “Interpolation-only expressions are deprecated” warning in Terraform

孤街浪徒 提交于 2020-03-18 12:02:37

问题


I upgraded to Terraform v0.12.16 and now I am getting a lot of messages that look like this:

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.

There are hundreds of these messages. Is there an automated way to fix them?


回答1:


Did you upgrade the code first?

Terraform 0.11 isn't compatible with 0.12, so you have to upgrade it first.

terraform init
terraform 0.12upgrade

If your Terraform code is calling other terraform modules, please make sure you have upgraded these terraform modules to 0.12 as well.




回答2:


Martin Atkins's terraform-clean-syntax code can be used (thanks Kevin Burke for clue)

I have shamelessly used it and packaged within docker container so it can be easily run on non linux_amd64 machines, e.g. MacOS:

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

TL&DR (WARNING - this will update your tf files in place):

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:



回答3:


This tool will automatically strip the beginning and ending quotes and braces for you, which fixes the warnings: https://github.com/apparentlymart/terraform-clean-syntax

go get github.com/apparentlymart/terraform-clean-syntax
terraform-clean-syntax .



回答4:


I used notepad++ to remove that interpolation syntax.

regex:

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

replace_with:

\1\2 



回答5:


Or you can use a simple sed:

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


来源:https://stackoverflow.com/questions/59038537/fix-interpolation-only-expressions-are-deprecated-warning-in-terraform

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!