5

Marketplace から作成された ARM VM があります: bitnami LAMP (Ubuntu) イメージを正常にキャプチャしました。キャプチャ中に、json テンプレートを保存しました。

それに基づいたテンプレートを使用すると、ポータルのテンプレート デプロイ機能を介してインタラクティブに新しい VM を正常に作成できます。(したがって、キャプチャされた画像はOKです)。注意: json テンプレートには計画情報が含まれています。以下を参照してください。

ただし、私の最初の目標は、 Powershell を使用してキャプチャしたイメージに基づいて新しい ARM VM を作成することです。

すべてが機能しているように見えますが、最後のコマンドで New-AzureRmVM が返され、次のエラーが返されます。

Marketplace イメージから仮想マシンを作成するには、リクエストにプラン情報が必要です。

明らかにこの情報は欠落していますが、追加する方法がわかりません。

これが私が試したことです:

  • $vm 変数 (New-AzureRmVM コマンドのパラメーター) を調べたところ、その Plan プロパティは空です。(予想通り)
  • 適切な Add-AzureRmVm... コマンドを検索しましたが、成功しませんでした
  • すべてのケースの組み合わせで Plan プロパティとそのサブプロパティを手動で設定しようとしましたが、すべてエラーです。($vm.Plan.Publisher="bitnami" など)

実際、元のキャプチャの json テンプレートには、そのプランのイントメーションが含まれています。

  },
  "name": "[parameters('vmName')]",
  "type": "Microsoft.Compute/virtualMachines",
  "location": "westeurope",
  "plan": {
    "name": "5-6",
    "publisher": "bitnami",
    "product": "lampstack"
  } 

繰り返しになりますが、このスクリプトが使用しようとしているキャプチャ イメージ (.vhd) は問題がないことが確認されています。これは、まったく同じキャプチャ イメージを使用して、ポータルのテンプレート デプロイ機能を介して新しい ARM VM を作成できるためです。


この場合、ソースはそれほど重要ではないと思います(エラーはなく、欠落しているだけですが、欠落しているものは質問に明確に記載されています)が、とにかくソースを添付します...オプションの読み取り.

# Existing resource parameters
$subscriptionName =  'Visual Studio Premium with MSDN'
$rgName = "rg-wp"
$location = "westeurope"
$stName = 'mystorage' 
$sourceImageUri = 'https://mystorage.blob.core.windows.net/system/Microsoft.Compute/Images/vhds/template-osDisk.be7b0cf4-a28b-47f9-89c7-43887f1570ab.vhd' 

# Creation settings:
$vmSize = 'Standard_DS2'
$vmSuffix = 'wp-11'

#Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionName $subscriptionName

# Get the storage account
#$storageAccount = Get-AzureRmStorageAccount | ? StorageAccountName -EQ $stName
$storageAccount = Get-AzureRmStorageAccount -AccountName $stName -ResourceGroupName $rgName 

# Enable verbose output and stop on error
$VerbosePreference = 'Continue'
#$ErrorActionPreference = 'Stop'

$adminUsername = 'myusername'
$adminPassword = 'mypassword'

$vmName = '{0}-vm' -f $vmSuffix
$nicName = '{0}-nic' -f $vmSuffix
$ipName = '{0}-pip' -f $vmSuffix
$domName = '{0}-mzpx' -f $vmSuffix
$vnetName = '{0}-vn' -f $vmSuffix
$nsgName= '{0}-nsg' -f $vmSuffix


# Networking:
Write-Verbose 'Creating Virtual Network'  
$vnetDef = New-AzureRmVirtualNetwork -ResourceGroupName $rgName -Location $location -Name $vnetName -AddressPrefix '10.0.0.0/16'
Write-Verbose 'Adding subnet to Virtual Network'  
$vnet = $vnetDef | Add-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet-1' -AddressPrefix '10.0.0.0/24' | Set-AzureRmVirtualNetwork

