【问题标题】:How can I kill all my EC2 instances from the command line?如何从命令行终止我的所有 EC2 实例?
【发布时间】:2010-10-12 21:46:43
【问题描述】:

如何从命令行终止我的所有实例?是否有此命令或我必须编写脚本?

【问题讨论】:

    标签: amazon-ec2 amazon-web-services


    【解决方案1】:

    这是一个老问题,但我想我会为AWS CLI 分享一个解决方案:

    aws ec2 terminate-instances --instance-ids $(aws ec2 describe-instances --filters  "Name=instance-state-name,Values=pending,running,stopped,stopping" --query "Reservations[].Instances[].[InstanceId]" --output text | tr '\n' ' ')
    

    相关信息:

    如果黑客禁用了意外终止实例,请先运行以下命令:

    aws ec2 describe-instances --filters  "Name=instance-state-name,Values=pending,running,stopped,stopping" --query "Reservations[].Instances[].[InstanceId]" --output text  |  xargs --delimiter '\n' --max-args=1 aws ec2   modify-instance-attribute  --no-disable-api-termination --instance-id
    

    【讨论】:

    • 我希望你不介意我删除了$,这样人们就可以通过三次单击来复制和粘贴,而不是水平滚动到最后。我还添加了第二条命令,而不是发布单独的答案并从您那里窃取信用。
    • 要遍历所有区域,您可以运行此脚本:pastebin.com/tMTL8sr6
    【解决方案2】:

    AWS ConsoleElasticfox 让它变得非常简单。

    使用 EC2 API 工具可以在一行中实现命令行解决方案:

    for i in `ec2din | grep running | cut -f2`; do ec2kill $i; done
    

    【讨论】:

      【解决方案3】:

      据我所知,ec2-terminate-instances 命令没有“全部”开关。所以你可能需要编写脚本。不会那么难。您只需要生成一个逗号分隔的实例列表。

      这是我正在使用的 python 脚本:

      import sys
      import time
      from boto.ec2.connection import EC2Connection
      
      def main():
          conn = EC2Connection('', '')
          instances = conn.get_all_instances()
          print instances
          for reserv in instances:
              for inst in reserv.instances:
                  if inst.state == u'running':
                      print "Terminating instance %s" % inst
                      inst.stop()
      
      if __name__ == "__main__":
          main()
      

      它使用boto 库。这对于特定任务来说不是必需的(一个简单的 shell 脚本就足够了),但在很多情况下它可能会很方便。

      您终于知道 Firefox 的 Elasticfox 扩展了吗?这是迄今为止访问 EC2 最简单的方法。

      【讨论】:

      • 我相信你现在可以使用 connection.terminate_instances()
      【解决方案4】:

      这是使用 boto3 的更新答案:

      1. 下载python 3
      2. 关注Quickstart for boto3
      3. 将以下代码粘贴到文件中,然后调用它不带空格的任何名称,我做了 delete_ec2_instances.py
      import boto3
      def terminateRegion(region, ignore_termination_protection=True):
          """This function creates an instance in the specified region, then gets the stopped and running instances in that region, then sets the 'disableApiTermination' to "false", then terminates the instance."""
          # Create the profile with the given region and the credentials from:
          # https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html
          s = boto3.session.Session(region_name=region)
          ec2 = s.resource('ec2')
          # Get all the instances from the specified region that are either stopped or running
          instances = ec2.instances.filter(Filters=[{'Name':'instance-state-name', 'Values': ['stopped', 'running', 'pending']}])
          for instance in instances:
              # set 'disableApiTermination' to 'false' so we can terminate the instance.
              if ignore_termination_protection:
                  instance.modify_attribute(Attribute='disableApiTermination', Value='false')
              instance.terminate()
          print("done with {0}".format(region))
      
      if __name__ == "__main__":
          # We get a list of regions that the account is associated with
          ec2 = boto3.client('ec2')
          regions = [r['RegionName'] for r in ec2.describe_regions()['Regions']]
          # loop through the regions and terminate all the instances in each region
          for region in regions:
              terminateRegion(region)
          print("done with everything")
      
      1. 使用命令行导航到上述文件并键入: python terminate_ec2_instances.py (或您的文件名称。
      2. 您应该会看到该区域被删除时的名称,以及所有实例都已终止时的最终完成消息。

      【讨论】:

      • 我喜欢“ctrl + c -> ctrl + v”stackoverflow 的答案!
      【解决方案5】:

      为了完整起见。 这是另一种方式,通过使用正则表达式和 aws cli,更符合程序员的技能:

      aws ec2 terminate-instances 
              --instance-ids 
               $(
                aws ec2 describe-instances 
                  | grep InstanceId 
                  | awk {'print $2'} 
                  | sed 's/[",]//g'
                )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-20
        • 2016-12-09
        • 1970-01-01
        • 2018-04-18
        • 2012-05-19
        • 2020-03-16
        • 1970-01-01
        相关资源
        最近更新 更多