Terraform Output 介紹
前面的內容中,我們已經介紹了資源、依賴關系和變量,這節我們將探索輸出值(Output)。
什么是輸出值
輸出值類似于常見的編程語言中的返回值。通過輸出值,您可以在命令行的輸出中查看您創建的基礎設施資源的信息。
輸出值有多個用途。最常見的場景是在 apply 之后在運行日志中打印出根模塊資源的屬性,比如,ECS 實例的大多數詳細信息是在 apply 時計算的,因此只能在創建后進行推斷。
除此之外,輸出值還用于將一個資源生成的信息傳遞給另一個資源。例如,你可以將 ECS 實例的特定屬性的值(如IP地址)提取到另一個需要該信息的資源(如安全組規則)中。
輸出值的語法
輸出值用 output 塊聲明。你可以在 Terraform 配置文件的任何地方聲明輸出值,但推薦的最佳實踐是將它們聲明在名為 outputs.tf 的單獨文件中。
關鍵字 'output' 旁邊的標簽為輸出值的名稱。和變量名稱一樣,輸出值的名稱在當前模塊中必須是唯一的。output塊內可以包含的參數有以下幾種:
value
這是一個必需參數,向模塊的用戶返回一個值
description
這是一個可選參數,用于提供輸出目的和預期值的說明。description 常用于文檔描述。
sensitive
這是另一個可選參數,用于掩蓋資源屬性的值。當需要隱藏一些需要保密的資源屬性(如密碼信息、Access Secret Key)時,此參數很有用。
在如下的例子中,我們為名為 my-vpc 的對象聲明了一個輸出值 vpc_id:
# 創建 VPC
resource "alicloud_vpc" "my-vpc" {
vpc_name = "tf-vpc"
cidr_block = "10.0.0.0/16"
}
output "vpc_id" {
value = alicloud_vpc.my-vpc.id
}
運行 terraform apply 成功之后,my-vpc 的 ID 將顯示在屏幕上:
除此之外,對于已經創建成功的資源,你可以通過運行 terraform output 命令隨時查詢項目中使用的所有輸出值。
輸出值的最佳實踐
當聲明輸出值的時候,我們提供一下幾條建議:
僅輸出有用的信息
僅輸出有用的信息,例如計算出的信息,避免輸出只是重復的變量值或提供的已知信息的值。例如,對于網絡資源,以下計算屬性是有用的:
id,它是資源的標識符
router_id,它是 VPC 創建成功后系統自動創建的路由器的標識符
route_table_id,它是 VPC 創建成功后系統自動創建的路由表的標識符
和變量一樣,提供有意義的名稱和描述
將代碼組織起來,將所有輸出值包含在名為outputs.tf的文件中
標記敏感輸出
不要嘗試手動加密敏感值,而是依賴于內置的敏感狀態管理來支持。將敏感值設置到輸出值時,要確保這些值被標記為敏感。當一個值被標記為敏感時,該數據將在 terraform plan 或 terraform apply 命令的輸出中將被掩蓋。