2013-05-03 70 views
2

我正在嘗試爲大型作業生成1000個Azure虛擬機(是的,我知道成本)。這是在PowerShell腳本中完成的(參見下面的腳本),所以在等待所有虛擬機啓動時不會發生費用。在PowerShell中創建Azure虛擬機異步

在腳本如果Wait-JobReceive-Job包括當腳本運行的所有虛擬機要求創建的,但如果Wait-JobReceive-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

我想通過我們的微軟代表發送幾封電子郵件後發生了什麼事情當在Azure中使用Affinity Group和/或Virtual Network創建新的虛擬機時,將創建排它鎖。這種獨佔鎖定不允許多個請求訪問Affinity Group和/或虛擬網絡。

+0

您是否能夠想出一個不需要Wait-Job的解決方案? – Glenn 2014-11-04 15:44:18

+1

腳本塊(Start-Job)中的代碼爲您創建虛擬機。您不需要運行Wait-Job和Receive-Job來創建虛擬機。 – 2014-11-04 20:23:51

+0

謝謝。但是,在連續創建多個虛擬機時,鎖定虛擬網絡還存在問題嗎?我瞭解到,由於獨佔鎖定,一些工作並未成功完成。您是否修改了腳本以處理失敗的作業,直到它們全部完成? – Glenn 2014-11-05 22:04:06

1

您是否嘗試將等待工作移至for循環之外?我猜你知道,通過把它放在那裏,你可以使它同步運行。

下面將等待所有作業:

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

接收在職應該給你一些沒有被創建,爲什麼一些線索。