templatefile 是 Terraform 的一個內置函數,可讓 Terraform 在運行時,根據變量動態生成文件內容 。 templatefile 函數的基本用法是:

  • 定義一個模板文件,其中包含要插入變量的佔位符。
  • 在 Terraform code 中,您可以使用 templatefile 函數來讀取模板文件,並提供要插入的變量。

最後 Terraform 會動態生成文件內容,並將其輸出。

注意 ! 有許多比較舊版本的教學,會要我們使用 hashicorp template provider 提供的 template resource,但現在完全不推薦使用,因為在 Terraform 0.12 版本以上,templatefile 已經是內置函數了。

基本語法

templatefile Function 官網上有詳細的使用說明。

templatefile( filename, vars )

兩個參數都是必須的,其中:

  • filename:表示要使用的模板文件的路徑。
  • vars:表示要插入模板文件的變量,是key-value pair。

*.tftpl 是建議用於範本檔的命名模式,並不是強制的。


範例

templatefile 還算蠻常使用到的,例如要啟動 EC2 實例,並且需要要在 EC2 上安裝或執行一些預設腳本,我們會用到 userdata;或是相對應啟動 GCP VM安裝或執行一些預設腳本,要使用 startup_script,都會有一個 bash script檔,例如參考 google 啟動 XWIKI 範例,在啟動 GCP VM 時,要使用 startup_script 來安裝一些軟體和設定一些變數 :

Terraform 也有更簡單的一個內置函數file,可單純直接讀取檔案。


GCP Terraform Best practices

Best practices 中有特別說明這些 file 或 .tftpl 檔案要怎麼放和一些規範:

  • 使用 Terraform templatefile 的話,其 file extension 要求使用 .tftpl

  • Terraform templatefile 的檔案都放在 templates/ 這個資料夾

  • Terraform 引用的一般靜態文件,就放到 files/ 這個資料夾