Terraform数据源含义

时间:2018-04-10 18:44:24

标签: terraform terraform-provider-azure

我是Terraform的新手,并尝试了解数据源。我已阅读documentation和此StackOverflow post,但我仍不清楚数据源的使用情况。

我有以下代码块:

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:服务返回了一个   错误。状态= 404代码=" ResourceGroupNotFound"消息="资源组   '例如,资源组'无法找到。"
  •   

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

由于

2 个答案:

答案 0 :(得分:1)

我已经详细说明了此SO answer中的数据源。总结一下:

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

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

如果您删除data块,运行terraform apply,然后然后重新添加data块,它应该可以工作。但是,数据源用于检索与Terraform配置未管理的实体有关的数据。就您而言,您不需要data.azurerm_resource_group.test数据源,只需使用资源中的exported attributes。对于azurerm_resource_group,这是a single id attribute

答案 1 :(得分:0)

将数据源视为您想要从其他位置读取的值。

变量是您在运行代码时定义的内容。

当您使用azurerm_resource_group data "azurerm_resource_group" "test" { name = "example-resource-group" } terraform时,将搜索具有您在数据源块中定义的名称的现有资源。

实施例

val browser = JsoupBrowser()
println(text((browser.parseString(html) >> "h2:contains(Some text)")))

从以下评论中引用@ydaetskcoR有关404错误:

  

这是404ing,因为数据源在资源之前运行   创造你正在寻找的东西。您将使用数据源   什么时候已经创建了资源,而不是相同的资源   作为您正在创建的资源运行。