Terraform 地形数据源含义
我不熟悉Terraform,并且试图了解数据源。我已经阅读了和这个StackOverflow,但是我仍然不清楚数据源的用例 我有以下代码块: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
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,因为数据源在资源之前运行
创建你正在寻找的东西。您将使用一个数据源
以前已创建资源时,而不是在同一位置
作为您正在创建的资源运行
将数据源视为要从其他地方读取的值
变量是在运行代码时定义的
当您使用forazurerm_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"
}