AWS Ec2 PowerShell用户数据脚本在启动时速度极慢

时间:2016-08-30 14:01:33

标签: windows powershell amazon-web-services amazon-ec2 user-data

我目前正在启动"竞价型实例"在g2.xlarge CPU上,并使用Amazon提供的userdata paremeter传递启动脚本。

我想在启动时移动一些文件,从根卷到EBS卷。这一切都很完美,我编写了一个Powershell脚本来执行此操作,当我在我的mac的远程桌面连接会话中运行.ps1文件时,它运行得很好。完成移动这些文件大约需要30秒。

然而!!! :)当我在创建竞价型实例时将该EXACT SAME PowerShell脚本传递给用户数据时,它看起来有点冻结(虽然它没有,它只是很慢)并且它需要一个惊人的 10-20分钟完成移动文件! :/

这意味着整个启动过程将永远持续下去。

我尝试使用robocopy,标准移动命令以及foreach循环中的Powershell原生Move-Item移动文件。同样适用:从RDP会话运行时所有命令都可以正常工作,但是在启动实例时通过userdata,要在启动时运行,它们完成得非常慢(或启动?):/

有谁知道这个问题是什么?

我真的需要服务器自动移动文件,而不必使用RDP进入服务器来执行此操作。

谢谢! :)

btw我正在运行Windows Server 2012 R2

编辑: 如果它与我用来移动文件的脚本有关,就在这里。 :)

Start-Job -Name MoveFolder -ScriptBlock {
$path = "C:\Program Files (x86)\OldDestination"
$archpath = "Z:\NewDestination"

$counter = 0
$oldpercentage = 0
$files = Get-Childitem -Path $path -recurse -force
$totalcount = $files.count

$lasttime = [int][double]::Parse((Get-Date -UFormat "%s"))
foreach($file in $files) {
  $filename = $file.FullName
  Move-Item $file.FullName -destination $archpath -force -ErrorAction:SilentlyContinue
  $counter++
  $percentage = ($counter/$totalcount)*100
  $percentage = [math]::Round($percentage)
  if($percentage -gt 99) { $percentage = 99 }
  $runtime = [int][double]::Parse((Get-Date -UFormat "%s"))
  $runtime = $runtime - $lasttime

  if($runtime -gt 5) { //Max. log process on server every > 5 seconds
    if($percentage -gt $oldpercentage) {
      Invoke-WebRequest -Uri http://exampleurl.com/$percentage -Method GET -UseBasicParsing
      $lasttime = [int][double]::Parse((Get-Date -UFormat "%s"))
      $oldpercentage = $percentage
    }
  }
}
$percentage = 100
Invoke-WebRequest -Uri http://exampleurl.com/$percentage -Method GET -UseBasicParsing
}
Wait-Job -Name MoveFolder

0 个答案:

没有答案