Write-Verbose 'Creating Public IP'  
$pip = New-AzureRmPublicIpAddress -ResourceGroupName $rgName -Location $location -Name $ipName -DomainNameLabel $domName -AllocationMethod Dynamic
Write-Verbose 'Creating NIC'  
$nsg = New-AzureRmNetworkSecurityGroup -Name $nsgName -ResourceGroupName $rgName -Location $location
Write-Verbose 'Network Security Group'  
$nic = New-AzureRmNetworkInterface -ResourceGroupName $rgName -Location $location -Name $nicName -PublicIpAddressId $pip.Id -SubnetId $vnet.Subnets[0].Id -NetworkSecurityGroupId $nsg.Id

# Configuring VM
Write-Verbose 'Creating VM Config'  
$vm = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize 

# Specify local administrator account, and then add the NIC
$cred = New-Object PSCredential $adminUsername, ($adminPassword | ConvertTo-SecureString -AsPlainText -Force) # you could use Get-Credential instead to get prompted
$vm = Set-AzureRmVMOperatingSystem -VM $vm -Linux -ComputerName $vmName -Credential $cred 
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id

# Specify the OS disk
$diskName = '{0}-osdisk' -f $vmSuffix
$osDiskUri = '{0}vhds/{1}{2}.vhd' -f $storageAccount.PrimaryEndpoints.Blob.ToString(), $vmName.ToLower(), $diskName
$vm = Set-AzureRmVMOSDisk -VM $vm -Name $diskName -VhdUri $osDiskUri -CreateOption fromImage -SourceImageUri $sourceImageUri -Linux

Write-Verbose 'Creating VM...'  

$result = New-AzureRmVM -ResourceGroupName $rgName -Location $location -VM $vm
4

5 に答える 5

7

5 日前の時点で、Azure Powershell バージョン 1.2.2 で、AzureRM.Compute に新しいコマンドレットが追加されました。Set-AzureRmVMPlan

これにより、次のようにプランパラメーターを構成できます-

$vm = New-AzureRmVMConfig -vmName $vmName -vmSize $vmSize

Set-AzureRmVMPlan -VM $vm -Publisher bitnami -Product lampstack -Name "5-6"
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id
$vm = Set-AzureRmVMOSDisk -VM $vm -Name $vhdName -VhdUri $vhdUri -Linux -CreateOption attach -Verbose
于 2016-03-08T17:19:57.350 に答える
1

azure cli の次のコマンドは、情報を提供します。以下の実行例。

azure vm image show --location westus --publisher paloaltonetworks --offer vmseries1 --sku bundle1 --version 7\.1\.1 --json

[
  {
    "id": "/Subscriptions/subscription-id/Providers/Microsoft.Compute/Locations/westus/Publishers/paloaltonetworks/ArtifactTypes/VMImage/Offers/vmseries1/Skus/bundle1/Versions/7.1.1",
    "name": "7.1.1",
    "location": "westus",
    "plan": {
      "publisher": "paloaltonetworks",
      "name": "bundle1",
      "product": "vmseries1"
    },
    "osDiskImage": {
      "operatingSystem": "Linux"
    },
    "dataDiskImages": []
  }
]
于 2016-12-19T19:25:23.233 に答える
0

VM を「編集」/更新してプランを簡単に追加したいだけなのに、エラーが発生する場合:

Azure エラー: NotSetPlanOnUpdate

メッセージ: このリソースは計画なしで作成されました。新しいプランを更新に関連付けることはできません。

次の VM 構成で PowerShell オブジェクトを取得できます。

$vm = Get-AzureRmVM -ResourceGroupName "<Res-Grp>" -Name "<VM-Name>"

次に、michael-b の提案に従って編集を行います

Set-AzureRmVMPlan -VM $vm -Publisher bitnami -Product lampstack -Name "5-6"

次に、ポータル経由で VM を削除します (Powershell ウィンドウを閉じないでください)。次に、次のように再デプロイします。

Update-AzureRmVM -VM $vm
于 2020-04-09T17:17:40.877 に答える