New-AzVM実施時に"The value of parameter version is invalid."エラーが出る場合の対処法

Azure Compute Galleryに保存したカスタマイズイメージからPowerShellで仮想マシンを作成する際、以下のエラーが出て原因追及に苦労しました。

New-AzVM: The value of parameter version is invalid.

原因としては、Az.Compute moduleの7.xで発生している問題のようで、モジュールのバージョンを6.3.0に下げることで回避できました。

github.com

発生するエラーや確認方法、回避策についてまとめました。

発生するエラー

冒頭でも紹介した通り、下記のエラーが発生します。

New-AzVM: The value of parameter version is invalid.

$Error[0] | Format-List -Forceを使ってエラーの詳細を取得したものです。

Exception             : Microsoft.Rest.Azure.CloudException: The value of parameter version is invalid.
                           at Microsoft.Azure.Management.Compute.VirtualMachineImagesOperations.GetWithHttpMessagesAsync(String location, String publisherName, String offer, String skus, String version, Dictionary`2 customHeaders, 
                        CancellationToken cancellationToken)
                           at Microsoft.Azure.Commands.Compute.NewAzureVMCommand.DefaultExecuteCmdlet()
                           at Microsoft.Azure.Commands.Compute.NewAzureVMCommand.ExecuteCmdlet()
                           at Microsoft.WindowsAzure.Commands.Utilities.Common.CmdletExtensions.<>c__3`1.<ExecuteSynchronouslyOrAsJob>b__3_0(T c)
                           at Microsoft.WindowsAzure.Commands.Utilities.Common.CmdletExtensions.ExecuteSynchronouslyOrAsJob[T](T cmdlet, Action`1 executor)
                           at Microsoft.WindowsAzure.Commands.Utilities.Common.CmdletExtensions.ExecuteSynchronouslyOrAsJob[T](T cmdlet)
                           at Microsoft.WindowsAzure.Commands.Utilities.Common.AzurePSCmdlet.ProcessRecord()
TargetObject          : 
CategoryInfo          : CloseError: (:) [New-AzVM], CloudException
FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.NewAzureVMCommand
ErrorDetails          : 
InvocationInfo        : System.Management.Automation.InvocationInfo
ScriptStackTrace      : at <ScriptBlock>, <No file>: line 1
PipelineIterationInfo : {0, 1}
PSMessageDetails      : 

確認方法

以下のコマンドを実行し、Az.Computeモジュールのバージョンを確認します。

Get-module -Name Az.Compute

Az.Compute moduleのバージョンごとの発生状況を、試した限りですがまとめました。

  • 本記事のエラーが発生するバージョン
    • 7.1.1
  • 本記事のエラーが発生しないバージョン
    • 6.3.0
    • 5.1.1

※ 記事執筆時点の状況です。2024/2/6のアップデートで修正が予定されています

回避方法

Az.Compute moduleのバージョンを下げることでこの問題を回避できます。

バージョンを下げる方法はいくつかありますが、一番影響が少ないと思われる、現在のユーザーを対象に、Az.Compute module 6.3.0をインストールする方法です。

PowerShellで以下のコマンドを実行します。

Install-Module -name Az.Compute -Scope CurrentUser -RequiredVersion 6.3.0 -Force

実行後、以下のようなメッセージが表示されます。*1

Installing package 'Az.Compute' [Installing dependent package 'Az.Accounts'

Cloud Shellの場合、上記実行後にCloud Shellの再起動を実行します。

PCの場合は、PowerShellのウィンドウを閉じて開きなおします。

再起動または開きなおした後で、再度下記コマンドを実行し、バージョンが変わってることを確認します。

Get-module -Name Az.Compute

注意点

バージョンを下げることで、本記事のエラーが回避できる事は確認していますが、スクリプトによっては他の問題が発生する可能性があります。

補足

バージョンを戻したい場合

バージョンを下げるときと同様のコマンドを実施し、再起動すれば戻すことができます。

Install-Module -name Az.Compute -Scope CurrentUser -RequiredVersion 7.1.1 -Force

改善につながらなかった設定

実際にエラーが出たスクリプトは下記のようなものになります。

# Create some variables for the new VM.
$resourceGroup = "myResourceGroup"
$location = "South Central US"
$vmName = "mySpecializedVM"

# 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 $imageVersion.Id to specify the image version.
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1_v2 | `
Set-AzVMSourceImage -Id $galleryImage.Id | `
Add-AzVMNetworkInterface -Id $nic.Id

# Create a virtual machine
New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig

(引用元:チュートリアル - Azure PowerShell を使用してカスタム VM イメージを作成する - Azure Virtual Machines | Microsoft Learn

今回のエラーをメッセージ通り受け取ると、parameterで設定しているversionが不適切、というものでしたので、versionを明記することをいくつか試しましたが、いずれも効果はありませんでした。

一例です。

  • $vmConfigにバージョンを明示的に指定する
    • $vmConfig.StorageProfile.ImageReference.Version = "1.0.0"
    • $vmConfig.StorageProfile.ImageReference.Version = "latest"
  • $galleryImage.Idに指定する値を下記の形式にする
    • subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageDefinitionName}/versions/{version}

おわりに

$vmConfigのバージョン指定を最初に調査して試行錯誤していたので、バージョン依存の問題であることにたどり着くまでにかなり苦労しました。

日本語の情報も少なかったので、同様の症状で困っている方の参考になれば幸いです。

*1:Cloud Shellでの確認のため、PC上ではメッセージが異なる可能性があります

執筆担当者プロフィール
舟越 匠

舟越 匠(日本ビジネスシステムズ株式会社)

人材開発部に所属。社内向けの技術研修をメインにしつつ、JBS Tech BlogやMS認定資格取得の推進役もやっています。資格としてはAzure Solutions Architect Expertを所持。好きなサービスはPower Automate / Logic Apps。好きなアーティストはZABADAK。

担当記事一覧