Terraform 是廣為接受的工具,可用來將基礎架構定義為程式碼。該工具的主要功能之一是 Terraform 輸出,它使用戶能夠從 Terraform 配置中提取並顯示有用的資訊。
本文深入探討 Terraform 輸出的重要性、其語法與使用方式,以及強化基礎架構編碼專案的最佳做法。
了解 Terraform 輸出
假設您正在管理複雜的基礎架構,並需要在各種資源或外部系統之間分享關鍵資料。Terraform 輸出功能可讓您做到這一點。此功能能輕鬆地從您的 Terraform 配置中擷取並顯示寶貴資訊,並可讓您在不同模組、工作空間和外部系統之間分享。
Terraform 輸出會揭露 Terraform 所管理資源的寶貴資訊。然後,Terraform 輸出指令列工具可讓您擷取並顯示這些輸出值,然後您的基礎架構或外部系統的其他元件便可使用。
擁有 Terraform 輸出功能有多項優勢,主要:
- 資料分享:Terraform 輸出擅長於在 Terraform 配置和其他系統之間共享動態生成資源的屬性。假設您使用 Terraform 建立 EC2 執行個體。輸出區塊可以擷取公用 IP 位址,然後另一個 Terraform 設定可以用來設定安全群組規則,或是傳遞給外部設定管理工具。
- 自動化:輸出可為相依資源提供動態值,進而實現自動化配置管理。例如,如果您使用 Terraform 佈建資料庫伺服器,且動態指派資料庫連接埠,輸出區塊即可擷取此連接埠。然後,此擷取的連接埠可以在另一個設定中使用,以從網頁應用程式建立資料庫連線。
- 除錯與驗證:輸出不只是驗證資源狀態。在故障排除期間,您可以檢查輸出值,以找出可能造成相依流程問題的任何不一致或非預期的資源配置。
- 一致性:輸出可促進跨環境的一致性。透過參考輸出而非硬式編碼值,您可以在開發、測試和生產環境中維持相同的配置邏輯。
- 文件:輸出可作為一種文件形式,提供有關 Terraform 所提供基礎架構的清晰、簡潔資訊。這對需要了解系統的其他工程師或團隊來說,特別重要。
Terraform 輸出的語法和使用
Terraform 輸出定義於使用輸出區塊的組態檔案中。以下是語法細分:
output "<name>" {
value = <expression>
}
|
- <name>:這是輸出變數的使用者定義名稱。選擇能反映其所持有資料的描述性名稱。
- <expression>:這是 Terraform 運算式,可計算您要曝光的值。它可以參考資源屬性、使用函數或執行計算。
輸出範例
以下 AWS 實例範例顯示如何將 Terraform 輸出顯示為不同的資料類型:
output "instance_id" {
value = aws_instance.example.id
}
|
output "instance_count" {
value = length(aws_instance.example)
}
|
output "instance_ips" {
value = aws_instance.example[*].public_ip
}
|
output "instance_tags" {
value = {
for instance in aws_instance.example :
instance.id => instance.tags
}
}
|
參考程式碼中的輸出
定義好之後,你就可以使用 Terraform 程式碼中的輸出名稱來參考輸出。以下是範例:
module "example_module" {
source = "./modules/example"
# Reference the output from another module
instance_id = var.other_module_name.instance_id
}
|
在本範例中,example_module 參考了名稱為 other_module_name 的另一個模組的 instance_id 輸出。如此可示範輸出如何促進模組之間的通訊與資料交換。