我知道通过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
反复命令直到状态完全改变?
答案 0 :(得分:2)
Sam Martin在Github中有一个PowerShell模块,其中包含一些适用于AWS的PowerShell帮助函数,您可以在此处找到:https://github.com/Sam-Martin/AWSWindowsHelpers/
他可以在他的Wait-AWSWindowsHelperInstanceToStop
和Wait-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
}