terraform - 引用在不同文件夹中创建的 Terraform 资源
问题描述
我有以下文件夹结构:
infrastructure
└───security-groups
│ │ main.tf
│ │ config.tf
│ │. security_groups.tf
│
└───instances
│ main.tf
│ config.tf
│ instances.tf
我想通过引用来引用在 security-groups 文件夹中实例化的安全组 ID。我试图在 security_groups.tf 文件中输出所需的 ID
output "sg_id" {
value = "${aws_security_group.server_sg.id}"
}
然后在实例文件中将其添加为模块:
module "res" {
source = "../security-groups"
}
这种方法的问题是,当我在实例文件夹中执行 terraform apply 时,它也会尝试创建安全组(我已经通过在 security-groups 文件夹中执行 terraform apply 创建了该安全组)并且它失败了,因为 SG 是现存的。
在不更改代码结构的情况下,引用在不同文件夹中创建的资源的最简单方法是什么?
谢谢你。
解决方案
要引用现有资源,您需要使用data
块。您不会直接引用其他文件夹中的资源块,而是指定名称或 ID 或它具有的任何其他唯一标识符。所以对于一个安全组,你会添加类似
data "aws_security_group" "sg" {
name = "the-security-group-name"
}
到您的实例文件夹,并引用该实体以将您的实例与该安全组相关联。
您还应该考虑是否真的只想将 terraform 应用到整个树,而不是单独应用每个文件夹。然后,您可以像尝试那样直接在所有托管资源之间进行引用,而不必terraform apply
多次调用。
推荐阅读
- php - 如何在一个 div 中加载 WooCommerce 交叉销售和购物车抵押品
- jquery - jQuery:多击中断动画
- reactjs - 处理状态中的动态选择组件
- typescript - 使用绑定时强制输入
- python - 如何使txt文件中的每一行成为一个列表?
- python - 我正在尝试使用 pip install Scrapy 安装 scrapy。但我收到错误,因为需要 Microsoft Visual C++ 14.0
- rust - 具有共享状态的生命周期
- django - 列表视图中来自不同模型的 Django 列表数据具有正确的顺序
- wordpress - Woocommerce 产品捆绑翻倍
- java - 无法从 jar 文件中找到 Premain-Class 清单属性