Terraformの「補間のみの式は廃止される」警告を修正


11

Terraform v0.12.16にアップグレードすると、次のようなメッセージが多数表示されます。

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.

これらのメッセージは何百もあります。それらを修正する自動化された方法はありますか?

回答:


13

最初にコードをアップグレードしましたか?

Terraform 0.11は0.12と互換性がないため、最初にアップグレードする必要があります。

terraform init
terraform 0.12upgrade

Terraformコードが他のterraformモジュールを呼び出している場合は、これらのterraformモジュールも0.12にアップグレードしたことを確認してください。


3
はい、コードをアップグレードしました。上記のエラーがまだ発生していました。
Kevin Burke

明確に言うと、モジュールのアップグレードとは、.terraform / modules / <module_name>のようなモジュールルートで同じ2つのコマンドを実行することを意味します
Kim Sant

4

Martin Atkinsのterraform-clean-syntaxコードを使用できます(手がかりをくれたKevin Burkeに感謝)

私は恥知らずにそれを使用し、Dockerコンテナー内にパッケージ化したので、Linux_amd64以外のマシン、たとえばMacOSで簡単に実行できます。

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

TL&DR(警告-これによりtfファイルが更新されます):

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:

このツールは役に立ちましたが、配列(subnet_idsなど)内の値を補間しないことに注意してください。そのため、正規表現の置換を慎重に適用することにフォールバックする必要"\$\{([^}"]+)\}"がありました。ヒアドキュメントの補間のため、盲目的に適用することはできません。
Trevor Robinson、


0

notepad ++を使用して、その補間構文を削除しました。

正規表現:

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

と置換する:

\1\2 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.