2013-05-03 1 views
2

Я пытаюсь создать 1000 лазурных виртуальных машин (да, я знаю, стоимость) для большой работы. Это выполняется в сценарии PowerShell (см. Скрипт ниже) асинхронно, поэтому сборы не будут возникать, ожидая, пока все виртуальные машины начнут вращаться.Создание Azure VM Asynchronous в PowerShell

В сценарии, если Wait-Job и Receive-Job включают, когда скрипт запускает все запрашиваемые виртуальные машины созданы, но если Wait-Job и Receive-Job закомментировано все виртуальные машины не созданы. Кажется случайным создание виртуальных машин.

Может ли кто-нибудь увидеть, что я делаю неправильно с этим скриптом?

$VMCount = 5 
$Location = 'East US' 
$Image = 'MyImage' 
$AdminPassword = 'XXXXXXXXXX' 
$LinuxUser = 'MyUser' 
$InstanceSize = 'ExtraSmall' #extra small only for testing 

$CloudServiceName = 'NewAzureMachinePrefix' #this is changed each time to something unique 

for ($i = 1; $i -le $VMCount; $i++) 
{ 
$jobId = Start-Job -ArgumentList $CloudServiceName$i, $Location, $Image, $AdminPassword, $LinuxUser, $InstanceSize -ScriptBlock { 
    param($ServiceName, $Loc, $Img, $Password, $User, $Size) 
    New-AzureVMConfig -Name $ServiceName -InstanceSize $Size -ImageName $Img | 
    Add-AzureProvisioningConfig -Linux -LinuxUser $User -Password $Password | 
    Add-AzureDataDisk -CreateNew -DiskSizeInGB 50 -DiskLabel $ServiceName -LUN 0 | 
    Remove-AzureEndpoint 'SSH' | 
    Add-AzureEndpoint -Protocol tcp -PublicPort 22 -LocalPort 22 -Name 'SSH' | 
    Set-AzureSubnet 'MySubnet' | 
    New-AzureVM -ServiceName $ServiceName -AffinityGroup 'MyGroup' -VNetName 'MyNet' 
} 

Write-Output $CloudServiceName$i 
Wait-Job $jobId 
Receive-Job $jobId 
} 

ответ

2

Я выяснил, что происходит после нескольких писем от нашего Microsoft Rep. При создании новой виртуальной машины в Azure с использованием Affinity Group и/или виртуальной сети создается эксклюзивная блокировка. Эта исключительная блокировка не позволяет более одного запроса получить доступ к группе Affinity и/или виртуальной сети.

+0

Вы могли придумать решение, которое не требовало Wait-Job? – Glenn

+1

Код в блоке сценария (Start-Job) создает для вас виртуальную машину. Для получения виртуальной машины вам не нужно запускать Wait-Job и Receive-Job. –

+0

Спасибо. Но есть ли проблема с блокировкой в ​​виртуальной сети при создании нескольких виртуальных машин подряд? Я понимал, что некоторые задания не завершились успешно из-за исключительной блокировки. Вы модифицировали свой скрипт для обработки неудачных заданий, пока они не закончили? – Glenn

1

Вы пробовали переместить работу Wait-job за пределы цикла for? Я предполагаю, что вы знаете, что, поставив его там, вы запускаете его синхронно.

Ниже будет ждать всех рабочих мест:

Get-Job | Wait-Job 
Get-Job | Receive-Job 

приема-Job должен дать вам некоторые подсказки о том, почему некоторые из них не создается.