【发布时间】:2021-04-28 02:37:43
【问题描述】:
遵循 AWS Lambda 正在按预期工作 [i.e. ec2 instance stop and start] 适用于不属于任何自动扩展组的 ec2 实例,但不适用于属于自动扩展组的 ec2 实例。
对于属于自动扩展组的 ec2 实例,ec2 实例将重新启动并再次运行。
AWS Lambda 代码如下;
import boto3
ec2 = boto3.client('ec2')
def lambda_handler(event, context):
action_handler(event['action'])
def get_ec2_instances():
ec2_int = ec2.describe_instances(
Filters=[{
'Name': 'ops',
'Values': [
'cost-save'
]
}]
)
return ec2_int
def action_handler(action):
ec2_instances = get_ec2_instances()
for reservation in ec2_instances['Reservations']:
for ec2_instance in reservation['Instances']:
if action == "stop":
stop_ec2(ec2_instance)
elif action == "start":
start_ec2(ec2_instance)
def stop_ec2(ec2_int):
if ec2_int['State']['Name'] == 'running':
ec2.stop_instances(InstanceIds=[ec2_int['InstanceId']])
def start_ec2(ec2_int):
if ec2_int['State']['Name'] == 'stopped':
ec2.start_instances(InstanceIds=[ec2_int['InstanceId']])
您能帮忙解决这个问题吗?我想确保作为自动缩放一部分的 ec2 实例也必须停止和启动。
【问题讨论】:
-
这就是 asg 的工作原理。您无法停止 asg 中的实例。
-
@Marcin - 感谢您的快速回复。我可以理解,但是这个 lambda 是为了降低开发和测试环境中 ec2 实例的成本。所以,我从这个角度来看,寻找任何解决方法或技巧来阻止开发和测试环境中的 ec2。
-
如果您想“停止”而不是“终止”开发/测试实例,请不要将它们放在 Auto Scaling 组中。您可以从 Auto Scaling 组中暂时删除它们,然后停止它们,但这违背了使用 Auto Scaling 组的全部目的。可以终止并重新启动这些实例(在这种情况下使用 Scaling Policies 添加/删除实例),或者不使用 Auto Scaling 组。
标签: python-3.x amazon-web-services amazon-ec2 aws-lambda boto3