簡體   English   中英

Terraform:ingress_with_source_security_group_id 與 computed_ingress_with_source_security_group_id

[英]Terraform: ingress_with_source_security_group_id vs. computed_ingress_with_source_security_group_id

Terraform 模塊terraform-aws-modules/security-group/aws支持兩個輸入變量。

1. ingress_with_source_security_group_id

描述:使用“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
    },
  ]


2.computed_ingress_with_source_security_group_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM