问题描述
尝试使用类似以下的Playbook创建一个虚拟机(VM):
tasks:
...
- name: Create VM
azure_rm_virtualmachine:
resource_group: AnsibleResourcEGroup
name: AnsibleVM
vm_size: Standard_D4s_v3
...
然而,在运行Playbook时,”Create VM” 任务失败,并显示以下错误信息:
fatal: [localhost]: FAILED! => {
"changed": false,
"msg": "Error creating or updating virtual machine AnsibleVM - Azure Error: SkuNotAvailable\nMessage: The requested size for resource '/subscriptions/some-subscription-id/resourceGroups/some-resource-group-name/providers/Microsoft.Compute/virtualMachines/AnsibleVM' is currently not available in location 'region-name' zones '' for subscription 'some-subscription-id'. Please try another size or deploy to a different location or zones. See https://aka.ms/azureskunotavailable for details."
}
然而,当使用az
命令行工具查询可用的VM大小时,大小Standard_D4s_v3
似乎是可用的:
$ az vm list-skus --location region-id --size Standard_D --output table
ResourceType Locations Name Zones Capabilities ...
virtualMachines region-id Standard_D2s_v3 1,2,3 ['MaxResourceVolumeMB=16384', ...] None
virtualMachines region-id Standard_D4s_v3 1,2,3 ['MaxResourceVolumeMB=32768', ...] None
virtualMachines region-id Standard_D8s_v3 1,2,3 ['MaxResourceVolumeMB=65536', ...] None
...
这引发了一个问题:我的理解哪里出了错?我应该如何确保在我的地区中有一个可用的VM大小?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在使用Ansible时,确保正确设置了region-id
,这样可以明确指定地区。如果未在Ansible中指定region-id
,它将使用资源组的默认地区。如果你的资源组在不支持Standard_D4s_v3
的地区,你将遇到问题。
以下是在Ansible Playbook 中如何设置地区的步骤:
1. 在Playbook的azure_rm_virtualmachine
任务中,添加location
参数并设置为所需的地区。
2. 例如,如果你想将虚拟机创建在东南亚地区,你可以这样设置:
yaml
tasks:
...
- name: Create VM
azure_rm_virtualmachine:
resource_group: AnsibleResourcEGroup
name: AnsibleVM
vm_size: Standard_D4s_v3
location: southeastasia
...
方案2
特定的VM实例类型有时在某个地区由于Azure的资源限制而不可用,这通常是一个临时状态,因此等待几个小时后再试可能会成功。你可以稍后再次尝试创建虚拟机。
方案3
另一个可能性是,你的Azure订阅可能受到配额限制,这可能会阻止你创建虚拟机。但如果是这种情况,你应该会收到不同的、更具描述性的错误信息。你可以检查你的订阅的限制和配额,以确保它们没有阻止你创建VM。
通过采取上述措施,你应该能够解决问题,确保所指定的Azure虚拟机大小在你所在的地区可用。如果问题仍然存在,请检查其他可能的原因,例如Azure服务状态或其他地区限制。