我并不完全清楚导致此错误的原因,但可能有几个原因。值得检查:
- 图片在您选择的位置不可用。
- 您使用的是 MSDN 或其他受限订阅类型。
- 您尝试部署的映像是为 Hyper-V Gen 1 设计的,但您的 VM 大小仅支持 Gen 2。
我遇到了 OPs 错误,首先从 MSDN 订阅切换到 EA 订阅,这导致了另一个与 Hyper-V 生成有关的错误。
有时很难在门户中找到特定图像。有些图像甚至不存在于门户中,即使您确实找到了图像,UI 似乎也使用了 version = latest,而这并不适用于所有图像。
有四个部分来指定图像。 version 通常会被忽略。还有一种叫做 URN 的东西,它将这些与 : 连接起来。请参阅here,但是,我从未在 ARM JSON、Terraform 或 PowerShell 中使用过它。也许适合二头肌或 AzCLI。
- 出版商
- 报价
- Sku
- 版本
标准 Windows 操作系统映像相当简单,因此我将使用更难找到的映像来演示:Microsoft SQL Server 2014, SP2, Enterprise。我在门户中找不到这个确切的图像。
1。列出uksouth 区域的发布者:
# It's a safe bet the image is published by Microsoft
$Location = "uksouth"
Get-AzVmImagePublisher -Location $Location | Where-Object{$_.PublisherName -like "*Microsoft*"}
这会返回约 411 个名称中带有 Microsoft 的发布者。最佳竞争者是MicrosoftSQLServer。
2。列出MicrosoftSQLServer 的报价:
$Location = "uksouth"
$Publisher = "MicrosoftSQLServer"
Get-AzVmImageOffer -Location $Location -PublisherName $Publisher
这将其缩减为约 34 个与 SQL 相关的图像。为了更清楚一点,我将添加一个过滤器:
Get-AzVmImageOffer -Location $Location -PublisherName $Publisher | Where-Object{$_.Offer -like "*2014*"}
我现在有 4 个可能的图像:
3。获取图片 SKU:
$Location = "uksouth"
$Publisher = "MicrosoftSQLServer"
$Offer = "SQL2014SP2-WS2012R2-BYOL"
Get-AzVMImageSku -Location $Location -PublisherName $Publisher -Offer $Offer
这将返回 2 个可能的选项:
当然,这意味着图像可用。为什么 Microsoft 会列出实际上不可部署的映像?那么为什么会出现错误:
The platform image 'MicrosoftSqlServer:SQL2014SP2-WS2012R2-BYOL:Enterprise:latest' is not available.
Verify that all fields in the storage profile are correct.
For more details about storage profile information, please refer to https://aka.ms/storageprofile ErrorCode: PlatformImageNotFound ErrorMessage:
The platform image 'MicrosoftSqlServer:SQL2014SP2-WS2012R2-BYOL:Enterprise:latest' is not available. Verify that all fields in the storage profile are correct.
For more details about storage profile information, please refer to
https://aka.ms/storageprofile ErrorTarget: imageReference StatusCode: 404 ReasonPhrase:
Not Found OperationID : cea13334-878b-49ad-8934-ff75ccdbf623
线索在URN:
MicrosoftSqlServer:SQL2014SP2-WS2012R2-BYOL:Enterprise:latest
而我发现的问题是:latest
4。获取镜像版本:
配备Publisher、Offer 和Sku,我们可以找到可用的版本。
$Location = "uksouth"
$Publisher = "MicrosoftSQLServer"
$Offer = "SQL2014SP2-WS2012R2-BYOL"
$Sku = "Enterprise"
Get-AzVMImage -Location $Location -PublisherName $Publisher -Offer $Offer -Skus $Sku
这会产生几个版本:
我不是 100% 确定版本号遵循什么格式。这似乎是一个时间戳。我假设列表中的最后一个是“最新的”。请注意,它们都没有显示为 latest,但是,对于已知 version = latest 有效且不足为奇的图像,这是正确的。
可以通过将-Version 添加到最后一个 cmdlet 来收集更多信息:
$Location = "uksouth"
$Publisher = "MicrosoftSQLServer"
$Offer = "SQL2014SP2-WS2012R2-BYOL"
$Sku = "Enterprise"
$Version = "12.21.210914"
Get-AzVMImage -Location $Location -PublisherName $Publisher -Offer $Offer -Skus $Sku -Version $Version
结果如下:
注意
PurchasePlan 是 null,但这可能是非 Microsoft 映像的一个陷阱,其中会产生额外费用并且必须接受供应商的 T&C。见here。
在本例中,HyperVGeneration = v1。请注意,某些 VM 大小不支持第 1 代。不过,此错误相当明显:
The selected VM size 'Standard_DC4s_v2' cannot boot Hypervisor Generation '1'. If this was a Create operation please check that the Hypervisor Generation of the
Image matches the Hypervisor Generation of the selected VM Size. If this was an Update operation please select a Hypervisor Generation '1' VM Size. ErrorCode:
BadRequest ErrorMessage: The selected VM size 'Standard_DC4s_v2' cannot boot Hypervisor Generation '1'. If this was a Create operation please check that the
Hypervisor Generation of the Image matches the Hypervisor Generation of the selected VM Size. If this was an Update operation please select a Hypervisor
Generation '1' VM Size. ErrorTarget: StatusCode: 400 ReasonPhrase: Bad Request OperationID : 06f9c9a6-c9bb-4c83-87aa-9d1b7392a171
5。部署镜像:
我不会列出所有用于部署 VM 的 cmdlet,但主要用于映像选择的是:
$Location = "uksouth"
$Publisher = "MicrosoftSQLServer"
$Offer = "SQL2014SP2-WS2012R2-BYOL"
$Sku = "Enterprise"
$Version = "12.21.210914"
Set-AzVMSourceImage -VM $oVM -PublisherName $Publisher -Offer $Offer -Skus $Sku -Version $Version
最后,部署的虚拟机: