2017-08-16 73 views
3

我想設置Terraform來管理開發/階段/產品環境。所有環境中的基礎設施都是相同的,但每個環境中的變量都存在差異。理想的terraform工作區項目結構

現在Terraform 0.10中已經引入了工作空間,理想的Terraform項目結構是什麼樣的?在命名/標記基礎設施時如何參考工作區?

回答

2

我不推薦在靜態環境中使用工作空間(以前稱爲「環境」),因爲它們添加了一點點複雜性並且難以跟蹤。

您可以在所有環境中使用單個文件夾結構,使用工作區來分隔環境,然後使用基於工作區的條件值來設置差異。在實踐中(特別是超過2個環境導致嵌套三元語句),您可能會發現難以管理。

相反,我仍然會爲每個靜態環境提倡單獨的文件夾,並使用符號鏈接來保持所有.tf文件在所有環境中都相同,並提供一個terraform.tfvars文件以在每個環境中提供任何差異。

我會推薦用於動態環境的工作空間,例如短暫的審查/實驗室環境,因爲這可以提供很大的靈活性。我目前正在使用它們在Gitlab CI中創建審閱環境,因此每個分支都可以有一個可選的部署審閱環境,可用於手動集成或探索性測試。

1

在舊世界中,當運行terraform時,您可能已經在var'environment'中傳入,您將在.tf文件中插入內容爲"${var.environment}"

當使用工作區,也沒有必要在環境變量來傳遞,你只要確保你是在正確的工作區,然後你.tf文件內插值與"${terraform.workspace}"

至於你如何管理所有的變量,我建議使用varmap,像這樣:

variable "vpc_cidr" { 
    type = "map" 

    default = { 
    dev = "172.0.0.0/24" 
    preprod = "172.0.0.0/24" 
    prod = "172.0.0.0/24" 
    } 
} 

這將隨後在aws_vpc資源引用使用查找

"${lookup(var.vpc_cidr, terraform.workspace)}" 

創建和選擇工作的過程是很容易的:

terraform workspace 
Usage: terraform workspace 

    Create, change and delete Terraform workspaces. 


Subcommands: 

    show  Show the current workspace name. 
    list  List workspaces. 
    select Select a workspace. 
    new  Create a new workspace. 
    delete Delete an existing workspace. 

所以創建預生產新的工作區,你會做到以下幾點: terraform workspace new preprod

,如果你跑了一個計劃,你會發現應該沒有資源。這將在後端做什麼是創建一個新的文件夾來管理'preprod'的狀態。

+1

在之前的項目中,我們使用文件夾來區分不同的環境。所以有一個名爲模塊的文件夾與所有模塊,然後在提供程序文件夾中,我們爲每個環境(DEV,TEST,PREPRD,...)創建了單獨的文件夾。工作區是否意味着這不再是必要的?因爲我認爲TF網站上的解釋有些模糊。 – Bjorn121

+0

@ Bjorn121這是我試圖找出,他們的網站上的文檔似乎說這仍然是從我的理解推薦。他們的最佳實踐回購也過時了。你有沒有發現它? –