1

我是 Terraform 的新手,并试图了解数据源。我已经阅读了文档和这个 StackOverflow帖子,但我仍然不清楚数据源的用例。

我有以下代码块:

resource "azurerm_resource_group" "rg" {
  name     = "example-resource-group"
  location = "West US 2"
}


data "azurerm_resource_group" "test" {
  name = "example-resource-group"
}

但我收到 404 错误:

  • data.azurerm_resource_group.test:data.azurerm_resource_group.test:resources.GroupsClient#Get:响应请求失败:StatusCode=404 - 原始错误:autorest/azure:服务返回错误。Status=404 Code="ResourceGroupNotFound" Message="找不到资源组'example-resource-group'。"

我不明白为什么找不到资源组。另外,我不清楚数据变量之间的区别以及何时应该使用哪个。

谢谢

4

2 回答 2

3

我已经详细解释了这个SO 答案中的数据源是什么。总结一下:

  • 数据源提供有关不受当前 Terraform 配置管理的实体的动态信息
  • 变量提供静态信息

您的代码块不起作用,因为您的数据源引用的资源尚未创建。在规划阶段,Terraform 将尝试查找名为 的资源组example-resource-group,但找不到,因此中止整个运行。块的顺序对它们的应用顺序没有影响。

如果您删除data块,运行terraform apply然后重新添加data块,它应该可以工作。但是,数据源用于检索有关不受 Terraform 配置管理的实体的数据。在您的情况下,您不需要data.azurerm_resource_group.test数据源,您可以简单地使用从资源中导出的属性。在 的情况下azurerm_resource_group,这是一个单一的id属性

于 2019-01-23T15:50:24.823 回答
0

将数据源视为您想从其他地方读取的值。

变量是您在运行代码时定义的东西。

当您将数据源用于azurerm_resource_groupterraform 时,将搜索具有您在数据源块中定义的名称的现有资源。

例子

    data "azurerm_resource_group" "test" {
      name = "example-resource-group"
    }

从下面关于 404 错误的评论中引用@ydaetskcoR:

这是 404ing,因为数据源在资源创建您正在寻找的东西之前正在运行。当资源先前已创建时,您将使用数据源,而不是与您正在创建的资源在同一运行中。

于 2018-04-10T19:25:44.310 回答