[英]Terraform: ingress_with_source_security_group_id vs. computed_ingress_with_source_security_group_id
Terraform 模塊terraform-aws-modules/security-group/aws支持兩個輸入變量。
描述:使用“source_security_group_id”創建的入口規則列表
示例:( 源代碼)
ingress_with_source_security_group_id = [
{
rule = "mysql-tcp"
source_security_group_id = data.aws_security_group.default.id
},
{
from_port = 10
to_port = 10
protocol = 6
description = "Service name"
source_security_group_id = data.aws_security_group.default.id
},
]
描述:使用“source_security_group_id”創建的計算入口規則列表
示例( 源代碼)
computed_ingress_with_source_security_group_id = [
{
rule = "postgresql-tcp"
source_security_group_id = module.main_sg.security_group_id
},
{
from_port = 23
to_port = 23
protocol = 6
description = "Service name"
source_security_group_id = module.main_sg.security_group_id
},
]
他們之間有什么區別?
什么是計算入口規則?
這在“無法計算 'count' 的值”的注釋中進行了解釋,並且與 TF 0.11 的限制有關。 從鏈接:
計算值是作為模塊輸出提供的值。 非計算值是所有其他值 - 靜態值、作為變量引用的值和來自數據源的值。
當您需要在安全組規則參數中指定計算值時,您需要使用以 computed_ 開頭的參數來指定它,並在以 number_of_computed_ 開頭的參數中提供許多元素
我得到它。
@ryan,我確定你現在知道這一點,但對我來說我也很困惑。 所以希望這對其他人有幫助。
Computed,似乎意味着“我將需要在我的組中使用輸出數據,並且在編寫代碼時不會擁有所有可用數據”。 本質上,這意味着您要參考模塊輸出的值。 模塊輸出在運行之前不可用。
所以在這個例子中,注意module.main_sg.security_group_id
。 這是需要計算的部分,因為它來自另一個模塊輸出。 例如,在 terraform 運行之前它不會具有該值,然后它可以從該模塊中獲取輸出。
computed_ingress_with_source_security_group_id = [
{
rule = "postgresql-tcp"
source_security_group_id = module.main_sg.security_group_id
},
{
from_port = 23
to_port = 23
protocol = 6
description = "Service name"
source_security_group_id = module.main_sg.security_group_id
},
]
所以,如果你不在這里使用computed_
,代碼就會中斷,因為它無法獲取module.main_sg.security_group_id
的值。
當您在代碼運行之前擁有所有可用值時,如您的第一個示例所示,例如source_security_group_id = data.aws_security_group.default.id
那么您不需要使用computed_
。 這意味着它不必通過額外的功能來解析這些值,因為它們已經在某處靜態指定。 在這種情況下,它在數據資源等中靜態指定。
所以計算意味着,當 terraform 運行此代碼時,它需要等到它獲得輸出數據,然后才能計算此安全組的值實際上是什么,因為這些值是動態的,並且依賴於 terraform 代碼才能運行看到它們,因此它需要在運行時“計算”它們。
我還有一個例子。
在這里,這段代碼需要來自另一個模塊的值,你不能說,因為它在 main.tf 中獲取了它。
computed_ingress_with_cidr_blocks = [{
from_port = 53
to_port = 53
protocol = "udp"
description = "Domain Name System (DNS) access"
cidr_blocks = var.priv_cidr_block
},{
...
cidr 塊取自 vpc 模塊。
那么出口規則如下
egress_with_cidr_blocks = [{
from_port = 9389
to_port = 9389
protocol = "tcp"
description = "OPEN egress, all ports, all protocols"
cidr_blocks = "0.0.0.0/0"
}]```
Notice, theres only static values in there, so no need to "compute" any values, it already is, what it is...
HTH.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.