睡睡念
經歷上一篇的失敗,
還是先從基本觀念開始吧。
正文
tf基本組成
宣告
- terraform
宣告terraform以及環境的版本
terraform {
required_version = "~>0.13.5"
required_providers {
ucloud = {
source = "ucloud/ucloud"
version = "~>1.22.0"
}
}
}
- provider
呼叫該環境api時需要的參數
k8s
provider "kubernetes" {
config_path = "~/.kube/config"
}
ucloud
provider "ucloud" {
public_key = "JInqRnkSY8eAmxKFRxW9kVANYThg1pcvjD2Aw5f5p"
private_key = "IlJn6GlmanYI1iDVEtrPyt5R9noAGz41B8q5TML7abqD8e4YjVdylwaKWdY61J5TcA"
project_id = "org-tgqbvi"
region = "cn-bj2"
}
定義
- data
取得terraform以外的資訊,不同的proivder提供不同的data sources。
provider 列表
data "ucloud_security_groups" "default" {
type = "recommend_web"
}
- resource
要建立的資源
resource "ucloud_eip" "web-eip" {
internet_type = "bgp"
charge_mode = "bandwidth"
charge_type = "dynamic"
name = "web-eip"
}
- output
輸出
output "eip" {
value = ucloud_eip.web-eip.public_ip
}
狀態檔案(tfstate)
當terrform要執行變更時,會產生tfstate的檔案,
上面記載了目前雲上的資源狀態,此檔案不建議編輯,
當有任何資源變更時,會同步判斷目前雲上的資源狀態是否一致。
可使用以下指令,匯入目前雲端上的資源狀態
terraform import kubernetes_deployment.websocketclient default/websocketclient
kubernetes_deployment.websocketclient 為tf的資源名稱
default/websocketclient 是雲上的資源
此tfstate的檔案是明碼,且多人使用會造成簽入時發生衝突,
所以要透過backend來解決這個問題
檔案裡面會看到一些狀態,代表的意思如下
+
代表新增的資源 (Resource added)-
代表刪除的資源 (Resource deleted)~
代表修改的資源 (Resource modified)=
代表資源參數的值沒有改變,只是調整了排序 (Resource parameter unchanged, only ordering changed)-/+
同時出現,表示毀壞性變更,先刪除後建立
![[148-fig.2.jpg]]
遠端狀態儲存機制(Backend)
Terraform Remote Backend分為兩種:
- 標準:支援遠端狀態儲存與狀態鎖
狀態鎖是指,當針對一個tfstate進行變更操作時,可以針對該狀態檔案新增一把全域鎖,確保同一時間只能有一個變更被執行。
- 增強:在標準的基礎上支援遠端操作(在遠端伺服器上執行plan、apply等操作)
只存在於Terraform Cloud
目前支援的backend list
![[148-fig.1.jpg]]
要共用 backend的話,
先建立一個 backend.hcl
裡面輸入
bucket = "98c2c8-terraform-backend"
prefix = "terraform/state"
在main.tf的required_providers後面填上 backend “gcs” { },
格式如下
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "4.63.1"
}
}
backend "gcs" {
}
}
然後在初始化的時候,輸入
terraform init -backend-config=backend.hcl
ref. Backend組態的動態賦值
建立workspace
相比起多資料夾隔離的方式來說,基於Workspace的隔離更加簡單,只需要保存一份程式碼,在程式碼中不需要為Workspace編寫額外程式碼,用命令列就可以在不同工作區之間來回切換。
下列指令分別為,建立、列表、選擇及顯示目前的workspace
terraform workspace new qa
terraform workspace list
terraform workspace select qa
terraform worspace show
ref. 狀態管理
檢查terraform 的計劃
terraform plan -out=out.tfplan
-out的指定計畫的輸出檔,確保您所檢閱的方案就是所套用的方案。
之後使用apply執行
terraform apply out.tfplan
建立完成後,使用show看目前狀態
terraform show
count
舉例來說, 兩個VM是一隻狗一隻貓,那就是dog.tf cat.tf
如果是兩隻狗 就可以寫一個 dog.tf
裡面用
resources ec2
Count = 2
這樣
console
執行 console ,看程式執行結果
terraform console
cidrsubnet 後面的第二個參數表示二進位要位移多少,第三個參數表示,要設定位移的數字為多少。
例如 10 = 1010
位移4bit,所以是 1010 0000 = 160
6 = 0110
位移4bit ,所以是 0110 0000 = 96
tf console
> cidrsubnet("10.1.0.0/24",4,0)
"10.1.0.0/28"
> cidrsubnet("10.1.0.0/24",4,10)
"10.1.0.160/28"
> cidrsubnet("10.1.0.0/24",4,6)
"10.1.0.96/28"
> cidrsubnet("10.1.0.0/24",4,12)
"10.1.0.192/28"
0 意見:
張貼留言