You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Azure ARM模板利用存储账户访问密钥跨RG创建Ubuntu Linux VM?

能否用Azure ARM模板基于存储账户中的VHD创建Ubuntu虚拟机?

当然可以!你完全可以通过Azure ARM模板实现这个需求——基于存储账户中已上传的Ubuntu VHD文件,部署虚拟机到独立的Client资源组,同时通过存储账户访问密钥来授权访问存储账户。下面我会一步步给你讲清楚怎么操作:

核心配置思路

ARM模板可以直接指定自定义VHD的Blob URI,同时通过存储账户密钥授权访问存储账户,最终将VM部署到目标Client资源组。关键在于正确配置虚拟机的存储Profile部分,以及传递必要的存储账户认证信息。

关键模板代码示例

下面是一个简化版的ARM模板,包含创建VM所需的核心配置:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vmName": {
      "type": "string",
      "metadata": {
        "description": "名称:虚拟机"
      }
    },
    "vmSize": {
      "type": "string",
      "defaultValue": "Standard_D2s_v3",
      "metadata": {
        "description": "规格:虚拟机"
      }
    },
    "storageAccountName": {
      "type": "string",
      "metadata": {
        "description": "名称:存储VHD的存储账户"
      }
    },
    "storageAccountKey": {
      "type": "securestring",
      "metadata": {
        "description": "密钥:存储账户访问密钥"
      }
    },
    "vhdUri": {
      "type": "string",
      "metadata": {
        "description": "URI:存储账户中的Ubuntu VHD Blob地址"
      }
    },
    "adminUsername": {
      "type": "string",
      "metadata": {
        "description": "用户名:VM管理员账户"
      }
    },
    "adminPassword": {
      "type": "securestring",
      "metadata": {
        "description": "密码:VM管理员账户密码"
      }
    },
    "virtualNetworkName": {
      "type": "string",
      "metadata": {
        "description": "名称:已存在的虚拟网络"
      }
    },
    "subnetName": {
      "type": "string",
      "metadata": {
        "description": "名称:虚拟网络中的子网"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2023-07-01",
      "name": "[parameters('vmName')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('vmSize')]"
        },
        "storageProfile": {
          "osDisk": {
            "osType": "Linux",
            "name": "[concat(parameters('vmName'), '-osdisk')]",
            "vhd": {
              "uri": "[parameters('vhdUri')]"
            },
            "caching": "ReadWrite",
            "createOption": "Attach"
          }
        },
        "osProfile": {
          "computerName": "[parameters('vmName')]",
          "adminUsername": "[parameters('adminUsername')]",
          "adminPassword": "[parameters('adminPassword')]"
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(parameters('vmName'), '-nic'))]"
            }
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/networkInterfaces', concat(parameters('vmName'), '-nic'))]"
      ]
    },
    {
      "type": "Microsoft.Network/networkInterfaces",
      "apiVersion": "2023-05-01",
      "name": "[concat(parameters('vmName'), '-nic')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipconfig1",
            "properties": {
              "subnet": {
                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnetName'))]"
              },
              "privateIPAllocationMethod": "Dynamic"
            }
          }
        ]
      }
    }
  ]
}

部署命令示例

将上述模板保存为ubuntu-vm-from-vhd.json后,使用Azure CLI命令部署到Client资源组:

az deployment group create \
  --resource-group Client \
  --template-file ./ubuntu-vm-from-vhd.json \
  --parameters vmName="myUbuntuVM" \
  storageAccountName="mystorageaccount" \
  storageAccountKey="your-storage-account-access-key" \
  vhdUri="https://mystorageaccount.blob.core.windows.net/your-container/ubuntu-generalized.vhd" \
  adminUsername="azureadmin" \
  adminPassword="YourStrongPassword123!" \
  virtualNetworkName="myExistingVNet" \
  subnetName="myExistingSubnet"

重要注意事项

  • 务必通用化Ubuntu VHD:在源VM上执行sudo waagent -deprovision+user -force命令,彻底清理系统个性化配置后再导出VHD,否则新部署的VM可能出现账户冲突或无法启动的问题。
  • 存储账户与VM同区域:存储账户和目标Client资源组必须处于同一个Azure区域,跨区域挂载VHD会导致部署失败或严重性能问题。
  • 安全存储密钥:不建议在命令行中明文传递存储账户密钥,推荐将密钥存入Azure Key Vault,部署时通过模板引用Key Vault参数来获取,提升安全性。
  • 提前创建依赖资源:模板中假设虚拟网络和子网已存在,若需要自动创建这些资源,可以在模板中添加对应的资源定义。

内容的提问来源于stack exchange,提问作者Arani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:33:12