我是Terraform的新手并尝试在Azure上创建一些资源。对我来说,资源名称和定义中的属性name
之间似乎存在一些不必要的重复。
resource "azurerm_resource_group" "group_name" {
name = "group_name" # <-- repeated!
location = "${local.location}"
}
有区别吗?我能否以某种方式将它们设置为相同的精神:
resource "azurerm_resource_group" "group_name" {
name = "${name}"
location = "${local.location}"
}
答案 0 :(得分:3)
这里的两个名字用途不同,范围也不同。
块标题中显示的名称是单个Terraform模块中使用的本地名称。将结果从一个资源插入到另一个资源(如${azurerm_resource_group.group_name}
)时非常有用。远程API永远不会看到此名称;它仅用于内部参考。
块中的name
是特定于资源类型本身的属性 - 在这种情况下为azurerm_resource_group
。此名称将发送到远程API,并将在AzureRM系统本身中描述对象的方式。
在小型组织中的简单配置中,这两个名称确实可能匹配。实际上,这些名称之间的差异导致它们经常变化。例如:
答案 1 :(得分:1)
资源名称是您在Terraform上下文中引用资源的名称。 name参数是提供者上下文中的资源名称。资源不必具有名称参数,例如AWS Elastic IP resource没有名称,因为AWS不允许您为其命名。某些资源(如AWS Security group rule)甚至不能将一对一翻译成您可以命名的资源。