AWS EC2通过PowerShell / CMD工具停止所有操作

时间:2013-12-10 13:51:45

标签: powershell amazon-web-services amazon-ec2

我在AWS中使用了许多“一次性”服务器,我们正在努力降低这些服务器的成本。

最初,我们正在寻找一个相当基本的'awsec2 stop all'命令,从我们知道将全天候运行的服务器按计划运行。

在检查AWS记录的内容后,我们需要提取所有当前正在运行的实例,获取这些实例的ID,然后将它们传递到命令中,而不是简单地声明我希望所有实例都关闭。

是否有更好的方法来收集这些ID,例如只是能够发出'全部停止'?

感谢帮助。

4 个答案:

答案 0 :(得分:6)

AWS CLI使用--query选项提供内置JSON解析。此外,您可以使用--filter选项仅对正在运行的实例执行stop命令。

aws ec2 describe-instances \
--filter Name=instance-state-name,Values=running \
--query 'Reservations[].Instances[].InstanceId' \
--output text | xargs aws ec2 stop-instances --instance-ids

答案 1 :(得分:3)

这是未经测试的,但应该使用AWS Tools for Powershell

@(Get-EC2Instance) | % {$_.RunningInstance} | % {Stop-EC2Instance $_.InstanceId}

用简单的英语,上面的行获取EC2实例对象的集合(Amazon.EC2.Model.Reservation),为每个对象(与实例相关的各种属性的集合)获取RunningInstance属性,并使用它来获取每个InstanceId并停止实例。

这些功能映射如下:

请务必查看Stop-EC2Instance的帮助...有一些您可能感兴趣的有用参数,例如-Terminate-Force

答案 2 :(得分:2)

这个单行将停止所有的实例:

for i in $(aws ec2 describe-instances | jq '.Reservations[].Instances[].InstanceId'); do aws ec2 stop-instances --instance-ids $i; done

本发明提供:

  1. AWS-CLI已成群(http://aws.amazon.com/cli/
  2. 您已安装jq json解析器。 (http://stedolan.github.io/jq/
  3. ..是的,上面的语法是针对Linux Bash shell特有的。你可以模仿windows上的powershell,并找出解析json的powersehll方法。

答案 3 :(得分:0)

如果有人想做通过AWS DataPipeline描述的 Peter Moon

aws ec2 describe-instances --region eu-west-1 --filter Name=instance-state-name,Values=running --query 'Reservations[].Instances[].InstanceId' --output text | xargs aws ec2 stop-instances --region eu-west-1 --instance-ids

它基本上是相同的命令,但您必须在--region之后和describe-instances之后添加stop-instances才能使其正常工作。注意通常包含在区域名称中的a / b / c。如果包含在这里,这似乎会导致错误。