Memperbaiki peringatan "Interpolasi-satunya ekspresi sudah usang" di Terraform

11

Saya meningkatkan ke Terraform v0.12.16 dan sekarang saya mendapatkan banyak pesan yang terlihat seperti ini:

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.

Ada ratusan pesan ini. Apakah ada cara otomatis untuk memperbaikinya?

Kevin Burke
sumber

Jawaban:

13

Apakah Anda meningkatkan kode terlebih dahulu?

Terraform 0.11 tidak kompatibel dengan 0.12, jadi Anda harus memutakhirkannya terlebih dahulu.

terraform init
terraform 0.12upgrade

Jika kode Terraform Anda memanggil modul terraform lain, pastikan Anda telah meningkatkan modul terraform ini ke 0.12 juga.

BMW
sumber
3
Ya, saya memutakhirkan kodenya. Saya masih mendapatkan kesalahan di atas.
Kevin Burke
hanya untuk memperjelas, meningkatkan modul berarti menjalankan 2 perintah yang sama ini di root modul seperti .terraform / modules / <module_name>
Kim Sant
4

Kode sintaks terraform-clean-syntax Martin Atkins dapat digunakan (terima kasih Kevin Burke untuk petunjuk)

Saya tanpa malu-malu menggunakannya dan dikemas dalam wadah buruh pelabuhan sehingga dapat dengan mudah dijalankan pada mesin non linux_amd64, misalnya MacOS:

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

TL&DR (PERINGATAN - ini akan memperbarui file tf Anda di tempat):

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
sumber
Alat ini bermanfaat, tetapi perhatikan bahwa ini tidak memisahkan nilai-nilai dalam array (mis. Subnet_ids). Untuk itu, saya harus kembali menerapkan substitusi regex dengan hati-hati: "\$\{([^}"]+)\}"Tidak dapat diterapkan secara membabi buta karena interpolasi dalam dokumen-dokumen di sini.
Trevor Robinson
2

Alat ini akan secara otomatis menghapus tanda kutip awal dan akhir dan tanda kurung untuk Anda, yang memperbaiki peringatan: https://github.com/apparentlymart/terraform-clean-syntax

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

Saya menggunakan notepad ++ untuk menghapus sintaks interpolasi itu.

regex:

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

ubah dengan:

\1\2 
Venkatesh
sumber
-2

Atau Anda dapat menggunakan sed sederhana:

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