前面我們所使用佈建器 (Provisioner) 的 remote-exec
不怎麼好用,而且 Terraform 無法檢查設定有沒有變動。
aws 有一個叫做使用者資料 (User Data) 的功能,可以輔助我們設定虛擬機。只要在建立機器時傳送使用者資料 (User Data),在執行個體 (instance) 啟動之後就會執行指令。
使用者資料是基於 cloud-init
這個工具在運作的。
cloud-init 是由 Canonical 所發佈的工具。 (就是維護 Ubuntu 的那一家公司)
目的就是要讓雲端虛擬機初始化可以更容易的自動化。目前常見的雲端平台跟多數的 Linux 作業系統都有支援 cloud-init 功能。
使用者資料可以使用 gzip 壓縮,大小通常會有 16384 位元組的上限。支援兩種格式:
#!
開始#cloud-config
開始以下提供幾個簡單的範例,完整的設定方式請詳閱 Modules - cloud-init
使用 users
建立使用者,並可以設定 sudo
權限,放入公鑰等等。
#cloud-config
users:
- default
- name: barfoo
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
ssh_import_id: None
lock_passwd: true
ssh_authorized_keys:
- <ssh pub key 1>
使用 write_files
把檔案放到目的地。
#cloud-config
write_files:
- path: /var/www/html/terraform.html
content: |
<h1>Provisioning via Terraform</h1>
要更新 apt 套件資料庫的話,要把 package_update
設定為 true
。
要安裝的套件全部列在 packages
下面。
#cloud-config
package_update: true
packages:
- nginx
- git