在根模块中使用 aws_vpc 数据源的 Terraform 鸡/蛋问题

2024-01-07

我有一个根 Terraform 模块,它声明了 VPC 模块和其他模块,例如要在 VPC 中启动的 EC2 实例。

在 EC2 模块中,我使用以下命令读取 VPCaws_vpc type:

data "aws_vpc" "vpc" {
  filter {
    name  = "tag:Name"
    values = [var.name_tag]
  }
}

现在,如果我独立声明模块,则效果很好。

但是当声明一个单独声明这些其他模块的根模块时,我遇到了这个失败:

▶ terraform apply
module.cloudwatch.data.aws_ami.ami: Refreshing state...
module.backend.data.aws_vpc.vpc: Refreshing state...
module.backend.data.aws_ami.ami: Refreshing state...

Error: no matching VPC found

  on .terraform/modules/backend/main.tf line 1, in data "aws_vpc" "vpc":
   1: data "aws_vpc" "vpc" {

所以这里就存在先有鸡还是先有蛋的问题。

我很困惑。这怎么可能行得通呢?如果根模块无法既声明 VPC 又使用aws_vpc数据源以后要把它读入其他模块,这些数据源有什么用呢?我希望得到有关最佳实践的建议。我应该不使用aws_vpc而是在其他地方读取 VPC ID 作为输出?


对我来说,这听起来像是您在声明两个资源,例如

resource "aws_vpc" "example" {}

和数据提供者一样

data "aws_vpc" "example" {}

为了从数据中访问某些内容,例如data.aws_vpc.example.arn。这是不需要的,实际上会导致您的错误。如果两者处于相同的地形状态,您只需删除data "aws_vpc" "example" {}并通过例如引用资源resource.aws_vpc.example.arn.

实际上,仅当您引用在其他地方创建的资源(例如通过不同的配置引擎(或也通过 terraform,但在不同的层中)手动创建的资源)时,才需要数据提供程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在根模块中使用 aws_vpc 数据源的 Terraform 鸡/蛋问题 的相关文章

随机推荐

  • std::wstring 在 Windows 上支持 UTF-16 和 UTF-32 吗?

    我正在学习 Unicode 并有几个问题希望得到解答 1 我在 Linux 上读到过 std wstring是 4 字节 而在 Windows 上是 2 字节 这是否意味着 Linux 内部支持UTF 32而Windows则是UTF 16
  • 使用 Notepad++、Regex 重构 CSV 数据

    我有一个 CSV 文件 其中包含以下标题和 示例 数据 StopName RouteName Travel Direction Latitude Longitude StreetA StreetB 1 NameA DirectionA La
  • Tensorflow Precision、Recall、F1 - 多标签分类

    我正在尝试使用张量流实现多标签句子分类模型 大约有 1500 个标签 该模型运行得很好 但我不确定它生成的指标 这是生成指标的代码段 with tf name scope loss losses tf nn softmax cross en
  • 带有第三方库的 Typescript 3 项目参考(来自 npm)

    我正在使用 Typescript 并尝试与服务工作者建立后台同步 有人建议我应该这样做this https stackoverflow com a 52377959 6683308 您可以使用单独的 tsconfig json 文件将项目拆
  • Eclipse 未运行 JavaFX 应用程序 - 运行“java”应用程序

    每当我在 Eclipse 中创建项目并包含 javafx 时 当我单击运行按钮时 应用程序不会加载 e g package test import javafx application Application import javafx e
  • 如何获取网站的 Bing 搜索 Api 和 AppID [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已经创建了我想要使用的网站必应搜索 API 为此它需要AppID但我没有得到AppID 我尝试通过创建在 天蓝色市场 上创建一个AppId窗口实时I
  • 如何在 spring 4.* 中通过注解创建多个字段的约束验证器

    以 spring 4 为例 如何通过注解为更多字段创建验证器限制 UniqueValidator Entity Table name persons UniqueValidator message Peson already exist c
  • 根据语言更改字体大小

    所以我读了一些关于 css 语言标签的建议 但似乎一切都需要提前将语言放入标签中 我无法更改韩语语言的 html 标签 它与英语具有相同的 h1 标签 这是因为它是同一网站的翻译版本 我希望韩语版本的字体和字体大小与英语版本不同 我可以仅通
  • Javafx ListView 使用图像而不是字符串

    我正在尝试在我的程序中制作带有电影图片的横幅 但我无法将带有图像网址的列表转换为实际图像 我该如何做到这一点 这是我当前的代码 public void initData boolean onlineProvider String urite
  • 用于将执行 xml 计划可视化为 HTML 的工具

    是否有任何工具 XSLT 样式表可将 Microsoft Visual Studio 返回的 XML 执行计划转换为 HTML 如果做不到这一点 有谁知道有什么技术可以用来显示适合显示执行计划的 HTML 图表 我找不到所以我自己做了一个
  • “URL 安全的 CSRF 令牌现在是默认的”警告

    我最近从 Rails 6 升级到 7 尽管我已经urlsafe csrf tokens设置为真 config initializers new framework defaults 6 1 rb Rails application conf
  • 如何使用 AsyncTask 类更新将文件复制到另一个目录的进度?

    我应该如何使用 AsyncTask 类和进度条来执行将文件复制到手机 SD 卡本地上下文中的另一个目录的过程 我在 这里 1 看到了一个类似的例子 但我不知道如何合并差异 修改代码的上下文以适应我的上下文以使其工作 会是这样的 Params
  • 国际化 HelloWorld 程序 .NET

    我有一个小型测试应用程序 它有 2 个资源文件 Resources resx Resources de DE resx 具有完全相同的字符串名称 但将字符串转换为德语 对于我的表单 我将 Localize 属性设置为 true 在我的应用程
  • Postgresql 转储权限被拒绝

    我在尝试转储数据库时收到此错误 我输入 linuxuser sudo su postgres linuxuser sudo password for linuxuser pg dump h localhost mydb gt tempfil
  • 枚举不应该在 API 中使用吗?

    我正在使用提供给我的已编译的 C 库 我对编译库时使用的编译器 版本 选项等的信息有限 库接口使用enum既可以在传递的结构中 也可以直接作为传递的参数 问题是 如何确保或确定当我编译代码以使用提供的库时 我的编译器将为这些库使用相同的大小
  • 如何将 Gradle 中的原生 JUnit 5 支持与 Kotlin DSL 结合使用?

    我想将内置 JUnit 5 与 Gradle Kotlin DSL 一起使用 因为在构建过程中我收到此警告 WARNING The junit platform gradle plugin is deprecated and will be
  • 所有构建的 gcloud 步骤超时的全局限制在哪里设置?

    在哪里可以找到 gcloud 构建步骤超时的全局限制 这是我的 gcloud 构建配置 steps name gcr io cloud builders yarn name gcr io cloud builders yarn args b
  • 在 yaml.dump Python 中强制引用

    在我进入之前 是的 我已经研究过它并且知道 YAML 不区分引号和非引号 而只是按原样获取类型 坦率地说 我认为没有引号更好 但不幸的是这不是我需要的 所以请尝试理解我have研究了这个问题 但仍然需要我的字符串对象周围的引号 在我的代码中
  • readAsDataURL 不处理 captureAudio 中的文件

    我的 FileReader 对象可以完美上传图像 我正在追踪onload以及其他事件 这些都在我上传图像时发生 fileReader new FileReader fileReader onloadstart e gt window ale
  • 在根模块中使用 aws_vpc 数据源的 Terraform 鸡/蛋问题

    我有一个根 Terraform 模块 它声明了 VPC 模块和其他模块 例如要在 VPC 中启动的 EC2 实例 在 EC2 模块中 我使用以下命令读取 VPCaws vpc type data aws vpc vpc filter nam