延迟从Lambda停止AWS EC2实例,直到用户处于非活动状态

时间:2018-03-23 20:46:52

标签: amazon-web-services amazon-ec2 aws-lambda boto3

我使用简单的AWS Lambda函数在给定区域和实例ID的情况下停止EC2实例(请参阅下面的python代码)。 Lambda功能由AWS CloudWatch规则触发(特别是每天下午6点的计划)。这一切都经过测试和运作。

import boto3
def lambda_handler(event, context):
    region = event.get('region')
    instances = event.get('instances')
    ec2 = boto3.client('ec2', region_name=region)
    ec2.stop_instances(InstanceIds=instances)
    print 'started your instance: ' + str(instances)

如果用户主动登录EC2实例并且触发了该功能,则EC2实例将强制关闭该实例。

那么,有没有办法(在CloudWatch或Lambda中)延迟和/或忽略关闭,直到用户处于非活动状态或完全注销?也许使用boto3代码?

更新

考虑使用服务员,但我找到的唯一一个等待直到实例正在使用,而不是使用。也许等待呢?还考虑了CloudWatch警报,它可以在一段时间不活动后停止实例,但不能在确切时间触发。

waiter = ec2.get_waiter('volume_in_use')
waiter.wait(
    WaiterConfig={
    'Delay': 900, # In Seconds (900 = 15 mins)
    'MaxAttempts': 47 # Number of Attempts (47 = 11.75 hours)
    }
) # Default wait is 15 seconds 40 times

1 个答案:

答案 0 :(得分:0)

Lambda 可以利用 SSM Run 命令在启动关闭之前检查是否有人在本地登录。