繁体   English   中英

如何将 Terraform 模块 output 值作为输入值引用到另一个模块

[英]How to reference Terraform module output value as a input value to another module

每个人。 不幸的是,我正在使用 Terraform v1.2.6 和 aws 提供程序 v4.24.0。 我陷入了从另一个模块引用模块 output 的值。

我的 VPC 模块为子网的 id 生成 output 值,该值在 3 个可用区中作为列表类型提供。

所以,我想用这个值作为计数变量来提供 ENI 资源的数量。 但是当我将它分配给一个变量并使用 length() function 将其更改为计数变量时,计数变量始终为 0。这是我的问题。

下面是我的 Terraform 代码的一些代码片段。

module "vpc" {

  # Relative path references
  source = "sre-iac-modules/network/vpc"

  region_id = "${var.region_id}"
  env = "${var.env}"
  service_code = "${var.service_code}"
  
  common_tag = {
      CreatedBy = "${var.common_tag.CreatedBy}",
      PeriodFrom = "${var.common_tag.PeriodFrom}",
      PeriodTo = "${var.common_tag.PeriodTo}",
      CostCenter = "${var.common_tag.CostCenter}",
      Project = "${var.common_tag.Project}"
  }


  vpc = {
      cidr_block = "${var.vpc.cidr_block}", 
      protected_subnet_a_cidr = "${var.vpc.protected_subnet_a_cidr}", 
      protected_subnet_b_cidr = "${var.vpc.protected_subnet_b_cidr}" 
      protected_subnet_c_cidr = "${var.vpc.protected_subnet_c_cidr}",
      tgw_subnet_a_cidr = "${var.vpc.tgw_subnet_a_cidr}",
      tgw_subnet_b_cidr = "${var.vpc.tgw_subnet_b_cidr}",
      tgw_subnet_c_cidr = "${var.vpc.tgw_subnet_c_cidr}",
      workload_subnet_a_cidr = "${var.vpc.workload_subnet_a_cidr}", 
      workload_subnet_b_cidr = "${var.vpc.workload_subnet_b_cidr}",
      workload_subnet_c_cidr = "${var.vpc.workload_subnet_c_cidr}", 
      redis_subnet_a_cidr = "${var.vpc.redis_subnet_a_cidr}",
      redis_subnet_b_cidr = "${var.vpc.redis_subnet_b_cidr}",
      redis_subnet_c_cidr = "${var.vpc.redis_subnet_c_cidr}",
      db_subnet_a_cidr = "${var.vpc.db_subnet_a_cidr}",
      db_subnet_b_cidr = "${var.vpc.db_subnet_b_cidr}",
      db_subnet_c_cidr = "${var.vpc.db_subnet_c_cidr}"
  }

}
 


module "nat" {

  # Relative path references
  source = "sre-iac-modules/network/nat"

  region_id = "${var.region_id}"
  env = "${var.env}"
  service_code = "${var.service_code}"

  target_subnets = module.vpc.protected_subnet_ids

  use_managed_nat = true

  depends_on = [module.wink_vpc]
  
 
}

这是terraform console命令结果。

❯ terraform console
> module.vpc
{
  "db_subnet_ids" = [
    "subnet-036b19638fd57d03b",
    "subnet-0989e9ecb9ca2a146",
    "subnet-060db32b53559ecfb",
  ]
  "db_subnet_route_table_ids" = [
    "rtb-0b3b9b2726675bc9b",
    "rtb-0bba77cb702e60156",
    "rtb-0cce30f5509eb3505",
  ]
  "igw_id" = "igw-01fd17f6c7c98059a"
  "protected_subnet_ids" = [
    "subnet-0ac643148503ed0b5",
    "subnet-039f527ad5e194b01",
    "subnet-07523fedcb50084a3",
  ]
  "protected_subnet_route_table_ids" = [
    "rtb-0b58c7fc7cd4f8957",
    "rtb-00f85f75400856328",
    "rtb-04663eb73a6a1ff87",
  ]
  "redis_subnet_ids" = [
    "subnet-0dfe56e866f34bc77",
    "subnet-013b60ff183f7192f",
    "subnet-0e51997c9f4548b8a",
  ]
  "redis_subnet_route_table_ids" = [
    "rtb-03ce16be7d7d5538c",
    "rtb-094ed4728b7f4dff7",
    "rtb-0982f508e27559720",
  ]
  "tgw_subnet_ids" = [
    "subnet-0c1508e5e554213e9",
    "subnet-0c0bd659eddac8e0d",
    "subnet-042d5ee2600ba360e",
  ]
  "tgw_subnet_route_table_ids" = [
    "rtb-01b5b1374a1cc161e",
    "rtb-0e2d7cdda12ae23f8",
    "rtb-02291036ba98b4b25",
  ]
  "vpc_id" = "vpc-034f718a9ca96bc95"
  "workload_subnet_ids" = [
    "subnet-087dd412ade2d7b79",
    "subnet-01d0466a843c8249b",
    "subnet-048c4a07d0d1a9fbd",
  ]
  "workload_subnet_route_table_ids" = [
    "rtb-0aafae15877f17c77",
    "rtb-08d65c618047f6007",
    "rtb-05a70c48904e6f7a3",
  ]
}
> module.vpc.protected_subnet_ids
[
  "subnet-0ac643148503ed0b5",
  "subnet-039f527ad5e194b01",
  "subnet-07523fedcb50084a3",
]
>

NAT 模块中的代码片段..

...

resource "aws_eip" "nat-gw-eip" {
  count = length(var.target_subnets)
  vpc      = true
}

....

计数的结果始终为零。

我很好奇为什么计数变量为零。 它应该是三个,因为module.vpc.protected_subnet_ids在列表中有三个项目。

请让我知道原因以及如何获得正确的结果。

先感谢您。

Hello, everyone

这是我的错。 最后,我找到了将空列表 [] 分配给变量target_subnets的代码片段。 感谢您的时间。

不管怎样,你的评论对我很有帮助。

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM