【问题标题】:Terraform pass the outputTerraform 传递输出
【发布时间】:2022-01-18 12:09:37
【问题描述】:

请帮助理解,我如何能够在不执行的情况下将输出从一个模块传递到另一个模块?

问题是,我在我的模块“A”上找到了这样的帐号:

data "aws_caller_identity" "current" {}

output "account_id" {
  value = data.aws_caller_identity.current.account_id
}

它运行良好,但是当我尝试使用模块“B”的此输出时 喜欢:

module "tgw" {
  source = "../moduleA/"
}

我在“B”帐户的当前 ID 上更新了 module.tgw.account_idvalue,但希望接收 A 帐户的输出帐户 ID。 有可能以某种方式做到这一点吗?

实现示例:

在帐户“A”(帐户 ID 111111111111)上,实现代码:

data "aws_caller_identity" "current" {}

output "account_id" {
  value = data.aws_caller_identity.current.account_id
}

在帐户“B”(帐户 id 222222222222)上,实现:

module "tgw" {
  source = "../moduleA/"
}

locals {
  account_a_id = module.tgw.account_id
}

预期结果:

 account_a_id = 111111111111

当前结果:

 account_a_id = 222222222222

【问题讨论】:

  • 您是否质疑我们如何将值从一个模块传递到另一个模块,或者您已经这样做了但它在错误的帐户中更新?
  • 不清楚你到底在问什么,但听起来你需要为模块声明一个变量,并提供第一个模块的输出作为第二个模块声明的输入。

标签: amazon-web-services terraform


【解决方案1】:

您的代码似乎只与 AWS 提供商的一个实例一起使用。在这种情况下,输出是预期的,因为 tgw 模块是在有权访问账户 B 的 AWS 提供商的情况下执行的。

例如,如果不在地图中硬编码帐号,我可以想到 2 个解决方法:

  1. 使用具有别名的多个提供程序。在 tgw 模块中显式使用提供程序来记帐 A,同时在其余代码中使用默认提供程序记帐 B。见https://www.terraform.io/docs/language/modules/develop/providers.html
  2. 将您的配置分成两部分,使用有权访问账户 A 的 AWS 提供商执行 tgw 模块。其余代码可以使用有权访问账户 B 的 AWS 提供商执行。只需添加远程状态数据并重用输出来自之前的单独运行。

对于一个有 2 个帐户的简单案例来说,这两种解决方法都显得有点过头了,因此请牢记最终目标。

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 2021-07-29
    • 2017-03-14
    • 2019-03-04
    • 2021-08-29
    • 2020-11-30
    • 2020-12-20
    • 2015-12-09
    相关资源
    最近更新 更多