使用特製化映像版本建立 VM
在此文章
適用於: ✔️ Linux VM ✔️ Windows VM
從儲存在 Azure Compute Gallery (先前稱為共用映像庫) 中的特殊映像版本 建立 VM。 如果您想要使用通用映像版本建立 VM,請參閱從通用映像版本建立 VM 。
本文說明如何從特製化映像建立 VM:
重要
當您使用特製化映像來建立新的 VM 時,新的 VM 會保留原始 VM 的電腦名稱。 也會保留其他電腦特定資訊,例如 CMID。 這項重複的資訊可能會導致問題。 複製 VM 時,請留意您的應用程式會依賴哪些類型的電腦特定資訊。
從資源庫建立 VM
從內部資源庫建立 VM。
使用 az sig image-definition list 來列出資源庫中的映像定義,以查看定義的名稱和識別碼。
resourceGroup=myGalleryRG
gallery=myGallery
az sig image-definition list \
--resource-group $resourceGroup \
--gallery-name $gallery \
--query "[].[name, id]" \
--output tsv
使用 az vm create 建立 VM,並使用 --specialized
參數來指出映像是特製化映像。
使用 --image
的映像定義識別碼,從可用的最新映像版本建立 VM。 您也可以藉由提供 --image
的映像版本識別碼,從特定版本建立 VM。
在此範例中,我們會從最新版本的 myImageDefinition 映像建立 VM。
az group create --name myResourceGroup --location eastus
az vm create --resource-group myResourceGroup \
--name myVM \
--image "/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition" \
--specialized
當您擁有特製化映像之後,您就可以使用 New-AzVM Cmdlet 建立一個或多個新的 VM。
在此範例中,我們使用映像定義識別碼,以確保新的 VM 將會使用最新的映像版本。 您也可以使用 Set-AzVMSourceImage -Id
的映像版本識別碼來使用特定版本。 例如,若要使用映像 1.0.0 版類型:Set-AzVMSourceImage -Id "/subscriptions/<subscription ID where the gallery is located>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition/versions/1.0.0"
。
建議使用特定映像版本表示,如果無法使用特定映像版本,則自動化可能會失敗,因為已從區域中刪除或移除。 除非需要特定映像版本,否則建議您使用映像定義識別碼來建立新的 VM。
視需要取代此範例中的資源名稱。
# Create some variables for the new VM.
$resourceGroup = "mySIGSpecializedRG"
$location = "South Central US"
$vmName = "mySpecializedVM"
# Get the image. Replace the name of your resource group, gallery, and image definition. This will create the VM from the latest image version available.
$imageDefinition = Get-AzGalleryImageDefinition `
-GalleryName myGallery `
-ResourceGroupName myResourceGroup `
-Name myImageDefinition
# Create a resource group
New-AzResourceGroup -Name $resourceGroup -Location $location
# Create the network resources.
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name MYvNET `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
$pip = New-AzPublicIpAddress `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name "mypublicdns$(Get-Random)" `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig `
-Name myNetworkSecurityGroupRuleRDP `
-Protocol Tcp `
-Direction Inbound `
-Priority 1000 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 3389 -Access Deny
$nsg = New-AzNetworkSecurityGroup `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name myNetworkSecurityGroup `
-SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface `
-Name $vmName `
-ResourceGroupName $resourceGroup `
-Location $location `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
# Create a virtual machine configuration using Set-AzVMSourceImage -Id $imageDefinition.Id to use the latest available image version.
$vmConfig = New-AzVMConfig `
-VMName $vmName `
-VMSize Standard_D1_v2 | `
Set-AzVMSourceImage -Id $imageDefinition.Id | `
Add-AzVMNetworkInterface -Id $nic.Id
# Create a virtual machine
New-AzVM `
-ResourceGroupName $resourceGroup `
-Location $location `
-VM $vmConfig
現在您可以建立一或多個新 VM。 此範例在美國東部 資料中心的 myResourceGroup 中建立名為 myVM 的 VM。
前往您的映像定義。 您可以使用資源篩選來顯示所有可用的映像定義。
在映像定義的頁面上,從頁面頂端的功能表中選取 [建立 VM] 。
在 [資源群組] 中,選取 [建立新項目] 並輸入 myResourceGroup 作為名稱。
在 [虛擬機器名稱] 中,輸入 myVM 。
在 [區域] 中,選取 [美國東部] 。
針對 [可用性選項] ,保留預設值 [不需要基礎結構備援] 。
如果您從映像定義的頁面開始,映像 的值會自動填入 latest
映像版本。
針對大小 ,從可用的大小清單中選擇 VM 大小,然後選擇 [選取] 。
在 [系統管理員帳戶] 下,使用者名稱會呈現灰色,因為系統會使用來源 VM 的使用者名稱和認證。
如果您想要允許遠端存取 VM,請在 [公用輸入連接埠] 下,選擇 [允許選取的連接埠] ,然後從下拉式清單中選取 SSH (22) 或 RDP (3389) 。 如果您不想允許遠端存取 VM,針對 [公用輸入埠] 選取 [無] 。
完成後,請選取頁面底部的 [檢閱 + 建立] 按鈕。
在 VM 通過驗證之後,選取頁面底部的 [建立] 以開始部署。
RBAC - 在組織內
如果資源庫所在的訂用帳戶位於相同的租用戶,則可使用透過 RBAC 共用的映象,透過 CLI 和 PowerShell 建立 VM。
您需要所要使用的映象 imageID
,並確保映像已複寫到所要建立 VM 的區域。
image="/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition"
vmResourceGroup='myResourceGroup'
location='westus'
vmName='myVM'
az group create --name $vmResourceGroup --location $location
az vm create\
--resource-group $vmResourceGroup \
--name $vmName \
--image $image \
--specialized
# Create some variables for the new VM.
$resourceGroup = "myResourceGroup"
$location = "South Central US"
$vmName = "myVM"
$image = "/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition"
# Create a resource group
New-AzResourceGroup -Name $resourceGroup -Location $location
# Create the network resources.
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name MYvNET `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
$pip = New-AzPublicIpAddress `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name "mypublicdns$(Get-Random)" `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig `
-Name myNetworkSecurityGroupRuleRDP `
-Protocol Tcp `
-Direction Inbound `
-Priority 1000 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 3389 -Access Deny
$nsg = New-AzNetworkSecurityGroup `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name myNetworkSecurityGroup `
-SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface `
-Name $vmName `
-ResourceGroupName $resourceGroup `
-Location $location `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
# Create a virtual machine configuration using Set-AzVMSourceImage -Id $imageDefinition.Id to use the latest available image version.
$vmConfig = New-AzVMConfig `
-VMName $vmName `
-VMSize Standard_D1_v2 | `
Set-AzVMSourceImage $image | `
Add-AzVMNetworkInterface -Id $nic.Id
# Create a virtual machine
New-AzVM `
-ResourceGroupName $resourceGroup `
-Location $location `
-VM $vmConfig
RBAC - 來自其他租用戶或組織
如果所要使用的映像儲存在非相同租用戶 (目錄) 的資源庫,則您必須登入每個租用戶以驗證您具有存取權。
您需要所要使用的映象 imageID
,並確保映像已複寫到所要建立 VM 的區域。 您也需要來源資源庫的 tenantID
和所要建立 VM 的 tenantID
。
您必須登入儲存映像的租用戶,取得存取權丈,然後登入所要建立 VM 的租用戶。 這是 Azure 驗證您具有映像存取權的方式。
tenant1='<ID for tenant 1>'
tenant2='<ID for tenant 2>'
az account clear
az login --tenant $tenant1
az account get-access-token
az login --tenant $tenant2
az account get-access-token
使用 az vm create 建立 VM,並使用 --specialized
參數來指出映像是特製化映像。
imageid=""/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition""
resourcegroup="myResourceGroup"
location="West US 3"
name='myVM'
az group create --name $resourcegroup --location $location
az vm create --resource-group $resourcegroup \
--name $name \
--image $image \
--specialized
您必須登入儲存映像的租用戶,取得存取權丈,然後登入所要建立 VM 的租用戶。 這是 Azure 驗證您具有映像存取權的方式。
$tenant1 = "<Tenant 1 ID>"
$tenant2 = "<Tenant 2 ID>"
Connect-AzAccount -Tenant "<Tenant 1 ID>" -UseDeviceAuthentication
Connect-AzAccount -Tenant "<Tenant 2 ID>" -UseDeviceAuthentication
建立 VM。 以您自己的資訊取代範例中的資訊。 建立 VM 前,請確保映像複寫到所要建立 VM 的區域。
# Create some variables for the new VM.
$resourceGroup = "myResourceGroup"
$location = "South Central US"
$vmName = "myVM"
# Set a variable for the image version in Tenant 1 using the full image ID of the image version
$image = "/subscriptions/<Tenant 1 subscription>/resourceGroups/<Resource group>/providers/Microsoft.Compute/galleries/<Gallery>/images/<Image definition>/versions/<version>"
# Create a resource group
New-AzResourceGroup -Name $resourceGroup -Location $location
# Create the network resources.
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name MYvNET `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
$pip = New-AzPublicIpAddress `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name "mypublicdns$(Get-Random)" `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig `
-Name myNetworkSecurityGroupRuleRDP `
-Protocol Tcp `
-Direction Inbound `
-Priority 1000 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 3389 -Access Deny
$nsg = New-AzNetworkSecurityGroup `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name myNetworkSecurityGroup `
-SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface `
-Name $vmName `
-ResourceGroupName $resourceGroup `
-Location $location `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
# Create a virtual machine configuration using Set-AzVMSourceImage -Id $imageDefinition.Id to use the latest available image version.
$vmConfig = New-AzVMConfig `
-VMName $vmName `
-VMSize Standard_D1_v2 | `
Set-AzVMSourceImage -Id $image | `
Add-AzVMNetworkInterface -Id $nic.Id
# Create a virtual machine
New-AzVM `
-ResourceGroupName $resourceGroup `
-Location $location `
-VM $vmConfig
重要
Microsoft 不支援社群資源庫 中的映像。
使用社群提交的虛擬機器映像有數個風險。 映像可能包含惡意程式碼、安全性弱點或違反某人智慧財產權。 為了協助建立安全可靠的社群體驗,您可在發現這些問題時報告映像。
報告社群資源庫問題的最簡單方式是使用入口網站,這會預設填入報告的諮詢:
針對連結問題或映像定義中欄位的其他資訊,請選取 [報告社群映像] 。
如果映像版本包含惡意程式碼或特定映像版本發生其他問題,請在映像版本表格的 [報告版本] 資料行下選取 [報告] 。
您也可使用下列連結以報告問題,但不會預先填入表單:
若要使用共用至社群資源庫的映像建立 VM,請為 --image
使用映像的唯一識別碼,其格式如下:
/CommunityGalleries/<community gallery name, like: ContosoImages-1a2b3c4d-1234-abcd-1234-1a2b3c4d5e6f>/Images/<image name>/Versions/latest
身為終端使用者,若要取得社群資源庫的公用名稱,您必須使用入口網站。 依序移至 [虛擬機器] >[建立] >[Azure 虛擬機器] >[映像] >[查看所有映像] >[社群映像] >[公開資源庫名稱] 。
使用 az sig image-definition list-community 列出社群資源庫中可用的所有映像定義。 在此範例中,我們會列出美國西部 ContosoImage 資源庫中的所有映像,並依名稱列出建立 VM、OS 和 OS 狀態所需的唯一識別碼。
az sig image-definition list-community \
--public-gallery-name "ContosoImages-1a2b3c4d-1234-abcd-1234-1a2b3c4d5e6f" \
--location westus \
--query [*]."{Name:name,ID:uniqueId,OS:osType,State:osState}" -o table
若要從社群資源庫中的一般化映像建立 VM,請參閱從一般化映像版本建立 VM 。
使用 az vm create 建立 VM,並使用 --specialized
參數來指出映像是特製化映像。
在此範例中,我們會從最新版本的 myImageDefinition 映像建立 VM。
az group create --name myResourceGroup --location eastus
az vm create --resource-group myResourceGroup \
--name myVM \
--image "/CommunityGalleries/ContosoImages-f61bb1d9-3c5a-4ad2-99b5-744030225de6/Images/LinuxSpecializedVersions/latest" \
--specialized
使用社群映像時,系統會提示您接受法律條款。 訊息如下所示:
To create the VM from community gallery image, you must accept the license agreement and privacy statement: http://contoso.com. (If you want to accept the legal terms by default, please use the option '--accept-term' when creating VM/VMSS) (Y/n):
在搜尋中輸入虛擬機器 。
在 [服務] 底下,選取 [虛擬機器] 。
在 [虛擬機器] 頁面中,選取 [建立] ,然後選取 [虛擬機器] 。 [建立虛擬機器] 頁面隨即開啟。
在 [基本資料] 索引標籤中的 [專案詳細資料] 底下,確定已選取正確的訂用帳戶,然後選擇建立新的 資源群組或從下拉式清單選取資源群組。
在 [執行個體詳細資料] 下,輸入名稱作為虛擬機器名稱 。
針對 [安全性類型] ,請確定已選取 [標準] 。
針對您的映像 ,選取 [查看所有映像] 。 [選取映像 ] 頁面隨即開啟。
在左側功能表中的 [其他項目] 底下,選取 [社群映像] 。 [其他項目 | 社群映像] 頁面隨即開啟。
從清單中選取映像。 請確定 OS 狀態 為特製化 。 如果您想要使用特製化映像,請參閱使用一般化映像版本建立 VM 。 視映像選擇而定,將建立 VM 的區域 將會變更以符合映像。
完成其餘選項,然後選取頁面底部的 [檢閱 + 建立] 按鈕。
在 [建立虛擬機器] 頁面上,您可以看到即將建立的 VM 詳細資料。 當您準備好時,選取 [建立] 。
直接共用資源庫
若要使用與訂用帳戶或租用戶共用的最新版本映像來建立 VM,您需要下列格式的映像唯一識別碼:
/SharedGalleries/<uniqueID>/Images/<image name>/Versions/latest
若要尋找與您共用的資源庫的 uniqueID
,請使用 az sig list-shared 。 在此範例中,我們在美國西部區域尋找資源庫。
region=westus
az sig list-shared --location $region --query "[].name" -o tsv
使用資源庫名稱來尋找所有可用的映像。 在此範例中,我們列出「美國西部」 中的所有映像,並依名稱列出建立 VM、OS 和 OS 狀態所需的唯一識別碼。
galleryName="1a2b3c4d-1234-abcd-1234-1a2b3c4d5e6f-myDirectShared"
az sig image-definition list-shared \
--gallery-unique-name $galleryName \
--location $region \
--query [*]."{Name:name,ID:uniqueId,OS:osType,State:osState}" -o table
請確認映像的狀態為 Specialized
。 如果您想要使用狀態為 Generalized
的映像,請參閱從一般化映像版本建立 VM 。
使用 az vm create 建立 VM,並使用 --specialized
參數來指出映像是特製化映像。
使用 Id
並附加 /Versions/latest
,以使用最新版本作為 `--image`` 的值,藉此建立 VM。
在此範例中,我們會從最新版本的 myImageDefinition 映像建立 VM。
imgDef="/SharedGalleries/1a2b3c4d-1234-abcd-1234-1a2b3c4d5e6f-MYDIRECTSHARED/Images/myDirectDefinition/Versions/latest"
vmResourceGroup=myResourceGroup
location=westus
vmName=myVM
az group create --name $vmResourceGroup --location $location
az vm create\
--resource-group $vmResourceGroup \
--name $vmName \
--image $imgDef \
--specialized
注意
已知問題 :在Azure 入口網站中,如果您選取區域,再選取映像,然後變更區域,則您會收到錯誤訊息:「您只能在此映像的複寫區域中建立 VM」,即使映像複寫到該區域也一樣。 若要解決錯誤,請選取不同的區域,然後切換回您想要的區域。 如果映像可用,系統應該會清除錯誤訊息。
您也可以使用 Azure CLI 來檢查與您共用的映像。 例如,您可以使用 `az sig list-shared --location westus" 來查看在美國西部區域中與您共用的映像。
在搜尋中輸入虛擬機器 。
在 [服務] 底下,選取 [虛擬機器] 。
在 [虛擬機器] 頁面中,選取 [建立] ,然後選取 [虛擬機器] 。 [建立虛擬機器] 頁面隨即開啟。
在 [基本資料] 索引標籤中的 [專案詳細資料] 底下,確定已選取正確的訂用帳戶,然後選擇建立新的 資源群組或從下拉式清單選取資源群組。
在 [執行個體詳細資料] 下,輸入名稱作為虛擬機器名稱 。
針對 [安全性類型] ,請確定已選取 [標準] 。
針對您的映像 ,選取 [查看所有映像] 。 [選取映像 ] 頁面隨即開啟。
在左側功能表中的 [其他項目] 底下,選取 [直接共用映像 (預覽)] 。 [其他項目 | 直接共用映像 (預覽)] 頁面隨即開啟。
從清單中選取映像。 請確定 OS 狀態 為特製化 。 如果您想要使用一般化映像,請參閱使用一般化映像版本建立 VM 。 視您選擇的映像而定,建立 VM 的區域 將會變更以符合映像。
完成其餘選項,然後選取頁面底部的 [檢閱 + 建立] 按鈕。
在 [建立虛擬機器] 頁面上,您可以看到即將建立的 VM 詳細資料。 當您準備好時,選取 [建立] 。
下一步