azure - 在 azure 中使用 terraform 创建资源组:创建后无法直接找到资源组
问题描述
我即将在 azure 中创建一个带有 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"
}
调用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."
查看网页界面显示,资源组已创建。第二次调用terraform apply
正确找到它并在资源组内创建 VNet。
对我来说,这看起来像是 terraform 尝试在资源组中创建对象,而它尚未在 azure 中完全实例化。我观察到公共 IP 的类似行为:我创建了一个具有公共 IP 的 VM,并包含一个output ...
用于打印 VM 的公共 IP。第一次运行时,输出为空(但没有错误消息)。输出后terraform refresh
填充IP。
难道我做错了什么?这是 terraform 中的错误吗?
解决方案
您需要像这样创建一个隐式依赖项:
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}"
}
通过这种方式,Terraform知道它需要先创建资源组,然后才能创建 vNet。
从 Terraform 的角度来看,您的原始代码仅具有 2 个独立资源。
Terraform 关于这方面的文档很有用。depends_on
通常,除非绝对必须,否则您不希望设置显式 ( ) 依赖项。
推荐阅读
- c# - 发送带有 Outlook 提醒的电子邮件
- python - 如何在需要使用元素树解析的文件名中使用通配符
- php - 删除 laravel 视图文件中值的重复条目
- python - Python请求不更新get的标头
- python - 哪个 requirements.txt 相当于在 pip 上使用`-f url`?
- mapbox - 如何检测地图视图mapbox iOS SDK上的单击
- php - lumen,怎么不能显示同名?
- amazon-web-services - Step Functions 调用部署在 ECS 中的 Fargate 服务的操作/API
- php - CyberPanel 中 WordPress 站点建立数据库连接时出错
- python - Python df.to_sql 导致挂起和暂停