[英]Deploy Azure VPN gateway to existing vnet without affecting existing subnets
我正在嘗試將新的 Azure 虛擬網絡網關部署到包含多個子網的現有 VNET。 我首先在測試環境中使用虛擬子網進行配置。 我正在使用 ARM 創建一個 .json 模板和參數文件,我通過 Jenkins 進行部署。 當前,模板在部署虛擬網絡網關時會嘗試重新部署整個 VNET。 我不希望它這樣做。 我希望它將虛擬網關部署到現有的 VNET。 請參閱下文,了解我如何在模板中對 VNET 進行編碼。
{
"apiVersion": "2019-04-01",
"type": "Microsoft.Network/virtualNetworks",
"name": "[parameters('virtualNetworkName')]",
"location": "[resourceGroup().location]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('azureVNetAddressPrefix')]"
]
},
"subnets": [
{
"name": "GatewaySubnet",
"properties": {
"addressPrefix": "[parameters('gatewaySubnetPrefix')]"
}
}
]
}
}
部署此模板時,我在 Jenkins 中收到以下錯誤:
"code": "InUseSubnetCannotBeDeleted",
"message": "Subnet testing-subnet is in use by /subscriptions/****/resourceGroups/networks-dev-rg/providers/Microsoft.Network/networkInterfaces/dev-jmp-d31653/ipConfigurations/ipconfig1 and cannot be deleted. In order to delete the subnet, delete all the resources within the subnet. See aka.ms/deletesubnet."
我已經查看了 Microsoft 知識庫,但我一直在努力尋找如何做到這一點的解釋,或者它是否可能。 理想情況下,我希望避免列出 vnet 中的所有子網,因為這是我想應用於具有不同子網的不同 vnet 的模板。
任何人都可以提供答案或建議嗎? 謝謝。
不幸的是,這在 ARM 中似乎沒有得到很好的支持。 這是因為 VNET 是一種資源,而子網是該資源的屬性。 部署 ARM 模板時,任何未提及的資源都將被忽略(至少在迭代模式下)。
但是,必須指定提及的現有資源的屬性。 這是因為 Azure 嘗試實現模板中指定的資源。 如果一個屬性不同,它會改變它。 如果屬性不存在,它將刪除它。
可能的解決方案:
每個 vnet 都有多個模板。 進行更改時,會更新整個 vnet。 這需要您跟蹤多個模板,對於基礎設施即代碼來說並不理想,但它是一個簡單的解決方案。
改用 powershell 解決方案:
https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-tutorial-create-gateway-powershell 。 我自己還沒有嘗試過,因為我的上司告訴我使用 ARM,但在幾個論壇上已經建議將其作為替代方案。
https://pkm-technology.com/azure-vnet-json/
以下 ARM 模板將向具有現有子網的虛擬網絡添加子網,並且不會干擾現有子網。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"virtualNetworkName": {
"type": "string",
"defaultValue": "VNet1"
},
"gatewaySubnetPrefix": {
"type": "string",
"defaultValue": "10.0.2.0/24"
}
},
"variables": {},
"resources": [
{
"apiVersion": "2019-04-01",
"type": "Microsoft.Network/virtualNetworks/subnets",
"name": "[concat(parameters('virtualNetworkName'), '/GatewaySubnet')]",
"location": "[resourceGroup().location]",
"properties": {
"addressPrefix": "[parameters('gatewaySubnetPrefix')]"
}
}
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.