【问题标题】:Terraform - share outputs between foldersTerraform - 在文件夹之间共享输出
【发布时间】:2021-02-27 10:24:20
【问题描述】:

我有以下用于 terraform 的文件夹结构:

地形

--dev
----- main.tf
----- s3
--------- main.tf
--------- s3_create_bucket_1.tf
----- lambda 
---------- main.tf
---------- create_lambda_1.tf

在 create_lambda_1.tf 中,我可以使用在根文件夹 (dev) 中创建的资源的输出。但是,我想知道如何使用在文件夹 s3 中创建的输出(与 lambda 处于同一级别)?

或者更一般地说,我了解最佳做法建议使用文件夹来构建代码。但是我找不到任何关于如何在文件夹之间传递信息的信息? (在上面的示例中,如何动态获取在 s3 文件夹中创建的存储桶的 .arn)

提前致谢。

/Luminita

【问题讨论】:

  • 你遇到过数据源吗?您可能需要 aws_s3_bucket 数据源,它允许您在给定存储桶名称的情况下查找 ARN。

标签: amazon-s3 aws-lambda terraform


【解决方案1】:

你好忘记文件夹,如果你创建一个输出,它将保存在 tfstate 中,你可以使用

data "terraform_remote_state"

这是ref

你可以在任何你想要的地方使用输出例如:

data "terraform_remote_state" "vpc" {
 ...
}

resource "aws_instance" "foo" {
  # ...
  subnet_id = data.terraform_remote_state.vpc.outputs.subnet_id
}

【讨论】:

  • 当有原生数据源(如本例中的aws_s3_bucket数据源)可用时,请停止推荐使用远程状态数据源。远程状态在这些出现之前很有用,但现在已经超过 4 年了,远程状态作为数据源比直接本地数据源更复杂。它可以在极少数情况下很有用,您需要在 Terraform 运行之间共享数据,这些数据不被数据源公开,但这些数据非常有限。
  • @ydaetskcoR 我理解您对远程状态的感受,但您说的好像只有 s3 存储桶中的 tfstate 文件至少有 6 种使用 tfstate 的方法,请更准确。如果我使用 http 会怎样作为我的 tfstate 的后端,aws_s3_bucket 可以工作吗?并且仅供参考,我也不使用远程状态,我使用 terragrunt 依赖项。我们可以为 tfstate 使用多个后端,您的建议仅适用于 1 个特定案例:)
  • 如果您使用aws_s3_bucket 数据源,则远程状态无关紧要,因为它只是运行HeadBucket API 调用来检查该信息。所以你根本不需要使用远程状态(这是一个坏主意),或者你可以使用任何后端,因为它根本没有链接到这个。
  • 对不起,我说的是一般情况,我认为您的意思是从数据源 aws s3 存储桶中获取 tfstate itelt。无论如何,我明白你想说的话。就像我说的那样,对某些人来说,管理远程 tf 状态可能很困难。我的观点是管理 tfstate 可能很困难,但管理 tfstate 上的读取访问权限比管理对数据源要传递的所有资源的读取访问权限以及当您说“数据源未公开但这些是非常有限”我认为您是在谈论 AWS。这与其他提供商不同。
  • 各位,谢谢大家的回答!但是,我是 terraform 的初学者,在这里关注您的讨论并不容易。
猜你喜欢
  • 2021-06-24
  • 2021-08-03
  • 2021-09-24
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 2012-08-03
  • 2020-03-16
  • 1970-01-01
相关资源
最近更新 更多