【问题标题】:Terraform: use output of one module in another moduleTerraform:在另一个模块中使用一个模块的输出
【发布时间】:2022-07-11 22:13:38
【问题描述】:

我有一个名为 vpc 的模块和另一个名为 ecs 的模块。我正在尝试引用在 ecs 的 vpc 模块中创建的 AWS 子网。到目前为止,这是我所拥有的:

main.tf

module "ecs" {
  source = "./service/ecs"
  public_subnet_ids = module.vpc.ecs-public-subnet.ids
}

vpc.tf

resource "aws_subnet" "public-subnet-1" {
...
}
resource "aws_subnet" "public-subnet-2" {
...
}
output "ecs-public-subnet" {
  value = [
    aws_subnet.public-subnet-1.id,
    aws_subnet.public-subnet-2.id
}

ecs.tf

variable "public_subnet_ids" {
  type = list(string)
  description = "public subnets"
}

resource "aws_ecs_service" "foo" {
  name = "foo"
  ...
  network_configuration {
    ...
    subnets = ["${element(var.public_subnet_ids, count.index)}"]

当我执行计划时,我得到以下信息:

错误:在非计数上下文中引用“count”“count”对象 只能在“模块”、“资源”和“数据”块中使用,并且只能在“模块”、“资源”和“数据”块中使用 当设置了“count”参数时。

Terraform 版本 1.1.8, aws 提供程序版本 4.10.0

如果有更好的方法可以改变整个方法,我非常高兴。

【问题讨论】:

    标签: terraform


    【解决方案1】:

    count 用于当您使用一个旨在生成多个资源的块时。把它想象成循环的索引。您正在做的事情更简单,更容易 - 您正在将一个数组分配给一个接受数组的字段。

    首先,只需在模块定义中引用您的数组。 .ids 无效:

    module "ecs" {
      source = "./service/ecs"
      public_subnet_ids = module.vpc.ecs-public-subnet
    }
    

    接下来,您可以在模块中引用相同的数组:

    resource "aws_ecs_service" "foo" {
      name = "foo"
      ...
      network_configuration {
        ...
        subnets = var.public_subnet_ids
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2021-03-21
      • 2017-04-23
      • 2013-10-20
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多