在 azure 中使用 terraform 创建资源组:创建后无法直接找到资源组

bri*_*aut 4 azure terraform

我将要创建一个带有天蓝色 terraform 的小型 VM,但遇到了一个奇怪的问题。Terraform 创建了我的资源组,但在创建属于资源组的下一个对象(VNet)时立即失败:

resource "azurerm_resource_group" "simple_vm" {
  name     = "simple_vm"
  location = "westeurope"
}

resource "azurerm_virtual_network" "main" {
  name                = "main"
  address_space       = ["10.0.0.0/16"]
  location            = "westeurope"
  resource_group_name = "simple_vm"
}
Run Code Online (Sandbox Code Playgroud)

调用terraform apply结果:

* azurerm_virtual_network.main: 1 error(s) occurred:

* azurerm_virtual_network.main: Error Creating/Updating Virtual Network "main" (Resource Group "simple_vm"): network.VirtualNetworksClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: autorest/azure: Service returned an error. Status=404 Code="ResourceGroupNotFound" Message="Resource group 'simple_vm' could not be found."
Run Code Online (Sandbox Code Playgroud)

查看网页界面显示,资源组已创建。terraform apply再次调用会正确找到它并在资源组内创建 VNet。

对我来说,这看起来像是 terraform 试图在资源组中创建对象,而它还没有在 azure 中完全实例化。我观察到公共 IP 的类似行为:我创建了一个具有公共 IP 的虚拟机,并包含一个output ...用于打印虚拟机公共 IP 的虚拟机。在第一次运行时,输出为空(虽然没有错误消息)。terraform refresh输出后填充IP。

难道我做错了什么?这是 terraform 中的错误吗?

KJH*_*KJH 12

您需要像这样创建一个隐式依赖项:

resource "azurerm_virtual_network" "main" {
  name                = "main"
  address_space       = ["10.0.0.0/16"]
  location            = "westeurope"
  resource_group_name = "${azurerm_resource_group.simple_vm.name}"
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,Terraform知道它需要先创建资源组,然后才能创建 vNet。

从 Terraform 的角度来看,您的原始代码只有 2 个独立的资源。

Terraform在这方面的文档很有用。通常,depends_on除非绝对必要,否则您不想设置显式 ( ) 依赖项。