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?

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.


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:

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


0

Saya menggunakan notepad ++ untuk menghapus sintaks interpolasi itu.

regex:

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

ubah dengan:

\1\2 

-2

Atau Anda dapat menggunakan sed sederhana:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.