使用CLI一次停止AWS Autoscaling Group中的所有实例

时间:2019-03-15 15:31:28

标签: python amazon-web-services aws-cli

我正在使用此代码从Auto Scaling组中分离实例

import os, subprocess
CMD = "aws autoscaling --region us-east-1 describe-auto-scaling-groups --query 'AutoScalingGroups[?contains(Tags[?Key==`Test_Tag_1`].Value,`SBX_Min_Det`)].Instances[*].[InstanceId]' --output text"
output = subprocess.check_output(CMD, shell=True)
lst = []
for char in output:
   lst.append(char)
lst = ''.join(lst).split('\n')
lst.remove("")

print (lst)
for l in lst:
   l = '"'+str(l)+'"'
   new_cmd = "aws autoscaling --region us-east-1 detach-instances --auto-scaling-group-name Test_Group --should-decrement-desired-capacity --instance-ids "+l
   subprocess.check_output(new_cmd, shell=True)

但是,我希望能够使用一个脚本将多个实例从多个组中分离出来。我对Python和AWS CLI命令很陌生。任何帮助将不胜感激。谢谢。

我对以前的脚本做了如下更改,目前停留在这里。

import os, subprocess
CMD = "aws autoscaling --region us-east-1 describe-auto-scaling-groups --query 'AutoScalingGroups[?contains(Tags[?Key==`Name`].Value,`test_asg`)].[AutoScalingGroupName]' --output text"
output = subprocess.check_output(CMD, shell=True)
lst = []
for char in output:
   lst.append(char)
lst = ''.join(lst).split('\n')
lst.remove("")

print (lst)
for l in lst:
   l = '"'+str(l)+'"'
   new_cmd = "aws autoscaling --region us-east-1 describe-auto-scaling-groups --query 'AutoScalingGroups[].Instances[*].[InstanceId]' --output text --auto-scaling-group-name "+l
   output2 = subprocess.check_output(new_cmd, shell=True)
   lst2 = []
   for char in output2:
      lst2.append(char)
   lst2 = ''.join(lst2).split('\n')
   lst2.remove("")

   print(lst2)
   for l2 in lst2:
      l2 = '"'+str(l2)+'"'
      new_cmd_2 = "aws autoscaling --region us-east-1 detach-instances --auto-scaling-group-name $CMD --should-decrement-desired-capacity --instance-ids "+l
      subprocess.check_output(new_cmd_2, shell=True)

1 个答案:

答案 0 :(得分:0)

Amazon EC2 Auto Scaling组可用于根据需要自动置备许多Amazon EC2实例。

例如,当实例繁忙时,扩展策略可以自动启动其他实例(“向外扩展”)。然后,在晚上,当实例使用不足时,Auto Scaling可以自动删除实例(“放大”)。

Auto Scaling还会监视Auto Scaling组中实例的运行状况,并将自动替换所有失败的实例。

这是通过指定启动配置来完成的,该配置定义了如何启动新实例,包括实例类型,AMI和安全组。

Types of scaling包括:

  • 始终保持当前实例级别(例如替换失败的实例)
  • 手动缩放
  • 根据时间表进行缩放
  • 根据需求扩展规模

Dynamic Scaling for Amazon EC2 Auto Scaling - Amazon EC2 Auto Scaling可以通过以下方式控制:

  • 目标跟踪缩放比例:根据特定指标的目标值增加或减少组的当前容量。这类似于恒温器保持房屋温度的方式–选择温度,其余部分由恒温器完成。
  • 逐步扩展:根据一组扩展调整(称为逐步调整)来增加或减少组的当前容量,这些调整根据警报违规的大小而变化。
  • 简单缩放:基于单个缩放调整来增加或减少该组的当前容量。

最简单的方法是使用Target Tracking Scaling Policies for Amazon EC2 Auto Scaling

  

使用目标跟踪缩放策略,您可以选择缩放指标并设置目标值。 Amazon EC2 Auto Scaling创建和管理CloudWatch警报,这些警报触发缩放策略并根据指标和目标值计算缩放调整。缩放策略会根据需要添加或删除容量,以将指标保持在指定的目标值或接近指定的目标值。除了使指标接近目标值外,目标跟踪缩放策略还根据负载模式的变化来适应指标的变化。

底线::您不应该不要分离实例并将其附加到Auto Scaling组。相反,您应该基于指定的指标(例如,CPU使用率,用户数,工作积压等)配置扩展策略以使其自动发生。

请注意,Auto Scaling 启动新实例终止实例。它不会启动/停止实例。