在AWS中启动/停止实例并使用powershell等待

时间:2018-02-07 15:59:41

标签: .net powershell amazon-web-services

我知道通过Powershell启动和停止实例非常容易:

$awsCreds = Get-AWSAutomationCreds
Set-AWSCredentials -AccessKey $awsCreds.AccessKey -SecretKey $awsCreds.SecretKey
Set-DefaultAWSRegion -Region us-east-1

$instances = Get-EC2Instance -Filter @{name="tag:Name"; values="SERVERNAMES"} | Select -ExpandProperty Instances
$instances.InstanceId | foreach {Stop-EC2Instance $_ -ErrorAction SilentlyContinue}

是否有一种快速而肮脏的方式,我只是没有通过AWS Powershell Cmdlet或甚至.NET SDK看到,这将允许我等待操作完成。和/或更新我收集的实例对象的集合?

或者我坚持运行:

$instances = Get-EC2Instance -Filter @{name="tag:Name"; values="SERVERNAMES"} | Select -ExpandProperty Instances

反复命令直到状态完全改变?

1 个答案:

答案 0 :(得分:2)

Sam Martin在Github中有一个PowerShell模块,其中包含一些适用于AWS的PowerShell帮助函数,您可以在此处找到:https://github.com/Sam-Martin/AWSWindowsHelpers/

他可以在他的Wait-AWSWindowsHelperInstanceToStopWait-AWSWindowsHelperInstanceReady cmdlet中看到他解决此问题的方法,并且(正如您已经建议的那样)只是为了运行一个带有开始睡眠的循环,直到实例处于您期望的状态。 E.g:

While((Get-EC2Instance -InstanceId $InstanceID -Region $Region).Instances[0].State.Name -ne 'stopped'){
    Write-Verbose "Waiting for instance to stop"
    Start-Sleep -s 10
}