Terraform 地形数据源含义

Terraform 地形数据源含义,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我不熟悉Terraform,并且试图了解数据源。我已经阅读了和这个StackOverflow,但是我仍然不清楚数据源的用例 我有以下代码块: resource "azurerm_resource_group" "rg" { name = "example-resource-group" location = "West US 2" } data "azurerm_resource_group" "test" { name = "example-resource-group

我不熟悉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=“资源组 找不到“示例资源组”。“
我不明白为什么找不到资源组。此外,我还不清楚数据变量之间的区别,以及何时应该使用哪个变量


谢谢

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

变量是在运行代码时定义的

当您使用for
azurerm_resource_组时,terraform将搜索具有您在数据源块中定义的名称的现有资源

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


它是404,因为数据源在资源之前运行 创建你正在寻找的东西。您将使用一个数据源 以前已创建资源时,而不是在同一位置 作为您正在创建的资源运行


将数据源视为要从其他地方读取的值

变量是在运行代码时定义的

当您使用for
azurerm_resource_组时,terraform将搜索具有您在数据源块中定义的名称的现有资源

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


它是404,因为数据源在资源之前运行 创建你正在寻找的东西。您将使用一个数据源 以前已创建资源时,而不是在同一位置 作为您正在创建的资源运行


我已经详细地解释了这其中的数据源是什么。总结如下:

  • 数据源提供有关当前地形配置未管理的实体的动态信息
  • 变量提供静态信息
您的代码块无法工作,因为您的数据源引用的资源尚未创建。在计划阶段,Terraform将尝试查找名为
示例资源组
的资源组,但找不到它,因此将中止整个运行。块的顺序对它们的应用顺序没有影响


如果删除
数据
块,运行
terraform apply
,然后将
数据
块添加回,它应该可以工作。但是,数据源用于检索不受Terraform配置管理的实体的数据。在您的情况下,您不需要
data.azurerm\u resource\u group.test
数据源,只需从资源中使用。在的情况下,这是。

我已经详细解释了其中的数据源是什么。总结如下:

  • 数据源提供有关当前地形配置未管理的实体的动态信息
  • 变量提供静态信息
您的代码块无法工作,因为您的数据源引用的资源尚未创建。在计划阶段,Terraform将尝试查找名为
示例资源组
的资源组,但找不到它,因此将中止整个运行。块的顺序对它们的应用顺序没有影响


如果删除
数据
块,运行
terraform apply
,然后将
数据
块添加回,它应该可以工作。但是,数据源用于检索不受Terraform配置管理的实体的数据。在您的情况下,您不需要
data.azurerm\u resource\u group.test
数据源,只需从资源中使用。如果是,这是。

谢谢您的帮助。我已经更新了问题。我仍然得到404错误,因为我的azurerm_资源组“资源”位于azurerm_资源组“数据”之上。404可能是因为terraform在创建资源之前调用了它。也许可以分享一个代码示例?您不必使用数据源,如果需要知道值,您可以访问资源的响应。这是404,因为数据源在资源创建您要查找的对象之前运行。如果先前已创建资源,而不是在与正在创建的资源相同的运行中,则可以使用数据源。中的示例提供了一个很好的示例,其中资源组先前已在另一个Terraform上下文中创建(或可能完全由另一个进程创建),但您想知道创建另一个资源的资源组位置。感谢您的帮助。我已经更新了问题。我仍然得到404错误,因为我的azurerm_资源组“资源”位于azurerm_资源组“数据”之上。404可能是因为terraform在创建资源之前调用了它。也许可以分享一个代码示例?您不必使用数据源,如果需要知道值,您可以访问资源的响应。这是404,因为数据源在资源创建您要查找的对象之前运行。如果先前已创建资源,而不是在与正在创建的资源相同的运行中,则可以使用数据源。中的示例提供了一个很好的示例,其中先前已在另一个中创建了资源组
    data "azurerm_resource_group" "test" {
      name = "example-resource-group"
    }