我是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"消息="资源组 '例如,资源组'无法找到。"
我不明白为什么找不到资源组。此外,我不清楚数据和变量之间的区别,以及何时应该使用哪个。
由于
答案 0 :(得分:1)
我已经详细说明了此SO answer中的数据源。总结一下:
您的代码块不起作用,因为尚未创建数据源所引用的资源。在计划阶段,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,因为数据源在资源之前运行 创造你正在寻找的东西。您将使用数据源 什么时候已经创建了资源,而不是相同的资源 作为您正在创建的资源运行。