1 回答

TA貢獻1840條經驗 獲得超5個贊
聲明標頭中給出的資源名稱用于 Terraform 自己的跟蹤,并且不可用于提供程序代碼。
造成這種情況的一個重要原因是,所討論的名稱本身沒有用:它僅在完整資源實例地址的上下文中有用,在本例中是有用的,但在更實際的配置中可能會更復雜,example_server.bob
例如example_server.bob[0]
,module.foo.example_server.bob
, module.foo["bar"].example_server.bob[15]
, 等
如果由 表示的遠程對象類型需要遠程系統中的example_server
唯一名稱,則建模的方法是為資源聲明一個參數(通常稱為,但您可以將其命名為對相關系統有意義的任何名稱)并具有用戶選擇將其設置為:name
resource "example_server" "bob" { name = "bob"}
用戶可能決定將這兩個名稱設置為與我上面顯示的相同,但在實際配置中很少合適,因為通常name
屬于遠程系統中比 Terraform 配置中的資源名稱更廣泛的命名空間,因此用戶將希望將其設置為包含一些附加上下文的名稱,以確保適當的唯一性,以避免單獨配置和同一配置中單獨模塊之間的沖突。
如果您想使用 name 參數值作為 id 那么您可以將其復制過來:
d.SetId(d.Get("name"))
這是在不為每個對象分配代理鍵,而是使用對象的唯一名稱作為唯一標識符的系統中表示對象的常見選擇。
Terraform 在每次應用后將您返回的數據與保存的狀態快照中的完整資源地址相關聯,因此作為提供程序開發人員,您根本不需要擔心資源地址:Terraform 將為您提供上次返回的任何數據以便您可以用它來計劃下一步的操作。
- 1 回答
- 0 關注
- 110 瀏覽
添加回答
舉報