【问题标题】:AWS EC2 stop all through PowerShell/CMD toolsAWS EC2 通过 PowerShell/CMD 工具停止一切
【发布时间】:2019-07-25 17:39:51
【问题描述】:

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

最初,我们正在寻找一个相当基本的“awsec2 stop all”命令,以便在我们知道将 24/7 全天候运行的服务器上按计划运行。

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

有没有更好的方法来收集这些 ID,例如简单地发出“停止所有”命令?

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

    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 表示--query 选项。 awscli 1.0.0 上没有它。但是,它在awscli 1.2.7 上。我安装了1.0.0,因此使用jq 进行json 解析。我安装了1.2.7,现在我可以使用--query
    【解决方案2】:

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

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

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

    这些函数映射如下:

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

    【讨论】:

    • 上面提供的命令是正确的。它将停止一个区域中的所有实例。
    【解决方案3】:

    这一行将停止所有实例:

    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/)

    ..是的,上面的语法是针对特定于 Linux Bash shell 的。您可以在 windows 上模仿 powershell 并找出解析 json 的 powersehll 方式。

    【讨论】:

      【解决方案4】:

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

      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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-07
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        • 1970-01-01
        相关资源
        最近更新 更多