第 1 章:認識 Terraform 組態檔
組態檔範例
組態檔範例 main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "3.5.0"
}
}
}
provider "aws" {
profile = "default"
region = "ap-northeast-1"
}
resource "aws_instance" "example" {
ami = "ami-0461b11e2fad8c14a"
instance_type = "t2.micro"
}
- 第一個 terraform 區塊寫著需要的工具來源跟版本
- 第二個 provider 區塊寫著供應商 aws 相關的設定
- 第三個 resoucre 區塊寫著伺服器相關的設定
組態語言 (Configuration Language)
Terrform 採用名為 HCL (HashiCorp Configuration Language) 的組態語言來描述基礎架構。
HCL 是一種宣告式的語言,讓你直接寫下期望的基礎架構,而不是寫下過程的每一個步驟。
Terrform 組態語言的讓你更容易的宣告資源 (Resource),更可以把一系列的資源包裝成一個模組 (Module),藉此設計更龐大的架構。
我們來看下面這個範例,進一步了解 Terraform 的語法:
resource "aws_instance" "example" {
ami = "ami-0461b11e2fad8c14a"
instance_type = "t2.micro"
}
<BLOCK TYPE> "<RESOURCE TYPE>" "<LOCAL NAME>" {
# Block body
<ARGUMENT NAME> = <ARGUMENT VALUE> # Argument
}
區塊 Block
- 區塊的開頭是區塊類型 (Block Type),後面接著區塊標籤 (Block Label),隨著區塊種類的不同,標籤的數量會有差異。
- 這邊以
resource
的區塊為例,後面依續接著資源類型 (Resouce Type) 跟區域名稱 (Local Name) 兩 個標籤 - 資源類型 (Resouce Type): 要從供應商提供的服務清單中尋找,不同的供應商有著不同的資源類型
- 區域名稱 (Local Name): 就是自己定義的名稱,有效範圍只在這個模組內
- 區塊的內容用大括號
{ }
包起來,裡面有多個引數 (Argument)
引數 (Argument)
- 引數的格式是以名稱開始,接著一個等號,等號後面放值。
- 在不同資源類型中,有各自的必要 (Required) 引數,一定要寫好這需必要引數,整個組態檔才能夠正常使用
檔案編碼
- 首先,Terraform 的檔案必須是
UTF-8
編碼。
建立命名
- 使用
_
底線,小寫的英文字母,以及數字來命名資源。 - 使用單數名詞命名
- 避免型態名稱出現在命名中
- 好: resource "aws_route_table" "public"
- 壞: resource "aws_route_table" "public_route_table"
註解
- 單行註解以
#
字元開始 - 多行註解用
/*
跟/
符號包住
排版
- 自動格式化程式碼工具
terraform fmt
會自動處理排版風格: - 換行字元: 使用 Linux 格式 (LF)。
- 縮排: 使用兩個空白字元縮排。
- 等號對齊: 出現連續多行有使用等號的組態時,會對齊等號。
- 區塊內的引數順序:
- 同時出現引數跟區塊時,引數在前,區塊在後,中間間隔一行。
- 不同引數群組使用空行分隔。
- 同時出現引數 (arguments) 跟元引數 (meta-arguments) 時,最先放元引數,再放其他的引數,區塊型態的元引數在最後。
- 範例:
resource "aws_instance" "example" {
count = 2# 元引數最先
ami = "abc123"
instance_type = "t2.micro"
network_interface {
# ...
}
lifecycle {# 元引數區塊最後create_before_destroy = true
}
}
- 最外層的區塊之間都要間隔一個空行。
- 還有一些詳細的條件,就交給
terraform fmt