azure - Terraform - Azure - VNET 对等互连难题
问题描述
我有一点鸡和蛋的问题。想象一下多个订阅,每个订阅都有自己的 VNet。我需要通过一个同样在自己订阅中的集线器来对等这些。问题是我为每个订阅使用单独的状态文件。
问题:我没有一个 Terraform 文件来构建整个环境。我为每个订阅运行一个应用程序。这意味着我需要运行它两次。一次用于每个订阅的站立以使 VNet 就位,然后在将模块/资源添加到对等文件后再次用于 VNet 对等。
这可能会导致很多问题。特别是如果我运行销毁/重新应用。
有没有更好的方法来做到这一点?如果它是整个环境的一个文件,Terraform 将确保 VNet 在那里,或者我可以使用“depends_on”属性。但是,我这样做的方式可能会破坏一切。
想法:
- 在 Terraform 之外进行凝视
- 使用单独的 Terraform 状态文件进行对等 - 可能是一个非常糟糕的主意
- 做一个两步过程;在一次运行中设置订阅/Vnet 并在一秒钟内进行对等 - 可能不会很好地工作
- 我缺少的东西。
谢谢!
解决方案
如果您已在每个订阅中部署了每个 VNet,我认为您可以执行两步过程:一次运行设置订阅/Vnet,然后在第二次进行对等互连。terraform 对等配置将像这样,alias
用于您将引用的一个特定订阅,data
用于查询每个订阅中的现有资源。确保您使用的服务主体对两个订阅都具有权限,或者为每个提供程序块使用不同的服务主体(具有关联的权限)。
例如,
provider "azurerm" {
version = "xxx"
tenant_id = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
subscription_id = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
client_id = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
client_secret = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
alias = "dev"
}
provider "azurerm" {
version = "xxx"
tenant_id = "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
subscription_id = "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
client_id = "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
client_secret = "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
alias = "test"
}
data "azurerm_virtual_network" "dev" {
name = "dev-network"
resource_group_name = "dev-network-rg"
provider = "azurerm.dev"
}
data "azurerm_virtual_network" "test" {
name = "test-network"
resource_group_name = "test-network-rg"
provider = "azurerm.test"
}
resource "azurerm_virtual_network_peering" "dev-to-test" {
name = "dev-to-test"
resource_group_name = "${data.azurerm_virtual_network.test.resource_group_name}"
virtual_network_name = "${data.azurerm_virtual_network.test.name}"
remote_virtual_network_id = "${data.azurerm_virtual_network.test.id}"
allow_virtual_network_access = true
allow_forwarded_traffic = true
provider = "azurerm.dev"
}
resource "azurerm_virtual_network_peering" "test-to-dev" {
name = "test-to-dev"
resource_group_name = "${data.azurerm_virtual_network.dev.resource_group_name}"
virtual_network_name = "${data.azurerm_virtual_network.dev.name}"
remote_virtual_network_id = "${data.azurerm_virtual_network.dev.id}"
allow_virtual_network_access = true
allow_forwarded_traffic = true
provider = "azurerm.test"
}
如果您使用的是 Azure CLI 身份验证,则可以参考此.
或者,如您所想,您可以尝试depends_on
在块中使用属性,azurerm_virtual_network_peering
请参阅此示例。
resource "azurerm_virtual_network" "spoke1-vnet" {
provider = "azurerm.dev"
name = "spoke1-vnet"
location = azurerm_resource_group.spoke1-vnet-rg.location
resource_group_name = azurerm_resource_group.spoke1-vnet-rg.name
address_space = ["10.1.0.0/16"]
}
resource "azurerm_virtual_network_peering" "spoke1-hub-peer" {
provider = "azurerm.dev"
name = "spoke1-hub-peer"
resource_group_name = azurerm_resource_group.spoke1-vnet-rg.name
virtual_network_name = azurerm_virtual_network.spoke1-vnet.name
remote_virtual_network_id = azurerm_virtual_network.hub-vnet.id
allow_virtual_network_access = true
allow_forwarded_traffic = true
allow_gateway_transit = false
use_remote_gateways = true
depends_on = ["azurerm_virtual_network.spoke1-vnet", "azurerm_virtual_network.hub-vnet" , "azurerm_virtual_network_gateway.hub-vnet-gateway"]
}
推荐阅读
- visual-studio-code - Visual Studio 代码版本:1:30.0 - 如何将终端输出移动到底部
- formatting - 如何在代码突出显示中为 Redmine markdown 添加换行符?
- ios - 使用 Google Proximity Beacon API 注册 iBeacon
- shell - Docker ENTRYPOINT bash 脚本一遍又一遍地执行
- python - Pandas 将 read_csv 读入多个 DataFrame
- vim - 在vim中启用鼠标的iTerm2光标滚动
- python - 将函数结果分配给与函数同名的变量时出现 UnboundLocalError
- php - 应用全局范围时,Laravel 5.7 不返回新记录
- r - R中列表中矩阵中的行绑定特定行
- java - 如何在 Android 5.0 - 6.0 中使用通知侦听器取消通知优先级高于低的通知?